UNPKG

ultra-mega-enumerator

Version:

Ultra Mega Enumerator is a lightweight library designed to enumerate various combinatorial objects.

38 lines 1.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KPermutationEnumeration = void 0; const AbstractEnumeration_1 = require("./AbstractEnumeration"); const MixedRadixEnumeration_1 = require("./MixedRadixEnumeration"); class KPermutationEnumeration extends AbstractEnumeration_1.AbstractEnumeration { constructor(n, k) { super(); this.n = n; this.k = k; const base = new Array(k); for (let i = 0; i < k; i++) { base[i] = n - i; } this.mre = new MixedRadixEnumeration_1.MixedRadixEnumeration(base); } hasMoreElements() { return this.mre.hasMoreElements(); } nextElement() { if (!this.hasMoreElements()) { throw new Error("No such element"); } const m = this.mre.nextElement(); const o = []; const l = []; for (let i = 0; i < this.n; i++) { l.push(i); } for (let i = 0; i < this.k; i++) { o.push(l[m[i]]); l.splice(l.findIndex((x) => x === m[i]), 1); } return o; } } exports.KPermutationEnumeration = KPermutationEnumeration; //# sourceMappingURL=KPermutationEnumeration.js.map