给一场保龄球比赛计分。
保龄球是一项运动:球员投出沉重的球,击倒排成三角形的球瓶。 编写代码,记录一场保龄球比赛的得分。
一场比赛由 10 局组成。 每局由 1 次或 2 次投球组成,每局开始时都有 10 个球瓶立着。 一局的计分有以下 3 种情况。
开放局是指该局记录到的得分低于 10 分的情况。 此时该局的得分就是击倒的球瓶数。
补中是指第 2 次投球击倒了全部 10 个球瓶。 补中的总分为 10 加上下一次投球击倒的球瓶数。
全中是指第 1 次投球就击倒了全部 10 个球瓶。 全中的总分为 10 加上接下来 2 次投球击倒的球瓶数。 如果一次全中之后紧接着又是一次全中,那么在再投 1 次球之前,无法确定第 1 次全中的分值。
下面是一个 3 局的例子:
| 第 1 局 | 第 2 局 | 第 3 局 |
|---|---|---|
| X(全中) | 5/(补中) | 9 0(开放局) |
第 1 局为 (10 + 5 + 5) = 20。
第 2 局为 (5 + 5 + 9) = 19。
第 3 局为 (9 + 0) = 9。
也就是说,当前的累计总分是 48。
比赛的第 10 局是一个特殊情况。 如果球员投出补中或全中,就能分别获得 1 次或 2 次补充投球。 补充投球用于计算第 10 局的总分。 在补充投球中投出全中或补中,并不会让球员获得更多补充投球。 第 10 局的总分就是击倒球瓶的总数。
第 10 局如果是 X1/(全中和补中),总分为 20。
第 10 局如果是 XXX(3 次全中),总分为 30。
编写代码,记录一场保龄球比赛的得分。 代码应支持 2 种操作:
roll(pins : int)在球员每次投球时调用。
参数是击倒的球瓶数。score() : int只在比赛完全结束时调用。
它返回该场比赛的总分。