ocaml: phase 5.1 distinct_subseq.ml baseline ("rabbit" in "rabbbit" = 3)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 21s

Classic distinct-subsequences 2D DP:

  dp[i][j] = dp[i-1][j] + (s[i-1] = t[j-1] ? dp[i-1][j-1] : 0)
  dp[i][0] = 1   (empty t is a subseq of any prefix of s)

  count_subseq "rabbbit" "rabbit" = 3

The three witnesses correspond to which 'b' in "rabbbit" is
dropped (positions 2, 3, or 4 zero-indexed of the run of bs).

Complements subseq_check.ml (just tests presence); this one counts
distinct embeddings.

Tests 2D DP with Array.init n (fun _ -> Array.make m 0), base row
initialization, mixed string + array indexing.

175 baseline programs total.
This commit is contained in:
2026-05-11 01:12:33 +00:00
parent b771ea306c
commit 6780acd0af
3 changed files with 30 additions and 0 deletions

View File

@@ -407,6 +407,15 @@ _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-11 Phase 5.1 — distinct_subseq.ml baseline (count
distinct subsequences of "rabbbit" that equal "rabbit" = 3).
Classic 2D DP: dp[i][j] = dp[i-1][j] + (s[i-1]=t[j-1] ? dp[i-1][j-1]
: 0). Three witnesses correspond to which `b` in "rabbbit" is
dropped: positions 2, 3, or 4 (0-indexed of the three b's).
Complements existing subseq_check.ml which just tests presence.
Tests 2D DP with `Array.init … (fun _ -> Array.make …)`, edge-
case base row dp[i][0]=1 (empty t is a subseq of any prefix).
175 baseline programs total.
- 2026-05-11 Phase 5.1 — bracket_match.ml baseline (multi-bracket
parenthesis matching over 9 test strings, 5 balanced). Stack-
based scan: push openers `( [ {`, pop and pair-check closers.