aureooms-js-array
Version:
array manipulation code bricks for JavaScript
53 lines (37 loc) • 3.48 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.combinations = combinations;
var _ = require('..');
function combinations(iterable, repeat, out) {
// combinations('ABCD', 2) --> AB AC AD BC BD CD
// combinations(range(4), 3) --> 012 013 023 123
var pool, len, indices, i, j;
pool = iterable;
len = pool.length;
if (repeat > len) {
return out;
}
indices = (0, _.range)(0, repeat, 1, []);
out.push((0, _.pick)(pool, indices, []));
if (repeat === 0 || len === 0) {
return out;
}
for (;;) {
for (i = repeat - 1; i >= 0; --i) {
if (indices[i] !== i + len - repeat) {
break;
}
}
if (i < 0) {
return out;
}
++indices[i];
for (j = i + 1; j < repeat; ++j) {
indices[j] = indices[j - 1] + 1;
}
out.push((0, _.pick)(pool, indices, []));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAvY29tYmluYXRpb25zLmpzIl0sIm5hbWVzIjpbImNvbWJpbmF0aW9ucyIsIml0ZXJhYmxlIiwicmVwZWF0Iiwib3V0IiwicG9vbCIsImxlbiIsImluZGljZXMiLCJpIiwiaiIsImxlbmd0aCIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7O1FBRWdCQSxZLEdBQUFBLFk7O0FBRmhCOztBQUVPLFNBQVNBLFlBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDQyxNQUFsQyxFQUEwQ0MsR0FBMUMsRUFBZ0Q7O0FBRXREO0FBQ0E7O0FBRUEsS0FBSUMsSUFBSixFQUFVQyxHQUFWLEVBQWVDLE9BQWYsRUFBd0JDLENBQXhCLEVBQTJCQyxDQUEzQjs7QUFFQUosUUFBT0gsUUFBUDtBQUNBSSxPQUFNRCxLQUFLSyxNQUFYOztBQUVBLEtBQUtQLFNBQVNHLEdBQWQsRUFBb0I7QUFDbkIsU0FBT0YsR0FBUDtBQUNBOztBQUVERyxXQUFVLGFBQU8sQ0FBUCxFQUFVSixNQUFWLEVBQWtCLENBQWxCLEVBQXFCLEVBQXJCLENBQVY7O0FBRUFDLEtBQUlPLElBQUosQ0FBVSxZQUFNTixJQUFOLEVBQVlFLE9BQVosRUFBcUIsRUFBckIsQ0FBVjs7QUFFQSxLQUFLSixXQUFXLENBQVgsSUFBZ0JHLFFBQVEsQ0FBN0IsRUFBaUM7QUFDaEMsU0FBT0YsR0FBUDtBQUNBOztBQUVELFVBQVk7O0FBRVgsT0FBTUksSUFBSUwsU0FBUyxDQUFuQixFQUF1QkssS0FBSyxDQUE1QixFQUFnQyxFQUFFQSxDQUFsQyxFQUFzQztBQUNyQyxPQUFLRCxRQUFRQyxDQUFSLE1BQWVBLElBQUlGLEdBQUosR0FBVUgsTUFBOUIsRUFBdUM7QUFDdEM7QUFDQTtBQUNEOztBQUVELE1BQUtLLElBQUksQ0FBVCxFQUFhO0FBQ1osVUFBT0osR0FBUDtBQUNBOztBQUVELElBQUVHLFFBQVFDLENBQVIsQ0FBRjs7QUFFQSxPQUFNQyxJQUFJRCxJQUFJLENBQWQsRUFBa0JDLElBQUlOLE1BQXRCLEVBQStCLEVBQUVNLENBQWpDLEVBQXFDO0FBQ3BDRixXQUFRRSxDQUFSLElBQWFGLFFBQVFFLElBQUksQ0FBWixJQUFpQixDQUE5QjtBQUNBOztBQUVETCxNQUFJTyxJQUFKLENBQVUsWUFBTU4sSUFBTixFQUFZRSxPQUFaLEVBQXFCLEVBQXJCLENBQVY7QUFFQTtBQUVEIiwiZmlsZSI6ImNvbWJpbmF0aW9ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmdlICwgcGljayB9IGZyb20gJy4uJyA7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdGlvbnMgKCBpdGVyYWJsZSwgcmVwZWF0LCBvdXQgKSB7XG5cblx0Ly8gY29tYmluYXRpb25zKCdBQkNEJywgMikgLS0+IEFCIEFDIEFEIEJDIEJEIENEXG5cdC8vIGNvbWJpbmF0aW9ucyhyYW5nZSg0KSwgMykgLS0+IDAxMiAwMTMgMDIzIDEyM1xuXG5cdHZhciBwb29sLCBsZW4sIGluZGljZXMsIGksIGo7XG5cblx0cG9vbCA9IGl0ZXJhYmxlO1xuXHRsZW4gPSBwb29sLmxlbmd0aDtcblxuXHRpZiAoIHJlcGVhdCA+IGxlbiApIHtcblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0aW5kaWNlcyA9IHJhbmdlKCAwLCByZXBlYXQsIDEsIFtdICk7XG5cblx0b3V0LnB1c2goIHBpY2soIHBvb2wsIGluZGljZXMsIFtdICkgKTtcblxuXHRpZiAoIHJlcGVhdCA9PT0gMCB8fCBsZW4gPT09IDAgKSB7XG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZvciAoIDsgOyApIHtcblxuXHRcdGZvciAoIGkgPSByZXBlYXQgLSAxIDsgaSA+PSAwIDsgLS1pICkge1xuXHRcdFx0aWYgKCBpbmRpY2VzW2ldICE9PSBpICsgbGVuIC0gcmVwZWF0ICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGkgPCAwICkge1xuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9XG5cblx0XHQrK2luZGljZXNbaV07XG5cblx0XHRmb3IgKCBqID0gaSArIDEgOyBqIDwgcmVwZWF0IDsgKytqICkge1xuXHRcdFx0aW5kaWNlc1tqXSA9IGluZGljZXNbaiAtIDFdICsgMTtcblx0XHR9XG5cblx0XHRvdXQucHVzaCggcGljayggcG9vbCwgaW5kaWNlcywgW10gKSApO1xuXG5cdH1cblxufVxuXG4iXX0=
;