ocaml: phase 5.1 sieve.ml baseline (Sieve of Eratosthenes)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s

Counts primes <= 50, expected 15.

Stresses the recently-added Array module + the new array-indexing
syntax together with nested control flow:

  let sieve = Array.make (n + 1) true in
  sieve.(0) <- false;
  sieve.(1) <- false;
  for i = 2 to n do
    if sieve.(i) then begin
      let j = ref (i * i) in
      while !j <= n do
        sieve.(!j) <- false;
        j := !j + i
      done
    end
  done;
  ...

Exercises: Array.make, arr.(i), arr.(i) <- v, nested for/while,
begin..end blocks, ref/!/:=, integer arithmetic. 24 baseline
programs total.
This commit is contained in:
2026-05-09 02:16:18 +00:00
parent 073588812a
commit a66b262267
3 changed files with 27 additions and 0 deletions

View File

@@ -22,6 +22,7 @@
"queens.ml": 2,
"quicksort.ml": 44,
"roman.ml": 44,
"sieve.ml": 15,
"sum_squares.ml": 385,
"word_count.ml": 3
}

View File

@@ -0,0 +1,22 @@
let count_primes n =
let sieve = Array.make (n + 1) true in
sieve.(0) <- false;
sieve.(1) <- false;
for i = 2 to n do
if sieve.(i) then begin
let j = ref (i * i) in
while !j <= n do
sieve.(!j) <- false;
j := !j + i
done
end
done;
let count = ref 0 in
for i = 2 to n do
if sieve.(i) then count := !count + 1
done;
!count
;;
count_primes 50

View File

@@ -407,6 +407,10 @@ _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 — sieve.ml baseline (Sieve of Eratosthenes,
count of primes ≤ 50 = 15). Stresses Array.make + arr.(i) +
arr.(i) <- v + nested for/while loops + `begin..end` block. 24
baseline programs total.
- 2026-05-09 Phase 4 — `arr.(i)` and `arr.(i) <- v` array indexing
syntax (+3 tests, 515 total). parse-atom-postfix's `.(...)` branch
now disambiguates between let-open and array-get based on whether