Files
rose-ash/lib/ocaml/baseline/group_consec.ml
giles a98d683e60
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 34s
ocaml: phase 5.1 group_consec.ml baseline (group consecutive equals, 5*10+3 = 53)
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.
2026-05-09 14:40:22 +00:00

19 lines
423 B
OCaml

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)