문제
크기의 마당에서 두 플레이어가 결투를 진행합니다. 상대를 쓰러뜨리거나 마당 밖으로 밀어내거나, 영맥에서 가호를 모으면 승리합니다.
행과 열은 위에서 아래로, 왼쪽에서 오른쪽으로 각각 부터 까지이며, 행 열의 칸을 로 표기합니다.
마당에는 가호를 얻을 수 있는 영맥이 한 칸 있습니다. 두 플레이어의 시작 위치와 영맥의 위치는 경기마다 무작위로 정해집니다. 두 플레이어는 서로 다른 칸에서 시작하며, 영맥의 위치는 경기 동안 유지됩니다.
처음에 각 플레이어의 체력은 , 가호는 이며, 모든 기술을 사용할 수 있습니다.

초기 배치의 예시: 플레이어 1 (4,3), 플레이어 2 (4,5), 영맥 (2,4).
턴 진행
게임은 최대 턴 동안 진행됩니다. 매 턴 두 플레이어는 두 행동을 순서대로 미리 선택합니다. 양쪽의 선택이 끝나면 첫 번째 행동끼리 동시에 처리한 뒤, 두 번째 행동끼리 동시에 처리합니다. 행동 처리 중 승패가 결정되면 즉시 게임을 종료합니다.
두 행동을 마친 뒤 영맥에 서 있는 플레이어는 가호 을 얻습니다. 가호는 누적됩니다.

오른쪽 이동 → 대기로 영맥에서 턴을 마치면 가호 1을 얻습니다.
행동
방향은 위, 아래, 왼쪽, 오른쪽 중 하나를 선택합니다. 순보는 대각선 네 방향도 선택할 수 있습니다. 정면은 선택한 방향을 의미합니다.
| 행동 | 효과 | 재사용 대기 턴 수 |
|---|---|---|
대기 |
아무것도 하지 않습니다. | |
이동 |
선택한 방향으로 한 칸 이동합니다. | |
찌르기 |
정면의 첫 번째 칸과 두 번째 칸을 공격하여 피해 를 줍니다. | |
휩쓸기 |
정면의 세 칸과 자신의 양옆 두 칸을 공격하여 피해 를 주고, 상대를 선택한 방향으로 한 칸 밀어냅니다. | |
돌진 |
한 칸 이동한 뒤 정면의 첫 번째 칸과 두 번째 칸을 공격하여 피해 을 주고, 상대를 선택한 방향으로 두 칸 밀어냅니다. | |
방어 |
정면의 세 칸과 정면 두 번째 칸에 있는 상대의 공격을 막습니다. | |
파괴 |
정면의 첫 번째 칸을 공격합니다. 방어를 무시하고 피해 를 주며, 상대를 선택한 방향으로 한 칸 밀어냅니다. | |
순보 |
선택한 방향으로 정확히 두 칸 이동합니다. 중간 칸의 상대를 통과합니다. |
공격과 방어 범위는 마당 안의 칸에만 적용합니다.

찌르기 

휩쓸기 

돌진 

방어 

파괴 

순보 
대기와 이동을 제외한 여섯 행동을 기술이라고 합니다. 기술은 턴 시작에 사용 가능한 경우에만 선택할 수 있으며, 한 턴에 같은 기술은 한 번만 선택할 수 있습니다. 이동과 대기는 두 번 선택할 수 있습니다.
기술을 사용하면 성공 여부와 관계없이 표의 재사용 대기시간이 적용됩니다. 예를 들어 대기시간이 인 기술을 번째 턴에 사용하면 , 번째 턴에는 사용할 수 없으며, 번째 턴부터 다시 사용할 수 있습니다.
- 첫 번째 행동의 이동과 순보는 현재 위치에서 마당 안의 칸으로 향해야 합니다. 두 번째 행동의 이동과 순보는 모든 방향을 선택할 수 있으며, 수행할 때 도착 칸이 마당 밖이면 제자리에 머무릅니다.
- 돌진의 도착 칸이 마당 밖이면 이동하지 않고 현재 위치에서 공격합니다.
동시 처리
두 플레이어의 행동은 다음 순서로 처리합니다.
| 순서 | 행동 | 처리 규칙 |
|---|---|---|
| 1 | 순보 |
순보를 처리합니다. |
| 2 | 방어, 찌르기 |
방어를 적용하고 찌르기의 명중 여부를 판정합니다. 방어에 막히지 않은 찌르기에 맞은 상대의 이동 행동은 취소됩니다. 방어는 해당 행동을 처리하는 동안 적용됩니다. |
| 3 | 이동, 돌진 |
이동과 돌진의 이동을 처리합니다. |
| 4 | 휩쓸기, 돌진, 파괴 |
이동이 끝난 위치에서 휩쓸기, 돌진, 파괴의 명중 여부를 판정합니다. |
| 5 | 공격 비교 | 방어에 막히지 않은 두 공격이 서로 명중하면 피해량을 비교합니다. 피해량이 다르면 더 큰 공격의 피해와 밀기만 적용합니다. 같으면 양쪽 모두 공격 피해를 받지 않고 각 공격의 밀기만 적용합니다. |
| 6 | 밀기와 체력 | 밀기와 체력 감소를 처리합니다. 밀기는 한 칸씩 동시에 진행하며, 두 플레이어의 도착 칸이 같으면 양쪽의 남은 밀기를 중단합니다. |
각 이동 단계에서 두 플레이어의 도착 칸이 같거나 서로의 위치를 맞바꾸려 하면 둘 다 이동하지 않습니다. 그 단계에서 이동하지 않는 상대가 서 있는 칸으로도 이동할 수 없습니다. 이동이 막힌 돌진은 현재 위치에서 공격합니다.

찌르기
대 이동
: 플레이어 2는 이동이 취소되고 체력이 2 감소합니다.

돌진
대 찌르기
: 돌진의 피해 3과 두 칸 밀기만 적용합니다.

휩쓸기
대 휩쓸기
: 양쪽 모두 피해 없이 한 칸씩 밀려납니다.
승패
승패는 다음 순서로 판정합니다.
- 각 행동을 마친 뒤 체력이 이 되거나 마당 밖으로 밀려난 플레이어는 패배합니다. 같은 행동에서 양쪽 모두 패배 조건을 만족하면 무승부입니다.
- 두 행동을 마친 뒤 가호를 얻어 이 된 플레이어는 승리합니다.
- 번째 턴까지 승패가 결정되지 않으면 가호가 더 많은 플레이어가 승리합니다. 가호가 같으면 체력이 더 많은 플레이어가 승리하며, 둘 다 같으면 무승부입니다.

돌진으로 상대를 마당 밖으로 밀어내는 예시.
상대의 행동을 예측하여 결투의 최종 승자가 되기 위한 AI를 설계해주세요!
입력
게임 시작 시 다음 초기 배치가 두 플레이어에게 한 번 주어집니다.
INIT objective_r objective_c r1 c1 r2 c2
objective_r objective_c는 영맥의 행, 열, r1 c1과 r2 c2는 각각 플레이어 1과 플레이어 2의 시작 행, 열입니다. 좌표는 모두 부터 까지의 정수입니다.
채점기는 한 줄씩 다음 명령을 전달합니다.
| 명령어 | 입력 | 출력 |
|---|---|---|
| INIT | 위 형식의 초기 배치 | - |
| READY | READY FIRST 또는 READY SECOND |
OK |
| TURN | 아래 형식의 현재 상태 | action1 action2 |
| FINISH | FINISH |
- |
FIRST는 플레이어 1, SECOND는 플레이어 2입니다. FINISH를 받거나 입력이 끝나면 프로그램을 종료합니다.
턴 입력
TURN time turn r1 c1 hp1 blessing1 r2 c2 hp2 blessing2 previous_action1 previous_action2
time: 남은 총 응답 시간(밀리초).turn: 이번 턴 번호(부터 ).r1 c1 hp1 blessing1: 플레이어 1의 현재 행, 열, 체력, 가호.r2 c2 hp2 blessing2: 플레이어 2의 현재 행, 열, 체력, 가호. 입력은 항상 플레이어 1, 플레이어 2 순서입니다.previous_action1 previous_action2: 직전 턴에 상대가 선택한 두 행동. 첫 턴에는 대기, 대기인0 0입니다.
재사용 대기시간은 자신의 선택과 입력으로 받은 직전 상대 행동으로 추적합니다.
행동 출력
| 행동 | 출력 형식 |
|---|---|
| 대기 | 0 |
| 이동 | 1 dir |
| 찌르기 | 2 dir |
| 휩쓸기 | 3 dir |
| 돌진 | 4 dir |
| 방어 | 5 dir |
| 파괴 | 6 dir |
| 순보 | 7 dir |
dir은 U(위), R(오른쪽), D(아래), L(왼쪽) 중 하나입니다. 순보는 UR(오른쪽 위), DR(오른쪽 아래), DL(왼쪽 아래), UL(왼쪽 위)도 사용할 수 있습니다. 대기에는 방향을 붙이지 않습니다.
두 행동을 한 줄에 공백으로 구분하여 출력합니다. 예를 들어 1 U 2 R은 위로 이동한 뒤 오른쪽으로 찌르기, 7 UR 0은 오른쪽 위로 순보한 뒤 대기입니다.
제한
READY와 모든TURN응답에 사용하는 시간의 합은 플레이어마다 총 입니다.- 각 응답 끝에 개행문자를 출력하고 버퍼를 flush해야 합니다. 응답 길이는 개행문자를 포함해 바이트 이하여야 합니다.
- 시간 초과, 잘못된 출력 형식, 합법적이지 않은 행동은 패배로 처리합니다.
예시
영맥이 , 플레이어 1이 , 플레이어 2가 에서 시작하는 예시입니다.
두 플레이어 모두 다음 초기 입력을 받습니다.
INIT 2 4 4 3 4 5
플레이어 1은 READY FIRST, 플레이어 2는 READY SECOND를 받고 각각 OK를 출력합니다.
첫 턴의 입력과 출력은 다음과 같습니다.
플레이어 1:
TURN 999 1 4 3 10 0 4 5 10 0 0 0
1 U 2 R
플레이어 2:
TURN 999 1 4 3 10 0 4 5 10 0 0 0
1 U 2 L
양쪽 모두 위로 이동한 뒤 서로를 찌릅니다. 피해량이 같아 체력은 모두 이며, 위치는 각각 과 가 됩니다.
두 번째 턴의 입력에는 직전 상대 행동이 포함됩니다.
플레이어 1:
TURN 994 2 3 3 10 0 3 5 10 0 1 U 2 L
1 U 0
플레이어 2:
TURN 992 2 3 3 10 0 3 5 10 0 1 U 2 R
1 U 0
이번 턴의 찌르기 쿨다운은 양쪽 모두 입니다. 두 행동을 처리하면 위치는 각각 과 가 됩니다.
대기
