ocaml: phase 5.1 count_bits.ml baseline (sum popcount 0..100 = 319)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s

DP recurrence for popcount that avoids host bitwise operations:

  result[i] = result[i / 2] + (i mod 2)

Drops the low bit (i / 2 stands in for i lsr 1) and adds it back
if it was 1 (i mod 2 stands in for i land 1).

  sum over 0..100 of popcount(i) = 319

Tests pure-arithmetic popcount, accumulating ref + DP array,
classic look-back to half-index pattern.

197 baseline programs total.
This commit is contained in:
2026-05-11 04:54:36 +00:00
parent b240408a4c
commit 230f803abb
3 changed files with 22 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
let count_bits n =
let result = Array.make (n + 1) 0 in
for i = 1 to n do
result.(i) <- result.(i / 2) + (i mod 2)
done;
let sum = ref 0 in
for i = 0 to n do
sum := !sum + result.(i)
done;
!sum
;;
count_bits 100

View File

@@ -32,6 +32,7 @@
"convex_hull.ml": 5,
"coin_change.ml": 6,
"coin_min.ml": 6,
"count_bits.ml": 319,
"count_change.ml": 406,
"count_paths_dag.ml": 3,
"count_inversions.ml": 12,

View File

@@ -407,6 +407,13 @@ _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 — count_bits.ml baseline (sum of popcount for
0..100 = 319). DP recurrence: popcount(i) = popcount(i/2) +
(i mod 2) — drop the low bit and recurse, adding back the bit
if it was 1. Avoids needing host bitwise ops (i mod 2 stands in
for `i land 1`, i/2 for `i lsr 1`). Sum over 0..100 = 319.
Tests pure-arithmetic popcount, accumulating ref + array.
197 baseline programs total.
- 2026-05-11 Phase 5.1 — bs_rotated.ml baseline (binary search in
rotated sorted array; encoded result -66). For [4;5;6;7;0;1;2]:
- search 0 → index 4