combinations.sf 351 B

12345678910111213141516171819202122
  1. #!/usr/bin/ruby
  2. func combine(n, set) {
  3. set.len || return [];
  4. n == 1 && return set.map{[_]};
  5. var (head, result);
  6. head = set.shift;
  7. result = __FUNC__(n-1, [set...]);
  8. result.each { |subarray|
  9. subarray.unshift(head);
  10. };
  11. result + __FUNC__(n, set);
  12. }
  13. combine(3, @(0..4)).each {|row|
  14. say row.join(' ');
  15. }