123456789101112131415161718192021222324252627 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Permutations
- #
- func permute (code, arr) {
- var idx = arr.keys;
- while (true) {
- code(arr.items(idx...));
- var p = idx.end;
- while (idx[p - 1] > idx[p]) { --p };
- p == 0 && return();
- idx += idx.splice(p).reverse;
- var d = p;
- while (idx[p - 1] > idx[d]) { ++d };
- idx[p-1, d] = idx[d, p-1];
- }
- }
- var name = %c"abc";
- permute(func (list) { list.join(' ').say }, name);
|