버섯 게임을 끝낸 예티와 핑크빈은 이제 그란디스로 넘어와, 럭키 다이스 스킬을 쓰며 주사위를 던지던 과거를 회상하며 Yacht Auction이라는 보드게임을 하기로 했습니다.
입찰 단계는 다음과 같이 진행됩니다.
가지고 있는 주사위 개(단, 마지막 점수 획득 단계에서는 개)의 주사위 중 원하는 주사위를 개 선택합니다. 이후, 다음 점수 규칙중 하나를 정해서 점수를 얻습니다. 한 경기에서 한 종류의 점수 규칙은 최대 한 번만 사용할 수 있습니다.
ONE
: 점TWO
: 점THREE
: 점FOUR
: 점FIVE
: 점SIX
: 점또한, 기본 점수 규칙에서 점 이상을 얻은 경우 보너스 점수 점을 추가로 얻게 됩니다.
CHOICE
: 점FOUR_OF_A_KIND
: 같은 수가 적힌 주사위가 개 있다면, 점. 없을 경우 점FULL_HOUSE
: 개의 주사위에 적힌 수가 서로 같고, 다른 개의 주사위에 적힌 수도 서로 같으면 점, 아닐 경우 점SMALL_STRAIGHT
: 개의 주사위에 적힌 수가 중 하나로 연속되어 있을 때, 점, 아닐 경우 점LARGE_STRAIGHT
: 개의 주사위에 적힌 수가 중 하나로 연속되어 있을 때, 점, 아닐 경우 점YACHT
: 개의 주사위에 적힌 수가 모두 같을 때 점, 아닐 경우 점모든 라운드가 끝난 이후, 총점이 높은 사람이 승리합니다. 총점이 같다면 무승부입니다.
참가자의 프로그램은 한 줄씩 입력을 받아 각 명령에 따라 동작해야 합니다. 출력이 필요한 명령은 아래 표에서 빨간색으로 시간 제한과 함께 표시되어 있습니다. 이 시간 제한 안에 출력을 하지 못한 경우 시간 초과 (TLE) 판정을 받게 되며, 해당 게임에서 실격패 처리됩니다.
커맨드 | 입력 형식 | 설명 |
---|---|---|
READY | READY | 입력 준비 완료를 의미하는 OK 를 3초 이내에 출력해야 합니다. |
ROLL | ROLL a₁a₂a₃a₄a₅ b₁b₂b₃b₄b₅ | A그룹 주사위에 적힌 눈이 , B그룹 주사위에 적힌 눈이 임을 나타냅니다. 이후 0.5초 이내에 BID g x 를 출력해야 합니다. 이는 묶음 주사위에 점을 입찰한다는 의미입니다. 는 A 혹은 B 이며, 는 이상 이하의 정수여야 합니다. |
GET | GET g g₀ x₀ | 입찰 결과로 묶음 주사위를 가져갔음을 의미합니다. 상대는 묶음에 점을 입찰했다는 의미입니다. |
SCORE | SCORE | 점수 획득 단계를 시작한다는 의미입니다. 이후 0.5초 이내에 PUT c d₁d₂d₃d₄d₅ 를 출력해야합니다. 이는 가지고 있는 주사위 중 를 점수 규칙 를 사용해서 점수를 획득한다는 의미입니다. |
SET | SET c d₁d₂d₃d₄d₅ | 상대가 점수 획득 단계에서 가지고 있는 주사위 중 를 점수 규칙 를 사용해서 점수를 획득했다는 의미입니다. |
FINISH | FINISH | 게임 종료를 알리는 명령입니다. 이 명령을 받으면 게임 진행 상황에 관계 없이 프로그램은 즉시 정상적으로 종료되어야 하며, 출력은 필요하지 않습니다. |
모든 명령어는 한 줄에 하나씩 입출력해야 하며, 출력할 때는 개행문자를 출력한 뒤 버퍼를 flush해야 합니다. 언어별로 버퍼를 flush하는 방법에 대해서는 각 언어의 공식 레퍼런스 문서와 예제 코드를 참고해 주세요.
다음은 각 언어별로 작성한 예제코드입니다.
예제코드는 다음과 같이 동작합니다.
제출된 코드가 컴파일에 성공하면, 총 10개의 샘플 AI와 대결을 진행하게 됩니다.
각 샘플 AI와 한 번씩 대결을 치릅니다. 승패에 따른 점수는 다음과 같습니다.
배틀 번호 | 설명 | 코드 | data.bin |
---|---|---|---|
1 | 제공된 예제 코드와 같은 동작을 수행합니다. | 코드 | |
2 | 입찰 단계: 주사위 그룹의 합이 높은 쪽에 (두 그룹 주사위 합의 차) 점을 입찰합니다. 점수 획득 단계: 제일 높은 점수를 받을 수 있는 규칙과 조합을 사용합니다. | 코드 | |
3 | 입찰 단계: A와 B중 한 그룹을 골라 무작위로 점을 입찰합니다. 점수 획득 단계: 제일 높은 점수를 받을 수 있는 규칙과 조합을 사용합니다. | 코드 | |
4 | 입찰 단계: A와 B중 한 그룹을 골라 무작위로 점을 입찰합니다. 점수 획득 단계: 점수를 얻기 힘든 조합을 우선 선택합니다. | 코드 | |
5 | 입찰 단계: A와 B중 한 그룹을 골라 무작위로 점을 입찰합니다. 점수 획득 단계: 기본 점수 규칙을 우선 선택합니다. | 코드 | data |
6 | 입찰 단계: 더 좋은 조합에 수비적으로 입찰합니다. 점수 획득 단계: 기본 점수 규칙을 우선 선택합니다. | 코드 | data |
7 | 입찰 단계: 더 좋은 조합에 공격적으로 입찰합니다. 점수 획득 단계: 기본 점수 규칙을 우선 선택합니다. | 코드 | data |
8 | 입찰 단계: A와 B중 한 그룹을 골라 무작위로 점을 입찰합니다. 점수 획득 단계: 조합 점수 규칙을 우선 선택합니다. | 코드 | data |
9 | 입찰 단계: 더 좋은 조합에 수비적으로 입찰합니다. 점수 획득 단계: 조합 점수 규칙을 우선 선택합니다. | 코드 | data |
10 | 입찰 단계: 더 좋은 조합에 공격적으로 입찰합니다. 점수 획득 단계: 조합 점수 규칙을 우선 선택합니다. | 코드 | data |
샘플 AI 코드와
data.bin
파일은 실제 대회 진행 시에는 제공되지 않았습니다.
참가자가 작성한 프로그램을 테스팅하기 위한 테스팅 툴인 testing-tool-yacht
가 제공됩니다. 참가자의 환경에서 컴파일한 실행 파일 혹은 참가자의 실행 환경의 python
, java
, node
, lua
환경과 스크립트를 이용하여 로컬에서 문제를 테스트해 볼 수 있습니다.
.exe
파일을 실행합니다..dmg
파일을 더블 클릭한 이후 testing-tool-yacht
파일을 Applications
폴더에 드래그해서 복사합니다. 그 이후 testing-tool-yacht
앱을 실행합니다.apt
혹은 dpkg
을 이용해 .deb
파일을 설치한 이후 testing-tool-yacht
을 실행합니다.rpm
혹은 yum
을 이용해 .rpm
파일을 설치한 이후 testing-tool-yacht
을 실행합니다.참가자가 작성한 프로그램을 테스팅하기 위한 테스팅 툴 패키지인 testing-tool-yacht-cli.zip
(다운로드) 가 주어집니다. 자세한 내용은 파일 안에 있는 README.md
를 참고하세요.
CLI 테스팅 툴을 수정하는 것은 자유이며, 실행 방법과 관련해서는 다른 사람과 자유롭게 토론할 수 있습니다. 하지만 수정된 테스팅 툴 혹은 테스팅 툴이 출력한 로그 파일 등을 팀원 이외의 사람과 공유하거나, 이와 관해 토론해서는 안됩니다.
채점 결과에서는 테스팅 툴이 출력한 로그와 같은 형식의 로그 파일을 받아볼 수 있습니다. 단, 실제 채점 프로그램은 테스팅 툴과 다르게 구현되어 있으므로, 테스팅 툴에서의 정상 작동이 실제 채점에서의 정상 작동을 항상 의미하지는 않습니다.
샘플 AI의 대결에서 각 배틀의 로그 파일을 다운받을 수 있습니다. 로그 시각화 도구를 활용하여 게임이 어떻게 진행되었는지 살펴보고 전략을 수정하세요.
35561 15336 0
31452 33164 0
21464 46146 0
51211 45446 1
62612 34411 1
12421 36431 0
54344 36225 1
13653 32122 0
53644 61453 0
64215 15142 1
35522 44162 1
54111 55424 1
선공 입력 | 선공 출력 | 후공 입력 | 후공 출력 | 로그 |
---|---|---|---|---|
READY | OK | READY | OK | |
ROLL 35561 15336 | ROLL 35561 15336 |
| ||
BID A 123 | BID A 456 |
| ||
GET B A 456 | GET A A 123 |
| ||
ROLL 31452 33164 | ROLL 31452 33164 |
| ||
BID A 99 | BID B 11 |
| ||
GET A B 11 | GET B A 99 |
| ||
SCORE | SCORE | |||
PUT ONE 35561 | PUT THREE 13356 |
| ||
SET THREE 13356 | SET ONE 35561 | |||
(라운드 3-12 생략) | ||||
SCORE | SCORE |
| ||
PUT YACHT 12556 | PUT FULL_HOUSE 42533 |
| ||
SET FULL_HOUSE 42533 | SET YACHT 12556 | |||
FINISH | (프로그램 종료) | FINISH | (프로그램 종료) |
|
|