#P1076. Bowl

Bowl

描述

乔的保龄球馆并没有迅速采用新技术。在这里,最低工资的青少年仍然负责重新摆放球瓶,而不是那些花哨的机器,而经验丰富的老保龄球手仍然自己记录得分。不幸的是,现在经营保龄球馆的乔·小(Joe Junior)发现,像他这个年纪的人在喝了第二杯啤酒后,对得分规则有点摸不着头脑,因此纷纷远离他的球馆,转而选择街对面的“赛博保龄2000”(CyberBowl 2000),那里有自动计分系统。乔·小认为,如果他在每条球道旁边放一台廉价的个人电脑,就可以搭建一个廉价的半自动计分系统。他的计划是让这些电脑运行一种软件,只需保龄球手输入每次投球后仍然立着的球瓶数量,软件就会自动计分,并告诉球手何时比赛结束。乔·小希望你能为他编写这款软件。

当然,由于你可能也不知道如何计算保龄球的得分,乔·小提供了一份规则说明。基本的比赛由十局组成。在一局中,你有两次机会将球滚向球道,尽可能多地击倒球瓶。每局开始时有十个球瓶,第一次投球击倒的球瓶不会被重新摆放,因此一局中最多可以击倒十个球瓶。每击倒一个球瓶得一分。此外,还有两种额外得分方式。如果你在第一次投球时就击倒了所有十个球瓶,你就得到了一个“全中”(strike)。除了击倒球瓶的十分之外,这一局的得分还会增加你接下来两次投球击倒的球瓶总数。这两次投球通常属于下一局(或两局),并且也会在那一局(或那些局)中得分。如果你在一局中击倒了所有十个球瓶,但需要两次投球才能完成,你就得到了一个“补中”(spare)。除了击倒球瓶的十分之外,这一局的得分还会增加你下一次投球击倒的球瓶数。当然,这些球瓶也会计入下一局的得分。如果你在最后一局(第十局)得到一个补中(或全中),你有权获得一个(或两个)额外的投球机会,以确定第十局的额外得分。一局完美的比赛得分为300分,因为每一局得分为30分,击倒十个球瓶得10分,再加上接下来两次投球击倒的20个球瓶得分。

现在,你准备好接受这个任务,编写这款软件了吗?

输入

输入包含多个完整或部分比赛。每场比赛由一行描述,包含一个不超过12个字符的姓名和一系列数字,每个数字代表一次投球后仍然立着的球瓶数量,以-1结束。根据规则,一场比赛有11到21次投球;输入行不会显示比赛结束后的投球。文件中描述的比赛数量没有预先确定,因此你需要检测输入文件的结束。

输出

程序成功完成后,标准输出将为每一行输入生成两行输出。第一行输出包含球手的姓名和每局的投球记录。该记录显示每局中每次投球击倒的球瓶数,用数字表示,但有一些例外。如果一次投球没有击倒任何球瓶,则用破折号(-)代替0。一个“X”表示一次投球就击倒了所有十个球瓶。一个斜杠(/)表示一次投球完成了击倒所有球瓶的任务,前提是上一次投球后仍有球瓶立着。否则,投球用数字(19)表示。在第1到第9局中,一局的投球次数可能为一次(全中),但在第10局中,一局的投球次数可能为三次(全中或补中后跟额外投球),通常为两次。以下是各种情况的投球标记示例:

标记 说明
81 第一次投球击倒了8个球瓶,下一次投球击倒了1个
7/ 第一次投球击倒了7个球瓶,然后击倒了剩下的
X 第一次投球就击倒了所有球瓶
9- 第一次投球击倒了9个球瓶,下一次投球没有击倒任何球瓶
8/X 第十局第一次投球击倒了8个球瓶,然后击倒了剩下的,然后在额外投球中击倒了所有球瓶
X-/ 第十局第一次投球击倒了所有球瓶,然后在第一次额外投球中没有击倒任何球瓶,第二次额外投球击倒了所有球瓶

第二行输出显示累计得分。第一局的累计得分就是该局击倒的球瓶得分,加上适用的额外得分。任何其他局的累计得分是前一局的累计得分加上该局击倒的球瓶得分,再加上该局可能获得的全中或补中的额外得分。如果一局是全中或补中,但该局的额外得分尚未可知,则可能出现第一行有标记,但第二行没有得分的情况。

输出格式要求球手的姓名左对齐。每局的字段宽度为三个字符,字段之间用空格分隔。字段从第14列、第18列、第22列等开始。第一行的投球记录在其字段中左对齐。累计得分在其字段中右对齐。每两个球手的得分之间用一个空行分隔。

输入数据1

Chuck 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 -1  
Solly 0 0 0 0 0 0 0 0 0 0 0 8 -1  
Lothar 10 0 10 0 10 0 -1  
Brutus 5 1 2 0 6 0 9 -1  
McGillicuddy 0 0 1 0 -1  
Homer 0 10 0 0 0 0 -1  
Barney 0 0 0 0 0 0 0 0 0 0 1 0 -1

输出数据1

下面的数字行是为了帮助你正确对齐输出,不是你的解决方案应该产生的输出的一部分。

1234567890123456789012345678901234567890123456789012  
Chuck        9/  9/  9/  9/  9/  9/  9/  9/  9/  9/9  
              19  38  57  76  95 114 133 152 171 190  

Solly        X   X   X   X   X   X   X   X   X   XX2  
              30  60  90 120 150 180 210 240 270 292  

Lothar       -/  -/  -/  
              10  20  

Brutus       54  8/  4/  1  
               9  23  34  

McGillicuddy X   X   9/  
              29  49  

Homer        X   -/  X   X   X  
              20  40  70  

Barney       X   X   X   X   X   X   X   X   X   X9/  
              30  60  90 120 150 180 210 240 269 289  

来源
南中部美国 1998