RosettaCodeData/Task/Zig-zag-matrix/OCaml/zig-zag-matrix.ml
2024-10-16 18:07:41 -07:00

19 lines
389 B
OCaml

let zigzag n =
(* move takes references and modifies them directly *)
let move i j =
if !j < n - 1 then begin
i := max 0 (!i - 1);
incr j
end else
incr i
in
let a = Array.make_matrix n n 0
and x = ref 0 and y = ref 0 in
for v = 0 to n * n - 1 do
a.(!x).(!y) <- v;
if (!x + !y) mod 2 = 0 then
move x y
else
move y x
done;
a