From 5959989324ecdaa869e9184d692c826fee039c3b Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 9 May 2026 22:31:27 +0000 Subject: [PATCH] ocaml: phase 5.1 euler25.ml baseline (first 12-digit Fibonacci index = 55) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Iteratively grows two refs while the larger is below 10^(n-1), counting iterations: let euler25 n = let a = ref 1 in let b = ref 1 in let i = ref 2 in let target = ref 1 in for _ = 1 to n - 1 do target := !target * 10 done; while !b < !target do let c = !a + !b in a := !b; b := c; i := !i + 1 done; !i euler25 12 = 55 (F(55) = 139_583_862_445, 12 digits) Real PE25 asks for 1000 digits (answer 4782); 12 keeps within safe-int while exercising the identical algorithm. 114 baseline programs total — 200 iterations landed. --- lib/ocaml/baseline/euler25.ml | 17 +++++++++++++++++ lib/ocaml/baseline/expected.json | 1 + plans/ocaml-on-sx.md | 6 ++++++ 3 files changed, 24 insertions(+) create mode 100644 lib/ocaml/baseline/euler25.ml diff --git a/lib/ocaml/baseline/euler25.ml b/lib/ocaml/baseline/euler25.ml new file mode 100644 index 00000000..67d3d0a5 --- /dev/null +++ b/lib/ocaml/baseline/euler25.ml @@ -0,0 +1,17 @@ +let euler25 n = + let a = ref 1 in + let b = ref 1 in + let i = ref 2 in + let target = ref 1 in + for _ = 1 to n - 1 do target := !target * 10 done; + while !b < !target do + let c = !a + !b in + a := !b; + b := c; + i := !i + 1 + done; + !i + +;; + +euler25 12 diff --git a/lib/ocaml/baseline/expected.json b/lib/ocaml/baseline/expected.json index 1ffa7432..2b29b303 100644 --- a/lib/ocaml/baseline/expected.json +++ b/lib/ocaml/baseline/expected.json @@ -28,6 +28,7 @@ "euler1.ml": 233168, "euler10.ml": 1060, "euler2.ml": 4613732, + "euler25.ml": 55, "euler3.ml": 29, "euler4_small.ml": 9009, "euler5.ml": 232792560, diff --git a/plans/ocaml-on-sx.md b/plans/ocaml-on-sx.md index 5b103d9c..ce54df19 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 — 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 + digits (= 4782); 12 keeps within safe-int while exercising the + identical algorithm. 114 baseline programs total — and 200 + iterations landed. - 2026-05-09 Phase 5.1 — euler3.ml baseline (largest prime factor of 13195 = 29; PE3's worked example). Trial-division streaming: when the current factor divides m, divide and update largest; otherwise