배구 경기의 플레이 기록을 한 줄씩 읽어, 한 팀에 대한 통계 보고서를 출력하는 프로그램을 작성한다.
프로그램은 각 줄이 하나의 플레이를 나타내는 입력을 순서대로 읽는다. 플레이 종류는 표 1과 같다.
| 키 | 플레이 | 설명 |
|---|---|---|
| C | CHECKIN | 새 경기의 시작을 나타낸다. 모든 경기는 정확히 한 줄의 CHECKIN으로 시작하며, 그 경기에 참가하는 한 팀의 모든 선수를 나열한다. |
| H | HIT | 상대가 성공적으로 수비한 공격. |
| K | KILL | 상대가 수비하지 못한 공격. |
| E | ERR | 네트에 걸리거나 코트를 벗어난 실책성 공격. |
| B | BLOCK | 네트 앞에서 공격을 성공적으로 막은 수비. |
| D | DIG | 네트 뒤에서 공격을 성공적으로 받아낸 수비. |
| R | REPORT | 보고서를 출력하라는 명령. 출력한 뒤에는 지금까지 모은 모든 플레이 기록을 버리고, 남은 입력을 처음 상태에서 다시 처리한다. |
표 1: 플레이
CHECKIN과 REPORT를 제외한 모든 플레이에는 정확히 하나의 두 자리 선수 번호가 붙는다. 선수 번호의 각 자리는 0에서 5 사이이므로, 심판이 양손의 손가락 0~5개로 표시할 수 있다.
각 보고서에서, 한 경기라도 참가한 모든 선수와 팀 전체에 대해 표 2의 통계를 계산한다.
| 항목 | 공식 | 설명 | 예시 |
|---|---|---|---|
| Hit % | (sum(KILL) - sum(ERR)) / (sum(KILL) + sum(ERR) + sum(HIT)) | 공격 성공률 | 0.461 |
| KPG | sum(KILL) / #Games | 경기당 KILL 수 | 5.613 |
| BPG | sum(BLOCK) / #Games | 경기당 BLOCK 수 | 3.100 |
| DPG | sum(DIG) / #Games | 경기당 DIG 수 | 2.050 |
표 2: 통계
유의 사항:
각 입력 줄에는 정확히 하나의 플레이가 들어 있다. 1열에는 표 1의 플레이 키 중 하나가 온다.
R만 있다.REPORT를 읽을 때마다 보고서를 출력한다.
모든 보고서의 첫 두 줄은 정확히 다음과 같다(둘째 줄은 하이픈 41개이다).
Player Hit Pct KPG BPG DPG
-----------------------------------------
그다음, 한 경기라도 참가한 각 선수에 대해 선수 번호 오름차순으로 한 줄씩 다음 형식으로 출력한다.
55 s0.000 99.999 99.999 99.999
s는 Hit %의 부호로, Hit %가 0.000 이상이면 +, 그렇지 않으면 -이다. 네 값 모두 소수점 아래 정확히 세 자리로 출력한다.
선수 줄들 다음에는, 같은 형식으로 team이라는 라벨을 사용해 팀 통계 한 줄을 출력한다.
team s0.000 99.999 99.999 99.999
칸 배치: 선수 번호(또는 라벨 team)는 8칸 폭에 왼쪽 정렬하고, 부호가 붙은 Hit %는 그다음 6칸을 차지하며, KPG, BPG, DPG는 각각 9칸 폭에 오른쪽 정렬한다. 어떤 통계의 절댓값도 99.999를 넘지 않는다.
연속한 두 보고서 사이에는 빈 줄을 정확히 하나 넣되, 마지막 보고서 뒤에는 빈 줄을 넣지 않는다.