UNPKG

@extra-array/permutations

Version:

Lists all possible permutations.

29 lines (28 loc) 703 B
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 };