ocaml: phase 5.1 hist.ml baseline (Hashtbl int histogram, total * max = 75)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
Three small functions: hist xs build a Hashtbl of count-by-value max_value h Hashtbl.fold to find the max bin total h Hashtbl.fold to sum all bins For the 15-element list [1;2;3;1;4;5;1;2;6;7;1;8;9;1;0]: total = 15 max_value = 5 (the number 1 appears 5 times) product = 75 Companion to bag.ml (string keys) and frequency.ml (char keys) — same Hashtbl.fold + Hashtbl.find_opt pattern, exercised on int keys this time. 71 baseline programs total.
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
"group_consec.ml": 53,
|
"group_consec.ml": 53,
|
||||||
"hailstone.ml": 111,
|
"hailstone.ml": 111,
|
||||||
"hanoi.ml": 1023,
|
"hanoi.ml": 1023,
|
||||||
|
"hist.ml": 75,
|
||||||
"fizzbuzz.ml": 57,
|
"fizzbuzz.ml": 57,
|
||||||
"flatten_tree.ml": 28,
|
"flatten_tree.ml": 28,
|
||||||
"list_ops.ml": 30,
|
"list_ops.ml": 30,
|
||||||
|
|||||||
21
lib/ocaml/baseline/hist.ml
Normal file
21
lib/ocaml/baseline/hist.ml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
let hist xs =
|
||||||
|
let h = Hashtbl.create 8 in
|
||||||
|
List.iter (fun x ->
|
||||||
|
let n = match Hashtbl.find_opt h x with
|
||||||
|
| Some n -> n + 1
|
||||||
|
| None -> 1
|
||||||
|
in
|
||||||
|
Hashtbl.replace h x n
|
||||||
|
) xs;
|
||||||
|
h
|
||||||
|
|
||||||
|
let max_value h =
|
||||||
|
Hashtbl.fold (fun _ v acc -> if v > acc then v else acc) h 0
|
||||||
|
|
||||||
|
let total h =
|
||||||
|
Hashtbl.fold (fun _ v acc -> acc + v) h 0
|
||||||
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
let h = hist [1;2;3;1;4;5;1;2;6;7;1;8;9;1;0] in
|
||||||
|
total h * max_value h
|
||||||
@@ -407,6 +407,14 @@ _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 — hist.ml baseline (Hashtbl-based int
|
||||||
|
histogram, total * max = 75). Three small functions: hist builds
|
||||||
|
the count table, max_value finds the maximum bin, total sums all
|
||||||
|
bins. For a 15-element list with a top frequency of 5 (the
|
||||||
|
number 1), product = 75. Companions to bag.ml (string keys) and
|
||||||
|
frequency.ml (char keys) — same Hashtbl.fold + Hashtbl.find_opt
|
||||||
|
pattern, exercised on int keys this time. 71 baseline programs
|
||||||
|
total.
|
||||||
- 2026-05-09 Phase 5.1 — mortgage.ml baseline (monthly mortgage
|
- 2026-05-09 Phase 5.1 — mortgage.ml baseline (monthly mortgage
|
||||||
payment formula, 200k @ 5% / 30y → $1073). Manual `(1+r)^n`
|
payment formula, 200k @ 5% / 30y → $1073). Manual `(1+r)^n`
|
||||||
computed via for-loop because `Float.pow` may not be available
|
computed via for-loop because `Float.pow` may not be available
|
||||||
|
|||||||
Reference in New Issue
Block a user