ocaml: phase 5.1 paren_depth.ml baseline (max nesting depth, 3+3+1 = 7)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s

One-pass walk tracking current depth and a high-water mark:

  let max_depth s =
    let d = ref 0 in
    let m = ref 0 in
    for i = 0 to String.length s - 1 do
      if s.[i] = '(' then begin
        d := !d + 1;
        if !d > !m then m := !d
      end
      else if s.[i] = ')' then d := !d - 1
    done;
    !m

Three inputs:
  '((1+2)*(3-(4+5)))'   3   (innermost (4+5) at depth 3)
  '(((deep)))'           3
  '()()()'               1   (no nesting)
  sum                    7

Tests for-loop char comparison s.[i] = '(' and the high-water-mark
idiom with two refs.

78 baseline programs total.
This commit is contained in:
2026-05-09 16:13:05 +00:00
parent 5d71be364e
commit 89726ed6c2
3 changed files with 24 additions and 0 deletions

View File

@@ -52,6 +52,7 @@
"mutable_record.ml": 10,
"option_match.ml": 5,
"palindrome.ml": 4,
"paren_depth.ml": 7,
"pancake_sort.ml": 910,
"pascal.ml": 252,
"pi_leibniz.ml": 314,

View File

@@ -0,0 +1,15 @@
let max_depth s =
let d = ref 0 in
let m = ref 0 in
for i = 0 to String.length s - 1 do
if s.[i] = '(' then begin
d := !d + 1;
if !d > !m then m := !d
end
else if s.[i] = ')' then d := !d - 1
done;
!m
;;
max_depth "((1+2)*(3-(4+5)))" + max_depth "(((deep)))" + max_depth "()()()"

View File

@@ -407,6 +407,14 @@ _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-09 Phase 5.1 — paren_depth.ml baseline (max paren nesting
depth, 3+3+1 = 7). One-pass walk tracking current depth and a
high-water mark. Tests three inputs:
"((1+2)*(3-(4+5)))" → 3
"(((deep)))" → 3
"()()()" → 1
Sum = 7. Tests for-loop char comparison `s.[i] = '('` and
high-water-mark idiom with two refs. 78 baseline programs total.
- 2026-05-09 Phase 5.1 — pancake_sort.ml baseline (in-place pancake
sort, 9 flips → 910). Each pass finds the max in [0..size-1],
flips it to position 0 (if needed), then flips the size-prefix to