Add java ocaml and swift tests
This commit is contained in:
24
koka_bench/ocaml/nqueens.ml
Normal file
24
koka_bench/ocaml/nqueens.ml
Normal file
@@ -0,0 +1,24 @@
|
||||
open List;;
|
||||
|
||||
let rec safe queen diag xs =
|
||||
match xs with
|
||||
| q :: qs -> queen <> q && queen <> q + diag && queen <> q - diag && safe queen (diag + 1) qs
|
||||
| [] -> true;;
|
||||
|
||||
let rec append_safe queen xs xss =
|
||||
if (queen <= 0) then xss
|
||||
else if (safe queen 1 xs) then append_safe (queen - 1) xs ((queen :: xs) :: xss)
|
||||
else append_safe (queen - 1) xs xss;;
|
||||
|
||||
let rec extend queen acc xss =
|
||||
match xss with
|
||||
| xs :: rest -> extend queen (append_safe queen xs acc) rest
|
||||
| [] -> acc;;
|
||||
|
||||
let rec find_solutions n queen =
|
||||
if (queen == 0) then [[]]
|
||||
else extend n [] (find_solutions n (queen - 1));;
|
||||
|
||||
let queens n = List.length (find_solutions n n);;
|
||||
|
||||
Printf.printf "%8d\n" (queens (int_of_string Sys.argv.(1)));;
|
||||
Reference in New Issue
Block a user