#!/usr/bin/ruby # ## https://rosettacode.org/wiki/Zig-zag_matrix#Sidef # func zig_zag(w, h) { var r = []; var n = 0; h.of { |e| w.of { |f| [e, f] } } \ -> reduce('+') \ -> sort { |a, b| (a[0]+a[1] <=> b[0]+b[1]) || (a[0]+a[1] -> is_even ? a[0]<=>b[0] : a[1]<=>b[1]) } \ -> each { |a| r[a[1]][a[0]] = n++; } return r; } zig_zag(5, 5).each {say .join('', {|i| "%4i" % i})};