123456789101112131415161718192021222324 |
- #!/usr/bin/ruby
- func permutations(callback, arr) {
- var end = arr.end;
- var idx = arr.indices;
- loop {
- callback([arr[idx]]);
- var p = end;
- while (idx[p-1] > idx[p]) {p--};
- p == 0 && return();
- var d = p;
- idx += idx.splice(p).reverse;
- while (idx[p-1] > idx[d]) {d++};
- idx[p-1, d] = idx[d, p-1];
- }
- }
- var list = [1,2,3];
- permutations({|set| say set.join }, list);
|