12345678910111213141516171819202122232425262728293031323334353637 |
- #!/usr/bin/ruby
- # Cartesian product of an arbitrary number of arrays.
- func cartesian_product(*arr) {
- var c = []
- var r = []
- func {
- if (c.len < arr.len) {
- for item in (arr[c.len]) {
- c.push(item)
- __FUNC__()
- c.pop
- }
- }
- else {
- r.push([c...])
- }
- }()
- return r
- }
- cartesian_product(['a', 'b'], ['c', 'd'], ['e', 'f']).each{ .say }
- __END__
- ["a", "c", "e"]
- ["a", "c", "f"]
- ["a", "d", "e"]
- ["a", "d", "f"]
- ["b", "c", "e"]
- ["b", "c", "f"]
- ["b", "d", "e"]
- ["b", "d", "f"]
|