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
