Skip to content

Instantly share code, notes, and snippets.

@justinfay
Last active October 16, 2022 16:15
Show Gist options
  • Save justinfay/f30d53f8b85a274aee57 to your computer and use it in GitHub Desktop.
Save justinfay/f30d53f8b85a274aee57 to your computer and use it in GitHub Desktop.
Python `itertools.permutations` javascript equivalent.
function permutations(array, r) {
// Algorythm copied from Python `itertools.permutations`.
var n = array.length;
if (r === undefined) {
r = n;
}
if (r > n) {
return;
}
var indices = [];
for (var i = 0; i < n; i++) {
indices.push(i);
}
var cycles = [];
for (var i = n; i > n - r; i-- ) {
cycles.push(i);
}
var results = [];
var res = [];
for (var k = 0; k < r; k++) {
res.push(array[indices[k]]);
}
results.push(res);
var broken = false;
while (n > 0) {
for (var i = r - 1; i >= 0; i--) {
cycles[i]--;
if (cycles[i] === 0) {
indices = indices.slice(0, i).concat(
indices.slice(i+1).concat(
indices.slice(i, i+1)));
cycles[i] = n - i;
broken = false;
} else {
var j = cycles[i];
var x = indices[i];
indices[i] = indices[n - j];
indices[n - j] = x;
var res = [];
for (var k = 0; k < r; k++) {
res.push(array[indices[k]]);
}
results.push(res);
broken = true;
break;
}
}
if (broken === false) {
break;
}
}
return results;
}
@Pranay-a-1
Copy link

thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment