From d4eb57fa07bf4a46078a7bc42dbf8be32e1ef68e Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 9 May 2026 21:06:10 +0000 Subject: [PATCH] ocaml: phase 5.1 catalan.ml baseline (Catalan number C(5) = 42) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DP recurrence: C(0) = 1 C(n) = sum_{j=0}^{n-1} C(j) * C(n-1-j) let catalan n = let dp = Array.make (n + 1) 0 in dp.(0) <- 1; for i = 1 to n do for j = 0 to i - 1 do dp.(i) <- dp.(i) + dp.(j) * dp.(i - 1 - j) done done; dp.(n) C(5) = 42 — also the count of distinct binary trees with 5 internal nodes, balanced paren strings of length 10, monotonic lattice paths, etc. 106 baseline programs total. --- lib/ocaml/baseline/catalan.ml | 13 +++++++++++++ lib/ocaml/baseline/expected.json | 1 + plans/ocaml-on-sx.md | 6 ++++++ 3 files changed, 20 insertions(+) create mode 100644 lib/ocaml/baseline/catalan.ml diff --git a/lib/ocaml/baseline/catalan.ml b/lib/ocaml/baseline/catalan.ml new file mode 100644 index 00000000..b487ca47 --- /dev/null +++ b/lib/ocaml/baseline/catalan.ml @@ -0,0 +1,13 @@ +let catalan n = + let dp = Array.make (n + 1) 0 in + dp.(0) <- 1; + for i = 1 to n do + for j = 0 to i - 1 do + dp.(i) <- dp.(i) + dp.(j) * dp.(i - 1 - j) + done + done; + dp.(n) + +;; + +catalan 5 diff --git a/lib/ocaml/baseline/expected.json b/lib/ocaml/baseline/expected.json index 48ce7dd1..7613a491 100644 --- a/lib/ocaml/baseline/expected.json +++ b/lib/ocaml/baseline/expected.json @@ -18,6 +18,7 @@ "bsearch.ml": 7, "caesar.ml": 215, "calc.ml": 13, + "catalan.ml": 42, "closures.ml": 315, "coin_change.ml": 6, "count_change.ml": 406, diff --git a/plans/ocaml-on-sx.md b/plans/ocaml-on-sx.md index 410a534f..e9809c3a 100644 --- a/plans/ocaml-on-sx.md +++ b/plans/ocaml-on-sx.md @@ -407,6 +407,12 @@ _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 — catalan.ml baseline (Catalan number C(5) + via DP recurrence = 42). DP recurrence `C(n) = sum_{j=0}^{n-1} + C(j) * C(n-1-j)`. C(5) = 42 — also the count of distinct binary + trees with 5 internal nodes, balanced paren strings of length + 10, etc. Tests nested for-loop over Array with arr.(i) read + + write. 106 baseline programs total. - 2026-05-09 Phase 5.1 — fizz_classifier.ml baseline (FizzBuzz with polymorphic variants, 1..30 weighted score = 540). Two functions: classify maps i → ` `FizzBuzz | `Fizz | `Buzz | `Num n``, and score