aureooms-js-array
Version:
array manipulation code bricks for JavaScript
47 lines (33 loc) • 3.12 kB
JavaScript
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
;