UNPKG

aureooms-js-array

Version:

array manipulation code bricks for JavaScript

47 lines (33 loc) 3.12 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.combinationswithrepetition = combinationswithrepetition; var _ = require('..'); function combinationswithrepetition(iterable, r, out) { // combinationswithrepetition('ABC', 2) --> AA AB AC BB BC CC var pool, len, indices, i, next; pool = iterable; len = pool.length; if (len === 0 && r > 0) { return out; } indices = (0, _.repeat)(0, r, []); out.push((0, _.pick)(pool, indices, [])); for (;;) { for (i = r - 1; i >= 0; --i) { if (indices[i] !== len - 1) { next = indices[i] + 1; break; } } if (i < 0) { return out; } for (; i < r; ++i) { indices[i] = next; } out.push((0, _.pick)(pool, indices, [])); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAvY29tYmluYXRpb25zd2l0aHJlcGV0aXRpb24uanMiXSwibmFtZXMiOlsiY29tYmluYXRpb25zd2l0aHJlcGV0aXRpb24iLCJpdGVyYWJsZSIsInIiLCJvdXQiLCJwb29sIiwibGVuIiwiaW5kaWNlcyIsImkiLCJuZXh0IiwibGVuZ3RoIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFFZ0JBLDBCLEdBQUFBLDBCOztBQUZoQjs7QUFFTyxTQUFTQSwwQkFBVCxDQUFzQ0MsUUFBdEMsRUFBZ0RDLENBQWhELEVBQW1EQyxHQUFuRCxFQUF5RDs7QUFFL0Q7O0FBRUEsS0FBSUMsSUFBSixFQUFVQyxHQUFWLEVBQWVDLE9BQWYsRUFBd0JDLENBQXhCLEVBQTJCQyxJQUEzQjs7QUFFQUosUUFBT0gsUUFBUDtBQUNBSSxPQUFNRCxLQUFLSyxNQUFYOztBQUVBLEtBQUtKLFFBQVEsQ0FBUixJQUFhSCxJQUFJLENBQXRCLEVBQXlCO0FBQ3hCLFNBQU9DLEdBQVA7QUFDQTs7QUFFREcsV0FBVSxjQUFRLENBQVIsRUFBV0osQ0FBWCxFQUFjLEVBQWQsQ0FBVjs7QUFFQUMsS0FBSU8sSUFBSixDQUFVLFlBQU1OLElBQU4sRUFBWUUsT0FBWixFQUFxQixFQUFyQixDQUFWOztBQUVBLFVBQVk7O0FBRVgsT0FBTUMsSUFBSUwsSUFBSSxDQUFkLEVBQWtCSyxLQUFLLENBQXZCLEVBQTJCLEVBQUVBLENBQTdCLEVBQWlDO0FBQ2hDLE9BQUtELFFBQVFDLENBQVIsTUFBZUYsTUFBTSxDQUExQixFQUE4QjtBQUM3QkcsV0FBT0YsUUFBUUMsQ0FBUixJQUFhLENBQXBCO0FBQ0E7QUFDQTtBQUNEOztBQUVELE1BQUtBLElBQUksQ0FBVCxFQUFhO0FBQ1osVUFBT0osR0FBUDtBQUNBOztBQUVELFNBQVFJLElBQUlMLENBQVosRUFBZ0IsRUFBRUssQ0FBbEIsRUFBc0I7QUFDckJELFdBQVFDLENBQVIsSUFBYUMsSUFBYjtBQUNBOztBQUVETCxNQUFJTyxJQUFKLENBQVUsWUFBTU4sSUFBTixFQUFZRSxPQUFaLEVBQXFCLEVBQXJCLENBQVY7QUFDQTtBQUVEIiwiZmlsZSI6ImNvbWJpbmF0aW9uc3dpdGhyZXBldGl0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVwZWF0ICwgcGljayB9IGZyb20gJy4uJyA7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdGlvbnN3aXRocmVwZXRpdGlvbiAoIGl0ZXJhYmxlLCByLCBvdXQgKSB7XG5cblx0Ly8gY29tYmluYXRpb25zd2l0aHJlcGV0aXRpb24oJ0FCQycsIDIpIC0tPiBBQSBBQiBBQyBCQiBCQyBDQ1xuXG5cdHZhciBwb29sLCBsZW4sIGluZGljZXMsIGksIG5leHQ7XG5cblx0cG9vbCA9IGl0ZXJhYmxlO1xuXHRsZW4gPSBwb29sLmxlbmd0aDtcblxuXHRpZiAoIGxlbiA9PT0gMCAmJiByID4gMCkge1xuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRpbmRpY2VzID0gcmVwZWF0KCAwLCByLCBbXSApO1xuXG5cdG91dC5wdXNoKCBwaWNrKCBwb29sLCBpbmRpY2VzLCBbXSApICk7XG5cblx0Zm9yICggOyA7ICkge1xuXG5cdFx0Zm9yICggaSA9IHIgLSAxIDsgaSA+PSAwIDsgLS1pICkge1xuXHRcdFx0aWYgKCBpbmRpY2VzW2ldICE9PSBsZW4gLSAxICkge1xuXHRcdFx0XHRuZXh0ID0gaW5kaWNlc1tpXSArIDE7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggaSA8IDAgKSB7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH1cblxuXHRcdGZvciAoIDsgaSA8IHIgOyArK2kgKSB7XG5cdFx0XHRpbmRpY2VzW2ldID0gbmV4dDtcblx0XHR9XG5cblx0XHRvdXQucHVzaCggcGljayggcG9vbCwgaW5kaWNlcywgW10gKSApO1xuXHR9XG5cbn1cblxuIl19