ultra-mega-enumerator
Version:
Ultra Mega Enumerator is a lightweight library designed to enumerate various combinatorial objects.
37 lines • 1.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WeakCompositionEnumeration = void 0;
const AbstractEnumeration_1 = require("./AbstractEnumeration");
const CombinationEnumeration_1 = require("./CombinationEnumeration");
class WeakCompositionEnumeration extends AbstractEnumeration_1.AbstractEnumeration {
constructor(n, k) {
super();
this.ce = new CombinationEnumeration_1.CombinationEnumeration(n + k - 1, k - 1);
}
hasMoreElements() {
return this.ce.hasMoreElements();
}
nextElement() {
if (!this.hasMoreElements()) {
throw new Error("No such element");
}
return this.convertCombination(this.ce.nextElement());
}
convertCombination(c) {
const o = [];
let cnt = 0;
for (let j = 0; j < c.size(); j++) {
if (c.get(j)) { // is a bar
o.push(cnt);
cnt = 0;
}
else { // is a star
cnt++;
}
}
o.push(cnt);
return o;
}
}
exports.WeakCompositionEnumeration = WeakCompositionEnumeration;
//# sourceMappingURL=WeakCompositionEnumeration.js.map