ocaml: phase 5.1 partition.ml baseline (stable partition, evens*100 + odds = 3025)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 26s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 26s
Two ref lists accumulating in reverse, then List.rev'd — preserves
original order:
let partition pred xs =
let yes = ref [] in
let no = ref [] in
List.iter (fun x ->
if pred x then yes := x :: !yes
else no := x :: !no
) xs;
(List.rev !yes, List.rev !no)
partition (fun x -> x mod 2 = 0) [1..10]
-> ([2;4;6;8;10], [1;3;5;7;9])
evens sum * 100 + odds sum = 30 * 100 + 25 = 3025
Tests higher-order predicate, tuple return, and iter-98 let-tuple
destructuring on the call site.
108 baseline programs total.
This commit is contained in:
@@ -74,6 +74,7 @@
|
|||||||
"option_match.ml": 5,
|
"option_match.ml": 5,
|
||||||
"palindrome.ml": 4,
|
"palindrome.ml": 4,
|
||||||
"paren_depth.ml": 7,
|
"paren_depth.ml": 7,
|
||||||
|
"partition.ml": 3025,
|
||||||
"pancake_sort.ml": 910,
|
"pancake_sort.ml": 910,
|
||||||
"pascal.ml": 252,
|
"pascal.ml": 252,
|
||||||
"peano.ml": 30,
|
"peano.ml": 30,
|
||||||
|
|||||||
13
lib/ocaml/baseline/partition.ml
Normal file
13
lib/ocaml/baseline/partition.ml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
let partition pred xs =
|
||||||
|
let yes = ref [] in
|
||||||
|
let no = ref [] in
|
||||||
|
List.iter (fun x ->
|
||||||
|
if pred x then yes := x :: !yes
|
||||||
|
else no := x :: !no
|
||||||
|
) xs;
|
||||||
|
(List.rev !yes, List.rev !no)
|
||||||
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
let (evens, odds) = partition (fun x -> x mod 2 = 0) [1;2;3;4;5;6;7;8;9;10] in
|
||||||
|
List.fold_left (+) 0 evens * 100 + List.fold_left (+) 0 odds
|
||||||
@@ -407,6 +407,13 @@ _Newest first._
|
|||||||
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
||||||
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
||||||
recursive match, List.append, List.fold_left.
|
recursive match, List.append, List.fold_left.
|
||||||
|
- 2026-05-09 Phase 5.1 — partition.ml baseline (stable partition by
|
||||||
|
predicate, 30*100 + 25 = 3025). Two ref lists accumulating in
|
||||||
|
reverse, then List.rev'd — preserves original order. Test:
|
||||||
|
`partition (fun x -> x mod 2 = 0) [1..10]` → ([2;4;6;8;10],
|
||||||
|
[1;3;5;7;9]) → 30*100 + 25 = 3025. Tests higher-order predicate
|
||||||
|
+ tuple return + iter-98 let-tuple destructuring. 108 baseline
|
||||||
|
programs total.
|
||||||
- 2026-05-09 Phase 5.1 — is_prime.ml baseline (count primes ≤ 100 =
|
- 2026-05-09 Phase 5.1 — is_prime.ml baseline (count primes ≤ 100 =
|
||||||
25). Trial division up to √n with early-exit via bool ref. Loop
|
25). Trial division up to √n with early-exit via bool ref. Loop
|
||||||
2..n calling is_prime, accumulate count. Returns 25 (the canonical
|
2..n calling is_prime, accumulate count. Returns 25 (the canonical
|
||||||
|
|||||||
Reference in New Issue
Block a user