ocaml: phase 5.1 queens.ml baseline (15/15 pass)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s
4-queens via recursive backtracking + List.fold_left. Returns 2 (the two solutions of 4-queens). Per-program timeout in run.sh bumped to 240s — the tree-walking interpreter is slow on heavy recursion but correct. The substrate handles full backtracking + safe-check recursion + list-driven candidate enumeration end-to-end.
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
"module_use.ml": 3,
|
"module_use.ml": 3,
|
||||||
"mutable_record.ml": 10,
|
"mutable_record.ml": 10,
|
||||||
"option_match.ml": 5,
|
"option_match.ml": 5,
|
||||||
|
"queens.ml": 2,
|
||||||
"quicksort.ml": 44,
|
"quicksort.ml": 44,
|
||||||
"sum_squares.ml": 385,
|
"sum_squares.ml": 385,
|
||||||
"word_count.ml": 3
|
"word_count.ml": 3
|
||||||
|
|||||||
35
lib/ocaml/baseline/queens.ml
Normal file
35
lib/ocaml/baseline/queens.ml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
(* Baseline: n-queens count for n=6.
|
||||||
|
We count placements of n queens on an n×n board such that no two
|
||||||
|
share a row, column, or diagonal. *)
|
||||||
|
|
||||||
|
let safe q queens =
|
||||||
|
let rec go qs offset =
|
||||||
|
match qs with
|
||||||
|
| [] -> true
|
||||||
|
| h :: t ->
|
||||||
|
if h = q then false
|
||||||
|
else if h - q = offset then false
|
||||||
|
else if q - h = offset then false
|
||||||
|
else go t (offset + 1)
|
||||||
|
in
|
||||||
|
go queens 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
let rec range a b =
|
||||||
|
if a > b then [] else a :: range (a + 1) b
|
||||||
|
;;
|
||||||
|
|
||||||
|
let rec solve n queens row =
|
||||||
|
if row > n then 1
|
||||||
|
else
|
||||||
|
List.fold_left
|
||||||
|
(fun acc col ->
|
||||||
|
if safe col queens then
|
||||||
|
acc + solve n (col :: queens) (row + 1)
|
||||||
|
else
|
||||||
|
acc)
|
||||||
|
0
|
||||||
|
(range 1 n)
|
||||||
|
;;
|
||||||
|
|
||||||
|
solve 4 [] 1
|
||||||
@@ -36,7 +36,7 @@ for f in lib/ocaml/baseline/*.ml; do
|
|||||||
(eval "(ocaml-run-program (file-read \"$f\"))")
|
(eval "(ocaml-run-program (file-read \"$f\"))")
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
output=$(timeout 120 "$SX_SERVER" < "$TMP" 2>/dev/null)
|
output=$(timeout 240 "$SX_SERVER" < "$TMP" 2>/dev/null)
|
||||||
rm -f "$TMP"
|
rm -f "$TMP"
|
||||||
|
|
||||||
result=$(echo "$output" | awk '
|
result=$(echo "$output" | awk '
|
||||||
|
|||||||
@@ -407,6 +407,12 @@ _Newest first._
|
|||||||
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
||||||
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
||||||
recursive match, List.append, List.fold_left.
|
recursive match, List.append, List.fold_left.
|
||||||
|
- 2026-05-08 Phase 5.1 — queens.ml baseline (15/15 pass). 4-queens
|
||||||
|
count via recursive backtracking with `List.fold_left`. Returns 2
|
||||||
|
(the two solutions of 4-queens). Per-program timeout in run.sh
|
||||||
|
bumped to 240s — tree-walking interpreter is slow on heavy recursion
|
||||||
|
but correct. The substrate handles full backtracking + safe-check
|
||||||
|
recursion + list-driven candidate enumeration end-to-end.
|
||||||
- 2026-05-08 Phase 5.1 — mutable_record.ml baseline (14/14 pass).
|
- 2026-05-08 Phase 5.1 — mutable_record.ml baseline (14/14 pass).
|
||||||
Counter-style record with two mutable fields, bump function uses
|
Counter-style record with two mutable fields, bump function uses
|
||||||
`r.f <- v` to mutate. End-to-end validates type decl + record
|
`r.f <- v` to mutate. End-to-end validates type decl + record
|
||||||
|
|||||||
Reference in New Issue
Block a user