야구는 통계로 가득한 스포츠이며, 이러한 통계는 경기 결과를 예측하는 데 쓰일 수 있다.
한 경기는 9이닝으로 이루어진다. 9이닝이 끝난 뒤에도 점수가 같으면, 연장 이닝을 한 이닝씩 진행하여 어느 연장 이닝이 끝났을 때 더 이상 동점이 아니게 될 때까지 계속한다. 각 이닝은 두 개의 반(half)으로 나뉜다. 초(첫 번째 반)에는 원정 팀이 공격하고, 말(두 번째 반)에는 홈 팀이 공격한다. 9회 말이 시작되는 시점에 홈 팀이 이미 앞서고 있다면 승자가 이미 정해졌으므로 경기는 그 즉시 끝난다.
각 팀은 9명의 선수가 공격 때 타석에 서는 순서를 적은 타순(batting order)을 제출한다. 모든 공격 반 이닝에서 공격 팀 선수들은 이 타순대로 타석에 선다. 경기 맨 처음 이닝의 첫 타자는 타순의 첫 번째 선수이며, 이후 각 타자는 타순에서 그다음 선수이다. 마지막 선수 다음에는 다시 타순의 첫 번째 선수로 돌아간다. 이후의 각 이닝에서 첫 타자는 그 팀이 직전에 공격했을 때 마지막으로 타석에 섰던 선수의 다음 선수이다.
타자가 안타(hit)를 치면, 그 타자는 1루로 나가고 이미 누상에 있던 모든 주자는 정확히 한 베이스씩 진루한다(이 문제에서는 주자가 한 번에 두 베이스 이상 진루하는 경우는 고려하지 않는다). 주자는 1루, 2루, 3루를 거쳐 마지막으로 홈에 들어와야 득점(run)을 올린다. 주자가 홈에 들어오면 그 선수는 다음 타석을 위해 벤치로 돌아간다. 공격 반 이닝은 공격 팀의 타자 3명이 아웃될 때까지 계속된다. 세 번째 아웃이 나오면 누상에 남아 있던 주자는 득점하지 못한다. 경기가 끝났을 때 더 많은 득점을 올린 팀이 이긴다.
어떤 상황에서는 타자가 이미 누상에 있는 주자를 진루시키기 위해 희생타(sacrifice)를 시도할 수 있다. 희생타가 성공하면 타자는 아웃되지만 누상에 있던 모든 주자가 한 베이스씩 진루한다. 이렇게 홈에 들어온 주자는 득점하는데, 다만 그 희생타가 반 이닝의 세 번째 아웃인 경우에는 반 이닝이 끝나고 득점은 인정되지 않는다. 희생타가 실패하면 타자는 아웃되고 어떤 주자도 진루하지 못한다. 타자는 2루에 주자가 있고 아웃이 없을 때, 또는 3루에 주자가 있고 아웃이 하나 이하일 때 희생타를 시도한다.
각 선수는 타석에서 안타를 칠 확률인 타율(hit percentage)(0과 1 사이)과, 희생타 시도가 성공할 확률인 희생타 성공률(sacrifice percentage)을 가진다. 두 팀 9명 선수 전원의 타율, 희생타 성공률, 그리고 타순이 주어질 때 한 경기를 시뮬레이션하라. 시뮬레이션에는 다음 난수 발생기를 사용한다.
$$x_{n+1} = (x_n \times 25173 + 13849) \bmod 65536$$
여기서 $x_n$은 이전 난수, $x_{n+1}$은 다음 난수이며, 모든 계산은 32비트 정수로 수행한다. 시드 $x_0 = 1$에서 시작하므로 처음 생성되는 난수는 $x_1$이다. 안타나 희생타의 성공 여부를 판정해야 할 때마다 다음 난수를 하나 생성한다. 안타(또는 희생타)는 다음 조건을 만족할 때 성공한다.
$$x_{n+1} / 65536 \le \text{(타율 또는 희생타 성공률)}$$
이때 나눗셈은 부동소수점 나눗셈이다. 각 경기가 시작될 때를 제외하고는 발생기를 초기화하지 않는다(즉, 시드를 다시 1로 되돌리지 않는다).
입력의 첫 줄에는 경기 수가 주어진다. 각 경기는 원정 팀의 타순에 이어 홈 팀의 타순으로 구성된다. 각 팀의 타순은 팀 이름(영문 대소문자 15자 이하)이 적힌 줄로 시작한다. 이어지는 9개의 줄은 타순대로 9명의 선수를 나타낸다. 각 줄에는 선수 이름(영문 대소문자 15자 이하), 공백, 타율(소수점 이하 3자리), 공백, 희생타 성공률(소수점 이하 3자리)이 차례로 주어진다. 모든 타율은 .200 이상 .400 이하이고, 모든 희생타 성공률은 .300 이상 .750 이하이다. 어떤 경기도 200이닝을 넘기지 않는다.
각 경기마다 첫 줄에 경기 번호와 원정 팀, 홈 팀 이름을 다음과 같이 출력한다.
Game <x>: <visiting> vs. <home>
그다음 빈 줄을 하나 출력한다.
이어서 경기에서 일어난 순서대로 각 이닝마다 안타를 친 선수와 득점한 선수를 출력한다. 형식은 다음과 같다.
Inning 1:
Hits:
<player1> <team>
<player2> <team>
Runs:
<player3> <team>
<player4> <team>
선수 목록은 두 칸 들여쓴다. 선수 이름과 팀 이름은 각각 너비 15의 오른쪽 정렬로 출력한다(이름 앞의 두 칸 들여쓰기, 그리고 이름과 팀 이름 사이의 한 칸 공백은 이와 별도이다). 안타를 친 선수나 득점한 선수가 아무도 없으면, 목록 대신 해당 항목에 다음 한 줄을
none
(두 칸 들여써서) 출력한다. 각 이닝의 출력 뒤에는 빈 줄을 하나 출력한다.
경기가 끝나면 각 팀의 득점 수와 안타 수를 원정 팀부터 시작하여 다음과 같이 요약해 출력한다.
End of Game:
<visiting> <x> runs, <x> hits
<home> <x> runs, <x> hits
요약은 두 칸 들여쓰고, 각 팀 이름은 너비 15의 오른쪽 정렬로 출력한다(들여쓰기는 이와 별도이다). 연속한 두 경기의 출력 사이에는 '=' 문자 60개로 이루어진 줄을 하나 넣어 구분한다.