쿠키 설정

서비스 개선을 위해 분석 쿠키를 사용합니다. 자세히 보기

ALPHANO 로고

Domineering

Top Player제출참여자

문제

8×88 \times 8 크기의 보드 위에서 두 플레이어가 도미니어링 게임을 진행합니다.

1. 보드 및 구성 요소

보드는 1111열부터 8888열까지 6464개의 칸으로 구성되며, xxyy열의 칸을 (x,y)(x, y)로 표기합니다. 초기 보드의 모든 칸은 빈 칸으로 주어지며, 각 칸 (x,y)(x, y)에는 00 이상 33 이하의 정수 A_x,yA\_{x, y}가 하나씩 적혀있습니다.

다음은 초기 보드의 예시입니다.

초기에 선공 플레이어는 00점으로, 후공 플레이어는 2.52.5점으로 게임을 시작합니다.

2. 게임 진행

게임은 선공 플레이어부터 시작해 두 플레이어가 번갈아 턴을 진행합니다.

선공 플레이어는 자신의 턴에 가로로 인접한 두 빈 칸을 덮는 1×21 \times 2 크기의 도미노를 놓거나, PASS를 선택할 수 있습니다. 도미노를 놓는 경우, 플레이어는 보드 위의 빈 칸 (x,y)(x, y)(x,y+1)(x, y + 1)을 동시에 덮어야 하며, 두 칸에 적혀있던 정수의 합만큼 점수를 획득합니다.

다음은 선공 플레이어가 (4,5)(4, 5)(4,6)(4, 6)을 덮는 도미노를 놓는 예시입니다.

후공 플레이어는 자신의 턴에 세로로 인접한 두 빈 칸을 덮는 2×12 \times 1 크기의 도미노를 놓거나, PASS를 선택할 수 있습니다. 도미노를 놓는 경우, 플레이어는 보드 위의 빈 칸 (x,y)(x, y)(x+1,y)(x + 1, y)을 동시에 덮어야 하며, 두 칸에 적혀있던 정수의 합만큼 점수를 획득합니다.

다음은 후공 플레이어가 (5,4)(5, 4)(6,4)(6, 4)를 덮는 도미노를 놓는 예시입니다.

3. 게임 종료

게임은 두 플레이어가 연속해서 PASS를 선택하거나, 두 플레이어 모두 도미노를 놓을 수 있는 위치가 없는 경우 종료됩니다.

게임이 종료된 시점에 점수가 더 큰 플레이어가 승리합니다.

보드의 최종 승자가 되기 위한 AI를 설계해주세요!

입력

채점기와 플레이어가 통신을 시작하기 전 88개 줄에 걸쳐 다음의 입력이 주어집니다.

  • i(1i8)i(1 \le i \le 8)번째 줄에 보드의 각 칸에 적힌 정수를 의미하는 A_i,1,A_i,2,,A_i,8A\_{i, 1}, A\_{i, 2}, \cdots, A\_{i, 8}이 공백으로 구분되어 주어집니다. (0A_i,j3)(0 \le A\_{i, j} \le 3)

이후 채점기는 다음의 한 줄 단위로 플레이어와 통신합니다.

명령어 채점기→플레이어 (입력) 플레이어→채점기 (출력) 시간 제한 (ms) 설명
READY READY (FIRST or SECOND) OK 3000 선공/후공 정보를 알립니다.
TURN TURN my_time opp_time MOVE x y my_time 내 남은 시간과 상대의 남은 시간을 알립니다. 이번 턴에 내가 돌을 놓을 칸 (x,y)(x, y)를 출력합니다. PASS를 선택한 경우에는 MOVE -1 -1을 출력합니다.
OPP OPP x y time - - 상대가 직전에 둔 수와 사용한 시간을 알립니다. 상대가 PASS를 선택했다면 OPP -1 -1 time이 입력됩니다.
FINISH FINISH - - 게임 종료를 알립니다. 플레이어는 추가 출력 없이 프로그램을 정상 종료해야 합니다.
  • moveopp 명령어에서 x, y는 정수이며, x, y가 모두 -1이 아닌 경우는 플레이어가 놓은 도미노가 덮는 두 칸 중 행 번호, 열 번호가 작은 칸의 좌표가 (x,y)(x, y)임을 의미합니다.
  • my_time, opp_time, time은 정수이며, 시간은 밀리초(millisecond) 단위로 주어집니다.
  • 모든 출력 후에는 개행문자를 출력한 뒤 버퍼를 flush해야 합니다.
  • 시간 제한이 있는 명령에서 출력을 제한 내에 수행하지 않으면 시간 초과(TLE) 판정을 받습니다.
  • 출력 형식에 맞지 않는 문자열을 출력하거나, TURN 명령어가 주어질 때 합법적이지 않은 수를 출력하면 런타임 에러(RE) 판정을 받습니다.

예시

선공 입력 선공 출력 후공 입력 후공 출력
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 3 0 0 0 0 0 0 3 3 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
READY FIRST READY SECOND
OK OK
TURN 10000 10000
MOVE 2 1
OPP 2 1 50
TURN 10000 9950
MOVE 5 7
OPP 5 7 20
... ... ... ...
FINISH FINISH

샘플 코드

제한

  • 시간 : 각 플레이어에게 주어지는 첫 번째 TURN 명령어에서 my_time10,000ms10{,}000\mathrm{ms}입니다.
  • 메모리 : 1,024MB1{,}024\mathrm{MB}
  • 채점 환경 : HELP > 채점 환경