UNPKG

aureooms-js-array

Version:

array manipulation code bricks for JavaScript

53 lines (37 loc) 3.48 kB
'use strict'; 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=