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