ocaml: phase 5.1 bracket_match.ml baseline (5/9 balanced strings)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 26s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 26s
Stack-based multi-bracket parenthesis matching for ( [ { ) ] }.
Non-bracket chars are skipped (treated as content).
Tests:
() yes
[{()}] yes
({[}]) no (mismatched closer)
"" yes
(( no (unclosed)
()[](){} yes
(a(b)c) yes (a/b/c skipped)
(() no
]) no
5 balanced
Body uses begin/end-wrapped match inside while:
else if c = ')' || c = ']' || c = '}' then begin
match !stack with
| [] -> ok := false
| top :: rest ->
let pair =
(c = ')' && top = '(') ||
(c = ']' && top = '[') ||
(c = '}' && top = '{')
in
if pair then stack := rest else ok := false
end
Tests side-effecting match arms inside while body, ref-of-list as
stack, multi-char pairing dispatch.
174 baseline programs total.
This commit is contained in:
32
lib/ocaml/baseline/bracket_match.ml
Normal file
32
lib/ocaml/baseline/bracket_match.ml
Normal file
@@ -0,0 +1,32 @@
|
||||
let bracket_match s =
|
||||
let n = String.length s in
|
||||
let stack = ref [] in
|
||||
let ok = ref true in
|
||||
let i = ref 0 in
|
||||
while !ok && !i < n do
|
||||
let c = s.[!i] in
|
||||
if c = '(' || c = '[' || c = '{' then
|
||||
stack := c :: !stack
|
||||
else if c = ')' || c = ']' || c = '}' then begin
|
||||
match !stack with
|
||||
| [] -> ok := false
|
||||
| top :: rest ->
|
||||
let pair =
|
||||
(c = ')' && top = '(') ||
|
||||
(c = ']' && top = '[') ||
|
||||
(c = '}' && top = '{')
|
||||
in
|
||||
if pair then stack := rest else ok := false
|
||||
end;
|
||||
i := !i + 1
|
||||
done;
|
||||
if !ok && !stack = [] then 1 else 0
|
||||
|
||||
;;
|
||||
|
||||
let strings = ["()"; "[{()}]"; "({[}])"; ""; "(("; "()[](){}"; "(a(b)c)"; "(()"; "])"] in
|
||||
let count = ref 0 in
|
||||
List.iter (fun s ->
|
||||
count := !count + bracket_match s
|
||||
) strings;
|
||||
!count
|
||||
@@ -15,6 +15,7 @@
|
||||
"bipartite.ml": 4,
|
||||
"bits.ml": 21,
|
||||
"balance.ml": 3,
|
||||
"bracket_match.ml": 5,
|
||||
"base_n.ml": 17,
|
||||
"bfs.ml": 6,
|
||||
"bfs_grid.ml": 8,
|
||||
|
||||
@@ -407,6 +407,15 @@ _Newest first._
|
||||
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
||||
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
||||
recursive match, List.append, List.fold_left.
|
||||
- 2026-05-11 Phase 5.1 — bracket_match.ml baseline (multi-bracket
|
||||
parenthesis matching over 9 test strings, 5 balanced). Stack-
|
||||
based scan: push openers `( [ {`, pop and pair-check closers.
|
||||
Sequence: `() [{()}] ({[}]) "" (( ()[](){} (a(b)c) (() ])` →
|
||||
yes/yes/no/yes/no/yes/yes/no/no = 5.
|
||||
Tests `begin … match !stack with [] -> … | top :: rest -> … end`
|
||||
with side-effecting match arms inside a `while` body, ref-of-list
|
||||
used as a stack, three-way char dispatch via short-circuited
|
||||
comparisons. 174 baseline programs total.
|
||||
- 2026-05-11 Phase 5.1 — wildcard_match.ml baseline (recursive `*`
|
||||
/`?` wildcard matcher; over 3×6 = 18 (pattern, text) combos,
|
||||
6 match). Cases:
|
||||
|
||||
Reference in New Issue
Block a user