ocaml: phase 5.1 euler14.ml baseline (longest Collatz under 100, starting n = 97)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 22s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 22s
collatz_len walks n through n/2 if even, 3n+1 if odd, counting
steps. Outer loop scans 2..N tracking the best length and arg-best:
let euler14 limit =
let best = ref 0 in
let best_n = ref 0 in
for n = 2 to limit do
let l = collatz_len n in
if l > !best then begin
best := l;
best_n := n
end
done;
!best_n
euler14 100 = 97 (97 generates a 118-step chain)
Real PE14 uses limit = 1_000_000 (answer 837799); 100 exercises the
same algorithm in <2 minutes on our contended host.
116 baseline programs total.
This commit is contained in:
25
lib/ocaml/baseline/euler14.ml
Normal file
25
lib/ocaml/baseline/euler14.ml
Normal file
@@ -0,0 +1,25 @@
|
||||
let collatz_len n =
|
||||
let m = ref n in
|
||||
let c = ref 0 in
|
||||
while !m > 1 do
|
||||
if !m mod 2 = 0 then m := !m / 2
|
||||
else m := 3 * !m + 1;
|
||||
c := !c + 1
|
||||
done;
|
||||
!c
|
||||
|
||||
let euler14 limit =
|
||||
let best = ref 0 in
|
||||
let best_n = ref 0 in
|
||||
for n = 2 to limit do
|
||||
let l = collatz_len n in
|
||||
if l > !best then begin
|
||||
best := l;
|
||||
best_n := n
|
||||
end
|
||||
done;
|
||||
!best_n
|
||||
|
||||
;;
|
||||
|
||||
euler14 100
|
||||
@@ -28,6 +28,7 @@
|
||||
"euler1.ml": 233168,
|
||||
"euler16.ml": 26,
|
||||
"euler10.ml": 1060,
|
||||
"euler14.ml": 97,
|
||||
"euler2.ml": 4613732,
|
||||
"euler25.ml": 55,
|
||||
"euler3.ml": 29,
|
||||
|
||||
Reference in New Issue
Block a user