Boliche

Boliche

Difícil

Instrucciones

Puntúa una partida de bowling.

El bowling es un juego en el que los jugadores lanzan una bola pesada para derribar pinos dispuestos en forma de triángulo. Escribe código para llevar la cuenta de la puntuación de una partida de bowling.

Cómo se puntúa el bowling

La partida consta de 10 entradas. Una entrada se compone de uno o dos lanzamientos de bola con 10 pinos en pie al inicializarse la entrada. Hay tres casos al calcular la puntuación de una entrada.

  • Una entrada abierta es aquella en la que se registra una puntuación menor que 10. En ese caso, la puntuación de la entrada es el número de pinos derribados.

  • Un spare es aquel en el que los diez pinos se derriban con el segundo lanzamiento. El valor total de un spare es 10 más el número de pinos derribados en su siguiente lanzamiento.

  • Un strike es aquel en el que los diez pinos se derriban con el primer lanzamiento. El valor total de un strike es 10 más el número de pinos derribados en los dos lanzamientos siguientes. Si a un strike le sigue inmediatamente otro strike, el valor del primer strike no se puede determinar hasta que se lance la bola una vez más.

Aquí tienes un ejemplo de tres entradas:

Entrada 1 Entrada 2 Entrada 3
X (strike) 5/ (spare) 9 0 (entrada abierta)

La entrada 1 es (10 + 5 + 5) = 20

La entrada 2 es (5 + 5 + 9) = 19

La entrada 3 es (9 + 0) = 9

Esto significa que el total acumulado actual es 48.

La décima entrada de la partida es un caso especial. Si alguien lanza un spare o un strike, recibe una o dos bolas extra, respectivamente. Las bolas extra existen para calcular el total de la décima entrada. Anotar un strike o un spare en la bola extra no le da al jugador más bolas extra. El valor total de la décima entrada es el número total de pinos derribados.

Para una décima entrada de X1/ (un strike y un spare), el valor total es 20.

Para una décima entrada de XXX (tres strikes), el valor total es 30.

Requisitos

Escribe código para llevar la cuenta de la puntuación de una partida de bowling. Debe admitir dos operaciones:

  • Se llama a roll(pins : int) cada vez que el jugador lanza una bola. El argumento es el número de pinos derribados.
  • Se llama a score() : int solo justo al final de la partida. Devuelve la puntuación total de esa partida.

Palabras

Define una tupla game y un constructor <game> ( -- game ) que devuelve un juego nuevo sin tiradas.

Proporciona estas palabras que operan sobre un juego:

  • roll ( pins game -- ): registra que se derribaron pins bolos. Lanza un error cuando la tirada no es válida:
    • "Negative roll is invalid" para un número negativo de bolos.
    • "Cannot roll after game is over" una vez que se hayan tirado los diez cuadros (y las bolas de relleno que haya).
    • "Pin count exceeds pins on the lane" cuando se derriban más bolos de los que están en pie.
  • score ( game -- n ): la puntuación total del juego. Lanza "Score cannot be taken until the end of the game" cuando el juego todavía no está completo.

Ten en cuenta que roll oculta la palabra de barajado roll del vocabulario kernel. La suite de pruebas lo desambigua con FROM: bowling => roll ;.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Factor Exercism

¿Todo listo para empezar Boliche?

Regístrate en Exercism para aprender y dominar Factor con 47 conceptos163 ejercicios y mentoría humana real, todo gratis.