zig-zag_matrix.sf 508 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Zig-zag_matrix#Sidef
  4. #
  5. func zig_zag(w, h) {
  6. var r = [];
  7. var n = 0;
  8. h.of { |e|
  9. w.of { |f|
  10. [e, f]
  11. }
  12. } \
  13. -> reduce('+') \
  14. -> sort { |a, b|
  15. (a[0]+a[1] <=> b[0]+b[1]) ||
  16. (a[0]+a[1] -> is_even ? a[0]<=>b[0]
  17. : a[1]<=>b[1])
  18. } \
  19. -> each { |a|
  20. r[a[1]][a[0]] = n++;
  21. }
  22. return r;
  23. }
  24. zig_zag(5, 5).each {say .join('', {|i| "%4i" % i})};