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.
25 lines
643 B
OCaml
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]
|