ultra-mega-enumerator
Version:
Ultra Mega Enumerator is a lightweight library designed to enumerate various combinatorial objects.
38 lines • 1.24 kB
JavaScript
;
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