Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Feb 9th, 2010 | Syntax: None | Size: 0.69 KB | Hits: 25 | Expires: Never
Copy text to clipboard
  1. let eval map p =
  2.   let rec eval_line map p c h v  = function
  3.     | n when n < 0 -> [h;v]
  4.     | n ->
  5.         eval_line map p c
  6.           (if map.(n).(c) = p then h+1 else h)
  7.           (if map.(c).(n) = p then v+1 else v)
  8.           (n-1)
  9.   in
  10.   let rec diag map p a b = function
  11.     | n when n < 0 -> [a;b]
  12.     | 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)
  13.   in
  14.   let score = [(3, max_score); (2, 2); (1, 0); (0, 0)] in
  15.   let l = [0;1;2] in
  16.   let l' = List.map (fun c -> eval_line map p c 0 0 2) l in
  17.   let r = (List.flatten l')@(diag map p 0 0 2) in
  18.   let r' = List.map (fun x -> snd (List.find (fun (s, l) -> s = x) score)) r in
  19.     List.fold_left (+) 0 r'