@extra-array/permutations
Version:
Lists all possible permutations.
29 lines (28 loc) • 703 B
JavaScript
function concat$(x, ...ys) {
for (var y of ys)
x.push(...y);
return x;
}
function splice(x, i, n = x.length - i, ...vs) {
return concat$(x.slice(0, i), vs, x.slice(i + n));
}
function* permutationsOf(x, n) {
var X = x.length;
if (X === 0 || n === 0) {
yield [];
return;
}
for (var i = 0; i < X; i++) {
var y = splice(x, i, 1);
for (var p of permutationsOf(y, n - 1))
yield [x[i], ...p];
}
}
function* permutations(x, n = -1) {
var X = x.length;
if (n > X)
return;
for (var i = n < 0 ? 0 : n, I = n < 0 ? X : n; i <= I; i++)
yield* permutationsOf(x, i);
}
export { permutations as default };