Bowling

Bowling

Difficile

Istruzioni

Assegna il punteggio a una partita di bowling.

Il bowling è un gioco in cui i giocatori lanciano una palla pesante per abbattere dei birilli disposti a triangolo. Scrivi il codice per tenere traccia del punteggio di una partita di bowling.

Come si calcola il punteggio

La partita è composta da 10 frame. Un frame è formato da uno o due lanci della palla, con 10 birilli in piedi all'inizio del frame. Ci sono tre casi per il calcolo del punteggio di un frame.

  • Un frame aperto è un frame in cui si registra un punteggio inferiore a 10. In questo caso il punteggio del frame è il numero di birilli abbattuti.

  • Uno spare è un frame in cui tutti e dieci i birilli vengono abbattuti con il secondo lancio. Il valore totale di uno spare è 10 più il numero di birilli abbattuti nel lancio successivo.

  • Uno strike è un frame in cui tutti e dieci i birilli vengono abbattuti con il primo lancio. Il valore totale di uno strike è 10 più il numero di birilli abbattuti nei due lanci successivi. Se a uno strike segue immediatamente un secondo strike, il valore del primo strike non può essere determinato finché la palla non viene lanciata un'altra volta.

Ecco un esempio con tre frame:

Frame 1 Frame 2 Frame 3
X (strike) 5/ (spare) 9 0 (frame aperto)

Il frame 1 è (10 + 5 + 5) = 20

Il frame 2 è (5 + 5 + 9) = 19

Il frame 3 è (9 + 0) = 9

Questo significa che il totale corrente è 48.

Il decimo frame è un caso speciale. Se si fa uno spare o uno strike, si ottengono rispettivamente uno o due tiri supplementari. I tiri supplementari servono a calcolare il totale del decimo frame. Fare strike o spare con il tiro supplementare non dà al giocatore altri tiri supplementari. Il valore totale del decimo frame è il numero totale di birilli abbattuti.

Per un decimo frame di X1/ (strike e spare), il valore totale è 20.

Per un decimo frame di XXX (tre strike), il valore totale è 30.

Requisiti

Scrivi il codice per tenere traccia del punteggio di una partita di bowling. Deve supportare due operazioni:

  • roll(pins : int) viene chiamata ogni volta che il giocatore lancia la palla. L'argomento è il numero di birilli abbattuti.
  • score() : int viene chiamata solo alla fine della partita. Restituisce il punteggio totale di quella partita.

Parole

Definisci una tupla game e un costruttore <game> ( -- game ) che restituisce una nuova partita senza tiri.

Fornisci queste parole che operano su una partita:

  • roll ( pins game -- ): registra che sono stati abbattuti pins birilli. Lancia un errore quando il tiro non è valido:
    • "Negative roll is invalid" per un numero negativo di birilli.
    • "Cannot roll after game is over" una volta che tutti e dieci i frame (e gli eventuali tiri supplementari) sono stati lanciati.
    • "Pin count exceeds pins on the lane" quando vengono abbattuti più birilli di quanti ne siano in piedi.
  • score ( game -- n ): il punteggio totale della partita. Lancia "Score cannot be taken until the end of the game" quando la partita non è ancora completa.

Nota che roll nasconde la parola roll di mescolamento del vocabolario kernel. La suite di test risolve l'ambiguità con FROM: bowling => roll ;.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Factor Exercism

Vuoi iniziare Bowling?

Iscriviti a Exercism per imparare e padroneggiare Factor con 47 concetti163 esercizi e il mentoring di persone reali, tutto gratis.