From 4eeb7e59b4f0b95aaa3a895eecacda95e753efd7 Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 9 May 2026 17:45:52 +0000 Subject: [PATCH] ocaml: phase 5.1 grid_paths.ml baseline (count paths in 4x6 grid = 210) DP filling a flattened 2D array: dp.(0, 0) = 1 dp.(i, j) = dp.(i-1, j) + dp.(i, j-1) index = i * (n+1) + j For a 4x6 grid (5x7 dp matrix), the count is C(10, 4) = 210. Tests Array as 2D via row-major flatten + nested for + multi-step conditional access (above/left guarded by 'if i > 0' / 'if j > 0'). 87 baseline programs total. --- lib/ocaml/baseline/expected.json | 1 + lib/ocaml/baseline/grid_paths.ml | 17 +++++++++++++++++ plans/ocaml-on-sx.md | 6 ++++++ 3 files changed, 24 insertions(+) create mode 100644 lib/ocaml/baseline/grid_paths.ml diff --git a/lib/ocaml/baseline/expected.json b/lib/ocaml/baseline/expected.json index 3cce9ca5..4b779132 100644 --- a/lib/ocaml/baseline/expected.json +++ b/lib/ocaml/baseline/expected.json @@ -31,6 +31,7 @@ "frequency.ml": 5, "gcd_lcm.ml": 60, "grep_count.ml": 3, + "grid_paths.ml": 210, "group_consec.ml": 53, "hailstone.ml": 111, "hanoi.ml": 1023, diff --git a/lib/ocaml/baseline/grid_paths.ml b/lib/ocaml/baseline/grid_paths.ml new file mode 100644 index 00000000..2a0dd0a8 --- /dev/null +++ b/lib/ocaml/baseline/grid_paths.ml @@ -0,0 +1,17 @@ +let count_paths m n = + let dp = Array.make ((m + 1) * (n + 1)) 0 in + dp.(0) <- 1; + for i = 0 to m do + for j = 0 to n do + if i > 0 || j > 0 then begin + let above = if i > 0 then dp.((i - 1) * (n + 1) + j) else 0 in + let left = if j > 0 then dp.(i * (n + 1) + j - 1) else 0 in + dp.(i * (n + 1) + j) <- above + left + end + done + done; + dp.(m * (n + 1) + n) + +;; + +count_paths 4 6 diff --git a/plans/ocaml-on-sx.md b/plans/ocaml-on-sx.md index f80483a2..d70be985 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 — grid_paths.ml baseline (count distinct + paths in (4+1)x(6+1) grid = C(10,4) = 210). DP fills a flattened + 2D array: `dp.(0,0) = 1`, others `dp.(i,j) = dp.(i-1,j) + dp.(i, + j-1)`. Index = `i * (n+1) + j`. Tests Array as 2D via row-major + flatten + nested for + multi-step conditional access. 87 baseline + programs total. - 2026-05-09 Phase 5.1 — fib_doubling.ml baseline (Fibonacci by doubling, fib(40) = 102334155). Uses the identity F(2k) = F(k) * (2*F(k+1) - F(k)) and F(2k+1) = F(k)^2 + F(k+1)^2 to compute fib