Bowling

Resumen

Esta kata es bastante avanzada, por lo que recomendamos que intentes resolverla una vez que hayas practicado TDD con otras katas más fáciles.

Si no has puesto en práctica las skills básicas del TDD clásico (como avanzar en baby steps y usar el ciclo Red-Green-Refactor), deberías primero perfeccionar estas habilidades con la kata de FizzBuzz y la del Año Bisiesto.

Adicionalmente, te recomiendo resolver la kata Números Romanos si aún no la has hecho. Tanto la kata de Números Romanos como la de Bowling son útiles para que un desarrollador aprenda a transformar un algoritmo paso a paso. Con Números Romanos, la progresión de las pruebas es un poco más fácil de resolver (te mueves para admitir números cada vez más grandes). En cambio, con esta kata, hacer la siguiente prueba es más difícil por lo que tendrás que depender más de las reglas del TPP (Transformation Priority Premise).

Esta kata te permitirá practicar el elemento clave de TDD con un coste relativamente bajo en términos de riesgo. Avanzar paso a paso y retroceder al equivocarte, te permite avanzar con confianza ya que eres consciente de que será fácil corregir el error. Al obtener feedback rápido podrás identificar los problemas casi inmediatamente y, al tomar pequeños pasos, reconocerás con facilidad dónde te equivocaste. Incluso puede que te incentive a tomar decisiones más atrevidas y te motive a experimentar.

Te recomiendo que antes de empezar la kata leas el artículo The Transformation Priority Premise por Robert C. Martin. Si lo aplicas correctamente, el TPP debería hacerte más competente a la hora de seleccionar el siguiente pequeño paso a dar.

Instrucciones

Escribe un programa para puntuar una partida de bowling.

Esta app online puede ayudarte: http://www.bowlinggenius.com/

Input: una cadena (descrita a continuación) que representa un juego de bolos
Output: una puntuación de número entero

Reglas

Cada partida (o "línea") de bolos incluye diez turnos (o "cuadros") para el jugador.

En cada cuadro, el jugador tiene hasta dos intentos para derribar los diez bolos.

Si la primera bola de un cuadro derriba los diez bolos, se denomina "strike" y el turno termina. La puntuación del cuadro es diez más el total de los bolos derribados en las dos bolas siguientes.

Si la segunda bola de un cuadro derriba los diez bolos, se denomina "spare" y el turno termina. La puntuación del cuadro es diez más el número de bolos derribados por la siguiente bola.

Si, después de las dos bolas, todavía queda al menos uno de diez bolos en pie, la puntuación de ese cuadro es simplemente el número total de bolos derribados en ese turno.

Si consigues un spare en el último (10º) cuadro, recibes una bola extra. Si consigues un strike en el último (10º) cuadro obtienes dos bolas extras. Estos bonus se realizan como parte del mismo turno. Si una bola extra derriba todos los bolos, el proceso no se repite. Las bolas extras sólo se utilizan para calcular la puntuación del cuadro final.

La puntuación del juego es el total de las puntuaciones de todos los cuadros.

Significado de los símbolos

  • X significa strike
  • / significa spare
  • - indica un fallo
  • | indica el límite de un cuadro
  • Los caracteres que aparecen después de || indica las bolas extras

Ejemplos

X|X|X|X|X|X|X|X|X|X||XX Diez strikes en la primera bola de los diez cuadros. Dos bolas extras, ambas strikes. Puntuación de cada cuadro = 10 + puntuación de las dos bolas sucesivas = 10 + 10 + 10 = 30. Puntuación final = 10 cuadros x 30 = 300

9-|9-|9-|9-|9-|9-|9-|9-|9-|9-|| Nueve bolos derrumbados en la primera bola de los diez cuadros. La segunda bola de cada cuadro no derriba el último bolo restante. Ninguna bola extra. Puntuación de cada cuadro = 9. Puntuación final = 10 cuadros x 9 = 90

5/|5/|5/|5/|5/|5/|5/|5/|5/|5/||5 Cinco bolos derrumbados en la primera bola de los diez cuadros. La segunda bola de cada cuadro golpea los cinco bolos restantes, sería un spare. Se obtiene una bola extra la cual tumba cinco bolos. Puntuación de cada cuadro = 10 + puntuación de la bola extra = 10 + 5 = 15. Puntuación final = 10 cuadros x 15 = 150

X|7/|9-|X|-8|8/|-6|X|X|X||81 Puntuación final = 167

Crédito: Kata-Log

Artículos

Soluciones

Vídeos