ocaml: phase 5.1 grep_count.ml baseline (substring-aware line filter, 3 matches)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
Defines a recursive str_contains that walks the haystack with
String.sub to find a needle substring. Real OCaml's String.contains
only accepts a single char, so this baseline implements its own
substring search to stay portable.
let rec str_contains s sub i =
if i + sl > nl then false
else if String.sub s i sl = sub then true
else str_contains s sub (i + 1)
count_matching splits text on newlines, folds with the predicate.
'the quick brown fox\nfox runs fast\nthe dog\nfoxes are clever'
needle = 'fox'
matches = 3 (lines 1, 2, 4 — 'foxes' contains 'fox')
43 baseline programs total.
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
"factorial.ml": 3628800,
|
"factorial.ml": 3628800,
|
||||||
"fraction.ml": 7,
|
"fraction.ml": 7,
|
||||||
"frequency.ml": 5,
|
"frequency.ml": 5,
|
||||||
|
"grep_count.ml": 3,
|
||||||
"hanoi.ml": 1023,
|
"hanoi.ml": 1023,
|
||||||
"fizzbuzz.ml": 57,
|
"fizzbuzz.ml": 57,
|
||||||
"list_ops.ml": 30,
|
"list_ops.ml": 30,
|
||||||
|
|||||||
17
lib/ocaml/baseline/grep_count.ml
Normal file
17
lib/ocaml/baseline/grep_count.ml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
let rec str_contains s sub i =
|
||||||
|
let nl = String.length s in
|
||||||
|
let sl = String.length sub in
|
||||||
|
if i + sl > nl then false
|
||||||
|
else if String.sub s i sl = sub then true
|
||||||
|
else str_contains s sub (i + 1)
|
||||||
|
|
||||||
|
let count_matching needle text =
|
||||||
|
let lines = String.split_on_char '\n' text in
|
||||||
|
List.fold_left (fun acc line ->
|
||||||
|
if str_contains line needle 0 then acc + 1
|
||||||
|
else acc
|
||||||
|
) 0 lines
|
||||||
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
count_matching "fox" "the quick brown fox\nfox runs fast\nthe dog\nfoxes are clever"
|
||||||
@@ -407,6 +407,13 @@ _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-09 Phase 5.1 — grep_count.ml baseline (substring-aware
|
||||||
|
line filter, 3 lines match). Defines a recursive `str_contains`
|
||||||
|
that walks the haystack with `String.sub` slices to find a needle
|
||||||
|
substring (real OCaml's `String.contains` only takes a char).
|
||||||
|
Splits text on `'\n'` then folds with the contains predicate. Test
|
||||||
|
text has 4 lines, 3 contain 'fox' (incl 'foxes'). 43 baseline
|
||||||
|
programs total.
|
||||||
- 2026-05-09 Phase 5.1 — pretty_table.ml baseline (Buffer + Printf
|
- 2026-05-09 Phase 5.1 — pretty_table.ml baseline (Buffer + Printf
|
||||||
width specifiers, total length 64). Builds a 4-row scoreboard via
|
width specifiers, total length 64). Builds a 4-row scoreboard via
|
||||||
Buffer + `Printf.sprintf "%-10s %4d\n"`. Each row is exactly 16
|
Buffer + `Printf.sprintf "%-10s %4d\n"`. Each row is exactly 16
|
||||||
|
|||||||
Reference in New Issue
Block a user