ocaml: phase 5.1 group_consec.ml baseline (group consecutive equals, 5*10+3 = 53)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 34s

Inner 'collect cur acc tail' walks the tail while head matches
'cur', accumulating into 'acc'. Returns (rev acc, remaining) on
first mismatch. Outer 'group' recurses on the remaining list.

  group [1;1;2;2;2;3;1;1;4]
   = [[1;1]; [2;2;2]; [3]; [1;1]; [4]]

  List.length groups        = 5
  List.length (gs.(1))      = 3
  5 * 10 + 3                = 53

Tests nested recursion (inner aux + outer recursion), tuple
destructuring 'let (g, tail) = ...' inside the outer match arm,
and List.nth.

69 baseline programs total.
This commit is contained in:
2026-05-09 14:40:22 +00:00
parent a2f3c533b8
commit a98d683e60
3 changed files with 27 additions and 0 deletions

View File

@@ -28,6 +28,7 @@
"frequency.ml": 5,
"gcd_lcm.ml": 60,
"grep_count.ml": 3,
"group_consec.ml": 53,
"hailstone.ml": 111,
"hanoi.ml": 1023,
"fizzbuzz.ml": 57,

View File

@@ -0,0 +1,18 @@
let rec group xs =
match xs with
| [] -> []
| x :: rest ->
let rec collect cur acc tail =
match tail with
| [] -> (List.rev acc, [])
| y :: ys ->
if y = cur then collect cur (y :: acc) ys
else (List.rev acc, y :: ys)
in
let (g, tail) = collect x [x] rest in
g :: group tail
;;
let gs = group [1;1;2;2;2;3;1;1;4] in
List.length gs * 10 + List.length (List.nth gs 1)

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 — group_consec.ml baseline (group consecutive
equals into sublists, 5*10 + 3 = 53). Inner `collect cur acc
tail` walks while head matches `cur`, accumulates into `acc`,
returns `(rev acc, remaining)` on first mismatch. Outer `group`
recurses on the remaining list. [1;1;2;2;2;3;1;1;4] →
[[1;1];[2;2;2];[3];[1;1];[4]] (5 groups, second group has 3
elements). Sum = 53. Tests nested recursion + tuple destructuring
in let-binding. 69 baseline programs total.
- 2026-05-09 Phase 5.1 — zigzag.ml baseline (interleave two lists,
sum 1..10 = 55). One-liner that swaps the lists on every recursive
call: `match xs with [] -> ys | x :: xs' -> x :: zigzag ys xs'`.