ocaml: phase 5.1 bowling.ml baseline (10-pin bowling score, sample game = 167)
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
Walks the pin-knockdown list applying strike/spare bonuses through
a 10-frame counter:
strike (10): score 10 + next 2 throws, advance i+1
spare (a + b = 10): score 10 + next 1 throw, advance i+2
open (a + b < 10): score a + b, advance i+2
Frame ten special-cases are handled implicitly: the input includes
bonus throws naturally and the while-loop terminates after frame 10.
bowling_score [10; 7; 3; 9; 0; 10; 0; 8; 8; 2; 0; 6;
10; 10; 10; 8; 1]
= 20+19+9+18+8+10+6+30+28+19
= 167
131 baseline programs total.
This commit is contained in:
24
lib/ocaml/baseline/bowling.ml
Normal file
24
lib/ocaml/baseline/bowling.ml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
let bowling_score frames =
|
||||||
|
let arr = Array.of_list frames in
|
||||||
|
let n = Array.length arr in
|
||||||
|
let total = ref 0 in
|
||||||
|
let i = ref 0 in
|
||||||
|
let frame = ref 1 in
|
||||||
|
while !frame <= 10 && !i < n do
|
||||||
|
if arr.(!i) = 10 then begin
|
||||||
|
total := !total + 10 + arr.(!i + 1) + arr.(!i + 2);
|
||||||
|
i := !i + 1
|
||||||
|
end else if !i + 1 < n && arr.(!i) + arr.(!i + 1) = 10 then begin
|
||||||
|
total := !total + 10 + arr.(!i + 2);
|
||||||
|
i := !i + 2
|
||||||
|
end else begin
|
||||||
|
total := !total + arr.(!i) + arr.(!i + 1);
|
||||||
|
i := !i + 2
|
||||||
|
end;
|
||||||
|
frame := !frame + 1
|
||||||
|
done;
|
||||||
|
!total
|
||||||
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
bowling_score [10; 7; 3; 9; 0; 10; 0; 8; 8; 2; 0; 6; 10; 10; 10; 8; 1]
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
"anagrams.ml": 3,
|
"anagrams.ml": 3,
|
||||||
"atm.ml": 120,
|
"atm.ml": 120,
|
||||||
"bag.ml": 3,
|
"bag.ml": 3,
|
||||||
|
"bowling.ml": 167,
|
||||||
"bf_full.ml": 6,
|
"bf_full.ml": 6,
|
||||||
"bisect.ml": 141,
|
"bisect.ml": 141,
|
||||||
"bigint_add.ml": 28,
|
"bigint_add.ml": 28,
|
||||||
|
|||||||
@@ -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-10 Phase 5.1 — bowling.ml baseline (10-pin bowling score
|
||||||
|
for canonical "167" PBA-style game). Walks pin-knockdown list
|
||||||
|
applying strike/spare bonuses through a 10-frame counter. Strike
|
||||||
|
consumes 1 throw + 2 bonus; spare consumes 2 throws + 1 bonus;
|
||||||
|
open frame is just the two pin counts. Frame ten special-cases
|
||||||
|
ignored (input includes the bonus throws naturally). 131 baseline
|
||||||
|
programs total.
|
||||||
- 2026-05-10 Phase 5.1 — tail_factorial.ml baseline (12! via tail
|
- 2026-05-10 Phase 5.1 — tail_factorial.ml baseline (12! via tail
|
||||||
recursion = 479001600). Single-helper tail-recursive loop
|
recursion = 479001600). Single-helper tail-recursive loop
|
||||||
threading an accumulator. Companion to factorial.ml (10! via
|
threading an accumulator. Companion to factorial.ml (10! via
|
||||||
|
|||||||
Reference in New Issue
Block a user