쿠키 설정

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

ALPHANO 로고

쥐를 잡자

Top Player제출참여자

문제

7×117 \times 11 크기의 주방 바닥 위에서 쥐 무리(R)와 나도리 일행(C, N)이 치열한 대치를 벌이고 있습니다.

보드는 771111열로 구성되어있습니다. 행 번호는 위에서 아래로 11행부터 77행까지, 열 번호는 왼쪽에서 오른쪽으로 11열부터 1111열까지이며, xxyy열의 칸을 (x,y)(x, y)로 표기합니다.

보드의 맨 아래에는 향긋한 치즈가 놓여 있습니다. 쥐들은 치즈를 먹기 위해 주방 바닥 위를 내려오고 있으며, 고양이와 나도리는 이를 막으려 합니다.

fig1

각 칸은 빈 칸 ., 쥐 R, 고양이 C, 나도리 N 중 하나의 상태를 가집니다. 초기에는 다음과 같이 말이 배치됩니다.

상태 개수 초기 배치
R 1111 (1,1),(1,2),,(1,11)(1, 1), (1, 2), \cdots, (1, 11)
고양이 C 44 (6,4),(6,5),(6,7),(6,8)(6, 4), (6, 5), (6, 7), (6, 8)
나도리 N 11 (6,6)(6, 6)
빈 칸 . 6161

대치는 쥐 무리 부터 시작하며, 나도리과 쥐가 번갈아 턴을 진행합니다.

쥐는 자신의 턴에 다음의 행동을 수행합니다.

  1. R이 있는 칸 (x1,y1)(x_1, y_1)을 골라 쥐를 (x1+1,y1)(x_1 + 1, y_1)으로 이동합니다.

fig2

  • (x1+1,y1)(x_1 + 1, y_1)은 빈 칸 .이어야 합니다.
  • (x1,y1)(x_1, y_1)은 빈 칸 .이 됩니다.
  • (x1+1,y1)(x_1 + 1, y_1)는 쥐 R이 있는 칸이 됩니다.

즉, 쥐들은 한 칸씩 내려오며 치즈를 향해 돌진합니다.

나도리는 자신의 턴에 다음의 행동 중 하나를 수행합니다.

  1. 고양이 C가 있는 칸 (x1,y1)(x_1, y_1)을 골라 고양이를 (x2,y2)(x_2, y_2)로 이동합니다. (2x26;1y211)(2 \le x_2 \le 6; 1 \le y_2 \le 11)

fig3

  • 고양이는 상하좌우 및 대각선 88방향 중 한 방향을 고른 뒤 이동 경로 위에 다른 말이 없는 직선 경로로 이동할 수 있습니다. (즉, 고양이는 체스의 퀸과 같이 움직입니다)
  • (x2,y2)(x_2, y_2)는 빈 칸 .이어야 합니다.
  • (x1,y1)(x_1, y_1)은 빈 칸 .이 됩니다.
  • (x2,y2)(x_2, y_2)는 고양이 C가 있는 칸이 됩니다.
  1. 나도리 N이 있는 칸 (x1,y1)(x_1, y_1)을 골라 나도리를 (x2,y2)(x_2, y_2)로 이동합니다. (2x26;1y211)(2 \le x_2 \le 6; 1 \le y_2 \le 11)

fig4

  • max(x2x1,y2y1)=1\max(\lvert x_2 - x_1 \rvert, \lvert y_2 - y_1 \rvert) = 1 (즉, 나도리는 체스의 킹과 같이 움직입니다)
  • (x2,y2)(x_2, y_2)는 빈 칸 . 또는 쥐 R이 있는 칸이어야 합니다.
  • (x1,y1)(x_1, y_1)은 빈 칸 .이 됩니다.
  • (x2,y2)(x_2, y_2)는 나도리 N이 있는 칸이 됩니다.

대치는 다음 조건 중 하나가 만족될 때 종료됩니다.

  • 쥐 중 하나가 77행에 도달하면 쥐 무리가 치즈를 획득하며 승리합니다.
  • 보드 위에서 쥐가 완전히 사라지면 나도리 일행이 승리합니다.
  • 쥐의 턴에 이동 가능한 쥐가 하나도 없다면 나도리 일행이 승리합니다.

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

입력

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

명령어 채점기→플레이어 (입력) 플레이어→채점기 (출력) 시간 제한 (ms) 설명
READY READY (FIRST | SECOND) OK 3000 선공/후공 정보를 알립니다.
TURN TURN my_time opp_time MOVE x1 y1 x2 y2 my_time 내 남은 시간과 상대의 남은 시간을 알립니다. 이번 턴에 내가 선택한 수의 (x1,y1)(x_1, y_1), (x2,y2)(x_2, y_2)를 출력합니다.
OPP OPP x1 y1 x2 y2 time - - 상대가 직전에 둔 수와 사용한 시간을 알립니다.
FINISH FINISH - - 게임 종료를 알립니다. 플레이어는 추가 출력 없이 프로그램을 정상 종료해야 합니다.
  • x1, y1, x2, y2은 정수입니다.
  • my_time, opp_time, time은 정수이며, 시간은 밀리초(millisecond) 단위로 주어집니다.
  • 모든 출력 후에는 개행문자를 출력한 뒤 버퍼를 flush해야 합니다.
  • 시간 제한이 있는 명령에서 출력을 제한 내에 수행하지 않으면 시간 초과(TLE) 판정을 받습니다.
  • 출력 형식에 맞지 않는 문자열을 출력하거나, TURN 명령어가 주어질 때 합법적이지 않은 수를 출력하면 런타임 에러(RE) 판정을 받습니다.

예시

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

샘플 코드

제한

  • 시간 : 각 플레이어에게 주어지는 첫 번째 TURN 명령어에서 my_time1000010\,000ms입니다.
  • 메모리 : 1024MB
  • 채점 환경 : HELP > 채점 환경