保齡球

保齡球

中等

說明

為一場保齡球比賽計分。

保齡球是一種遊戲,玩家滾動沉重的球,擊倒排成三角形的球瓶。 請寫程式記錄一場保齡球比賽的分數。

保齡球計分

一場比賽由 10 格組成。 每一格由一次或兩次投球組成,每格開始時有 10 個球瓶立著。 每一格的計分方式有三種情況。

  • 開放格是指該格得分低於 10 分。 此時該格的分數就是擊倒的球瓶數。

  • 補中是指第二次投球擊倒全部十個球瓶。 補中的總分是 10 加上下一次投球擊倒的球瓶數。

  • 全倒是指第一次投球就擊倒全部十個球瓶。 全倒的總分是 10 加上接下來兩次投球擊倒的球瓶數。 如果全倒之後緊接著又出現一次全倒,就必須再投一次球,才能確定第一次全倒的分數。

以下是一個三格的例子:

第 1 格 第 2 格 第 3 格
X(全倒) 5/(補中) 9 0(開放格)

第 1 格是 (10 + 5 + 5) = 20

第 2 格是 (5 + 5 + 9) = 19

第 3 格是 (9 + 0) = 9

這表示目前的累計總分是 48。

比賽中的第 10 格是特殊情況。 如果有人投出補中或全倒,就能分別獲得一次或兩次加球。 加球的存在是為了計算第 10 格的總分。 在加球時投出全倒或補中,並不會讓玩家獲得更多加球。 第 10 格的總分就是擊倒的球瓶總數。

若第 10 格是 X1/(一次全倒和一次補中),總分是 20。

若第 10 格是 XXX(三次全倒),總分是 30。

需求

請寫程式記錄一場保齡球比賽的分數。 它應該支援兩種操作:

  • 玩家每次投球時會呼叫 roll(pins : int)。 引數是擊倒的球瓶數。
  • score() : int 只會在比賽完全結束時呼叫。 它會回傳該場比賽的總分。
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
OCaml Exercism

準備好開始 保齡球 了嗎?

註冊 Exercism,透過 60 個練習 和真人引導來學習並精通 OCaml,全部免費。