@ozen-ui/kit
Version:
React component library
44 lines (43 loc) • 1.46 kB
JavaScript
import { __read, __spreadArray } from "tslib";
import isEqual from 'lodash.isequal';
export var generatePermutations = function (array, withSubsetSizes) {
if (withSubsetSizes === void 0) { withSubsetSizes = false; }
var result = [];
var permute = function (array, current) {
if (current === void 0) { current = []; }
if (array.length === 0) {
if (!result.some(function (r) { return isEqual(r, current); })) {
result.push(__spreadArray([], __read(current), false));
}
}
else {
for (var i = 0; i < array.length; i++) {
var newArray = __spreadArray([], __read(array), false);
var next = newArray.splice(i, 1);
permute(newArray, current.concat(next));
}
}
};
var subsetsOfSize = function (array, k, start, subset) {
if (start === void 0) { start = 0; }
if (subset === void 0) { subset = []; }
if (subset.length === k) {
permute(subset);
return;
}
for (var i = start; i < array.length; i++) {
subset.push(array[i]);
subsetsOfSize(array, k, i + 1, subset);
subset.pop();
}
};
if (withSubsetSizes) {
for (var size = array.length; size >= 1; size--) {
subsetsOfSize(array, size);
}
}
else {
permute(array);
}
return result;
};