diff --git a/lib/ocaml/baseline/euler16.ml b/lib/ocaml/baseline/euler16.ml new file mode 100644 index 00000000..55e98631 --- /dev/null +++ b/lib/ocaml/baseline/euler16.ml @@ -0,0 +1,14 @@ +let euler16 n = + let p = ref 1 in + for _ = 1 to n do p := !p * 2 done; + let sum = ref 0 in + let m = ref !p in + while !m > 0 do + sum := !sum + !m mod 10; + m := !m / 10 + done; + !sum + +;; + +euler16 15 diff --git a/lib/ocaml/baseline/expected.json b/lib/ocaml/baseline/expected.json index 2b29b303..c228f1b7 100644 --- a/lib/ocaml/baseline/expected.json +++ b/lib/ocaml/baseline/expected.json @@ -26,6 +26,7 @@ "exception_handle.ml": 4, "exception_user.ml": 26, "euler1.ml": 233168, + "euler16.ml": 26, "euler10.ml": 1060, "euler2.ml": 4613732, "euler25.ml": 55, diff --git a/plans/ocaml-on-sx.md b/plans/ocaml-on-sx.md index ce54df19..547cc29c 100644 --- a/plans/ocaml-on-sx.md +++ b/plans/ocaml-on-sx.md @@ -407,6 +407,11 @@ _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 — euler16.ml baseline (digit sum of 2^15 = + 26). Computes 2^n via for-loop accumulation, then walks the digits + via mod 10 / div 10 to sum them. Real PE16 asks for 2^1000 which + exceeds float precision; 2^15 = 32768 stays safe and exercises the + same digit-decomposition pattern. 115 baseline programs total. - 2026-05-09 Phase 5.1 — euler25.ml baseline (first Fibonacci index with 12 digits = 55). Iteratively grows two refs while the larger is below `10^(n-1)`, counting iterations. Real PE25 asks for 1000