
Bowling
Calculá el puntaje de un partido de bowling
Enunciado
Escribí un programa que calcule el puntaje de un partido de bowling de diez pinos.
Input: un string (descripto más abajo) que representa un partido de bowling
Output: un entero con el puntaje
Reglas del bowling
Cada partido (o "línea") de bowling tiene diez turnos (o "frames") para el jugador.
En cada frame, el jugador tiene hasta dos tiros para voltear los diez pinos.
Si con la primera bola de un frame voltea los diez pinos, se llama "strike". El frame termina. El puntaje del frame es diez más el total de pinos volteados en las dos bolas siguientes.
Si con la segunda bola de un frame voltea los diez pinos, se llama "spare". El frame termina. El puntaje del frame es diez más la cantidad de pinos volteados en la bola siguiente.
Si después de las dos bolas queda al menos uno de los diez pinos en pie, el puntaje de ese frame es simplemente el total de pinos volteados en esas dos bolas.
Si hacés un spare en el último frame (el 10º), tenés una bola extra de bonus. Si hacés un strike en el último frame (el 10º), tenés dos bolas extra de bonus. Estos tiros de bonus forman parte del mismo turno. Si una bola de bonus voltea todos los pinos, el proceso no se repite. Las bolas de bonus solo se usan para calcular el puntaje del último frame.
El puntaje del partido es la suma de los puntajes de todos los frames.
Esta app online te puede ayudar a entender las reglas: http://www.bowlinggenius.com/
Significado de los símbolos
Xindica un strike./indica un spare.-indica un tiro errado.|indica el límite entre frames.- Los caracteres después de
||indican las bolas de bonus.
Ejemplos
X|X|X|X|X|X|X|X|X|X||XX Diez strikes en la primera bola de los diez frames. Dos bolas de bonus, las dos strikes.
Puntaje de cada frame = 10 + puntaje de las dos bolas siguientes = 10 + 10 + 10 = 30. Puntaje total = 10 frames x 30 = 300
9-|9-|9-|9-|9-|9-|9-|9-|9-|9-|| Nueve pinos en la primera bola de los diez frames. La segunda bola de cada frame
erra el último pino en pie. Sin bolas de bonus. Puntaje de cada frame = 9. Puntaje total = 10 frames x 9 = 90
5/|5/|5/|5/|5/|5/|5/|5/|5/|5/||5 Cinco pinos en la primera bola de los diez frames. La segunda bola de cada frame
voltea los cinco pinos restantes, un spare. Una bola de bonus, voltea cinco pinos. Puntaje de cada frame = 10 + puntaje
de la bola siguiente = 10 + 5 = 15. Puntaje total = 10 frames x 15 = 150
X|7/|9-|X|-8|8/|-6|X|X|X||81 Puntaje total = 167
Pistas
Pista 1
Tratá de usar siempre inputs válidos en tus tests. No acumules refactorings.
Pista 2
Arrancá por los casos triviales y fáciles, por ejemplo cuando el jugador falla en todos los frames.