UNPKG

712 BJavaScriptView Raw
1'use strict';
2function concat$(x, ...ys) {
3 for (var y of ys)
4 x.push(...y);
5 return x;
6}
7function splice(x, i, n = x.length - i, ...vs) {
8 return concat$(x.slice(0, i), vs, x.slice(i + n));
9}
10function* permutationsOf(x, n) {
11 var X = x.length;
12 if (X === 0 || n === 0) {
13 yield [];
14 return;
15 }
16 for (var i = 0; i < X; i++) {
17 var y = splice(x, i, 1);
18 for (var p of permutationsOf(y, n - 1))
19 yield [x[i], ...p];
20 }
21}
22function* permutations(x, n = -1) {
23 var X = x.length;
24 if (n > X)
25 return;
26 for (var i = n < 0 ? 0 : n, I = n < 0 ? X : n; i <= I; i++)
27 yield* permutationsOf(x, i);
28}
29module.exports = permutations;