@prelude/array
Version:
Array module.
32 lines • 1.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const swap_js_1 = __importDefault(require("./swap.js"));
const zeroes_js_1 = __importDefault(require("./zeroes.js"));
/**
* Based on [Permutation Generation Methods, Robert Sedgewick](http://homepage.math.uiowa.edu/~goodman/22m150.dir/2007/Permutation%20Generation%20Methods.pdf).
* @returns permutations of an array.
*/
const permutations = function* (values) {
const n = values.length;
const c = (0, zeroes_js_1.default)(n);
let i = 1;
let k = 0;
yield values.slice();
while (i < n) {
if (c[i] < i) {
k = i % 2 && c[i];
(0, swap_js_1.default)(values, i, k);
++c[i];
i = 1;
yield values.slice();
}
else {
c[i++] = 0;
}
}
};
exports.default = permutations;
//# sourceMappingURL=permutations.js.map