Untitled
By: a guest | Feb 9th, 2010 | Syntax:
None | Size: 0.69 KB | Hits: 25 | Expires: Never
let eval map p =
let rec eval_line map p c h v = function
| n when n < 0 -> [h;v]
| n ->
eval_line map p c
(if map.(n).(c) = p then h+1 else h)
(if map.(c).(n) = p then v+1 else v)
(n-1)
in
let rec diag map p a b = function
| n when n < 0 -> [a;b]
| n -> diag map p (if map.(n).(n) = p then a+1 else a) (if map.(n).(2-n) = p then b+1 else b) (n-1)
in
let score = [(3, max_score); (2, 2); (1, 0); (0, 0)] in
let l = [0;1;2] in
let l' = List.map (fun c -> eval_line map p c 0 0 2) l in
let r = (List.flatten l')@(diag map p 0 0 2) in
let r' = List.map (fun x -> snd (List.find (fun (s, l) -> s = x) score)) r in
List.fold_left (+) 0 r'