RosettaCodeData/Task/Zig-zag-matrix/Standard-ML/zig-zag-matrix.ml

18 lines
636 B
OCaml
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
fun rowprint r = (List.app (fn i => print (StringCvt.padLeft #" " 3 (Int.toString i))) r;
print "\n");
fun zig lst M = List.app rowprint (lst M);
fun sign t = if t mod 2 = 0 then ~1 else 1;
fun zag n = List.tabulate (n,
fn i=> rev ( List.tabulate (n,
fn j =>
2026-02-01 16:33:20 -08:00
let val t = n-j+i and u = n+j-i in
if i <= j
2023-07-01 11:58:00 -04:00
then t*t div 2 + sign t * ( t div 2 - i )
else n*n - 1 - ( u*u div 2 + sign u * ( u div 2 - n + 1 + i) )
2026-02-01 16:33:20 -08:00
end
)));
2023-07-01 11:58:00 -04:00
zig zag 5 ;