Files
rose-ash/lib/ocaml/baseline/tic_tac_toe.ml
giles 1c40fec8fa
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 47s
ocaml: phase 5.1 tic_tac_toe.ml baseline (3x3 winner check, X wins top row = 1)
Board as 9-element flat int array, 0=empty, 1=X, 2=O. Three
predicate functions:

  check_row b r       check_col b c       check_diag b

each return the winning player's mark or 0. Main 'winner' loops
i = 0..2 calling row(i)/col(i) then check_diag, threading via a
result ref.

Test board:
  X X X
  . O .
  . . O

X wins on row 0 -> winner returns 1.

Tests Array.of_list with row-major 'b.(r * 3 + c)' indexing,
multi-fn collaboration, and structural equality on int values.

66 baseline programs total.
2026-05-09 14:00:49 +00:00

35 lines
690 B
OCaml

let check_row b r =
let a = b.(r * 3) in
if a <> 0 && a = b.(r * 3 + 1) && a = b.(r * 3 + 2) then a
else 0
let check_col b c =
let a = b.(c) in
if a <> 0 && a = b.(c + 3) && a = b.(c + 6) then a
else 0
let check_diag b =
let a = b.(0) in
if a <> 0 && a = b.(4) && a = b.(8) then a
else
let b' = b.(2) in
if b' <> 0 && b' = b.(4) && b' = b.(6) then b'
else 0
let winner b =
let r = ref 0 in
for i = 0 to 2 do
let cr = check_row b i in
if cr <> 0 then r := cr;
let cc = check_col b i in
if cc <> 0 then r := cc
done;
let cd = check_diag b in
if cd <> 0 then r := cd;
!r
;;
let b = Array.of_list [1;1;1; 0;2;0; 0;0;2] in
winner b