Files
rose-ash/lib/ocaml/baseline/bowling.ml
giles da54c3ea53
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
ocaml: phase 5.1 bowling.ml baseline (10-pin bowling score, sample game = 167)
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.
2026-05-10 02:26:10 +00:00

25 lines
643 B
OCaml

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]