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.
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.
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.Iscriviti a Exercism per imparare e padroneggiare OCaml con 60 esercizi e il mentoring di persone reali, tutto gratis.