#!/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})};