diff options
Diffstat (limited to 'test/soli.ml')
| -rw-r--r-- | test/soli.ml | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/test/soli.ml b/test/soli.ml deleted file mode 100644 index aba79b15b8..0000000000 --- a/test/soli.ml +++ /dev/null @@ -1,111 +0,0 @@ -(***********************************************************************) -(* *) -(* Objective Caml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. All rights reserved. This file is distributed *) -(* under the terms of the Q Public License version 1.0. *) -(* *) -(***********************************************************************) - -(* $Id$ *) - - -type peg = Out | Empty | Peg - -let board = [| - [| Out; Out; Out; Out; Out; Out; Out; Out; Out|]; - [| Out; Out; Out; Peg; Peg; Peg; Out; Out; Out|]; - [| Out; Out; Out; Peg; Peg; Peg; Out; Out; Out|]; - [| Out; Peg; Peg; Peg; Peg; Peg; Peg; Peg; Out|]; - [| Out; Peg; Peg; Peg; Empty; Peg; Peg; Peg; Out|]; - [| Out; Peg; Peg; Peg; Peg; Peg; Peg; Peg; Out|]; - [| Out; Out; Out; Peg; Peg; Peg; Out; Out; Out|]; - [| Out; Out; Out; Peg; Peg; Peg; Out; Out; Out|]; - [| Out; Out; Out; Out; Out; Out; Out; Out; Out|] -|] - - -let print_peg = function - Out -> print_string "." - | Empty -> print_string " " - | Peg -> print_string "$" - - -let print_board board = - for i=0 to 8 do - for j=0 to 8 do - print_peg board.(i).(j) - done; - print_newline() - done - - -type direction = { dx: int; dy: int } - -let dir = [| {dx = 0; dy = 1}; {dx = 1; dy = 0}; - {dx = 0; dy = -1}; {dx = -1; dy = 0} |] - -type move = { x1: int; y1: int; x2: int; y2: int } - -let moves = Array.create 31 {x1=0;y1=0;x2=0;y2=0} - -let counter = ref 0 - -exception Found - -let rec solve m = - counter := !counter + 1; - if m = 31 then - begin match board.(4).(4) with Peg -> true | _ -> false end - else - try - if !counter mod 500 = 0 then begin - print_int !counter; print_newline() - end; - for i=1 to 7 do - for j=1 to 7 do - match board.(i).(j) with - Peg -> - for k=0 to 3 do - let d1 = dir.(k).dx in - let d2 = dir.(k).dy in - let i1 = i+d1 in - let i2 = i1+d1 in - let j1 = j+d2 in - let j2 = j1+d2 in - match board.(i1).(j1) with - Peg -> - begin match board.(i2).(j2) with - Empty -> -(* - print_int i; print_string ", "; - print_int j; print_string ") dir "; - print_int k; print_string "\n"; -*) - board.(i).(j) <- Empty; - board.(i1).(j1) <- Empty; - board.(i2).(j2) <- Peg; - if solve(m+1) then begin - moves.(m) <- { x1=i; y1=j; x2=i2; y2=j2 }; - raise Found - end; - board.(i).(j) <- Peg; - board.(i1).(j1) <- Peg; - board.(i2).(j2) <- Empty - | _ -> () - end - | _ -> () - done - | _ -> - () - done - done; - false - with Found -> - true - - -let _ = if solve 0 then (print_string "\n"; print_board board) |
