Scanf.scanf "%d" (fun n -> let mat = Array.make_matrix n n 0 in let rec loop i x y vx vy = if i > n * n then () else ( mat.(y).(x) <- i; let x1 = x + vx in let y1 = y + vy in if x1 < 0 || x1 >= n || y1 < 0 || y1 >= n || mat.(y1).(x1) <> 0 then ( let vx, vy = -vy, vx in loop (i + 1) (x + vx) (y + vy) vx vy ) else loop (i + 1) x1 y1 vx vy ) in loop 1 0 0 1 0; Array.iter (fun v -> Array.iter (Printf.printf "%03d ") v; print_newline () ) mat )