locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
30 lines (29 loc) • 1.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.comb = comb;
function comb(n, k) {
// discuss at: https://locutus.io/python/comb/
// parity verified: Python 3.12
// original by: Kevin van Zonneveld (https://kvz.io)
// note 1: Returns the number of ways to choose k items from n without repetition.
// example 1: comb(5, 2)
// returns 1: 10
// example 2: comb(10, 0)
// returns 2: 1
// example 3: comb(10, 3)
// returns 3: 120
const nn = Math.trunc(Number(n));
const kk = Math.trunc(Number(k));
if (!Number.isFinite(nn) || !Number.isFinite(kk) || nn < 0 || kk < 0) {
throw new Error('comb() only accepts non-negative integers');
}
if (kk > nn) {
return 0;
}
const r = Math.min(kk, nn - kk);
let result = 1;
for (let i = 1; i <= r; i += 1) {
result = (result * (nn - r + i)) / i;
}
return Math.trunc(result);
}