거짓말 쟁이의 주사위 는 매우 간단한 주사위 게임입니다. 몇 가지 다른 규칙을 보았지만 가장 익숙한 버전은 다음과 같습니다.
- 각 플레이어는 5d6으로 시작합니다
- 라운드가 끝날 때 주사위를 계산할 때를 제외하고, 각 플레이어는 자신의 주사위를 볼 수 있지만 상대방의 주사위는 볼 수 없습니다
- 주어진 라운드가 시작될 때 모든 플레이어는 현재 가지고있는 주사위를 굴립니다.
- 그런 다음 한 명의 플레이어 (일반적으로 이것은 이전 라운드의 승자이거나 마지막으로 시작한 플레이어의 왼쪽에있는 플레이어입니다. 우리는이 KotH에 대해 이전 플레이어를 사용합니다. 임의의 플레이어가 첫 번째 라운드를 시작 함) 테이블에 몇 개의 특정 숫자가 있는지 추측합니다 (ONES ARE WILD)
- 매번 더 높게 올라가는 입찰은 계속 오른쪽으로 진행됩니다 (예 : 3 5, 3 6, 4 2는 모두 3 4보다 높지만 3 3은 그렇지 않습니다. 4 1도 높지만 1에 입찰하면 아마 불리); 플레이어가 거짓말 쟁이 앞에있는 플레이어를 호출 할 때까지
- 이 시점에서 모든 플레이어는 주사위를 공개하고 테이블에서 마지막으로 입찰 한 숫자를 세어 본다
- 총액이 입찰액보다 낮은 경우 입찰을 한 플레이어는 거짓말 쟁이라고하는 플레이어에게 주사위를 주어야합니다. 그렇지 않으면 입찰자를 거짓말 쟁이라고하는 플레이어는 입찰자에게 주사위를 주어야합니다 (따라서 입찰자가 승리합니다) 그들이 입찰 한 것 보다 최소한 그 수만큼 많으면 정확한 숫자 일 필요는 없습니다.)
- 주사위가 다 떨어지면
- 마지막 플레이어가 승리합니다
예를 들면 다음과 같습니다.
1 번 선수는 1,1,2,4,6 2 번 선수는 1,2,2,3,5 3 번 선수는 1,3,3,4,6 1 번 선수 : 3 명. 2 번 선수 : 4 대 2 플레이어 3 : 4 3 플레이어 1 : 5 2 선수 2 : 여섯 둘. 3 번 선수 : 6시 3 분. 선수 1 : 육십. 두 번째 선수 : 거짓말 쟁이! 그들은 자신의 주사위를 공개하고 하나 (사나운 것이기 때문에)와 4를 세어줍니다. 실제로 정확히 6-4가 있음이 밝혀졌습니다. 따라서 2 번 선수는 1 번 선수에게 주사위를줍니다. 그들은 다시 롤을하고 플레이어는 다음 라운드를 시작합니다.
이 게임을하려면 봇을 작성해야합니다. 다음 추상 Java 클래스를 구현해야합니다.
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- 입찰 방법을 구현해야합니다
- 첫 번째 인수는 턴 순서에서 봇의 현재 위치이고, 두 번째 인수는 현재 각 플레이어 (자신 포함)의 주사위 수를 나타내는 배열이고, 세 번째는 현재 자신의 주사위에 표시된 값을 보여주는 배열입니다. 현재 라운드가 시작된 이후에 이루어진 모든 입찰 배열-라운드의 첫 번째 입찰을하는 경우 길이는 0입니다.
- 출력은 "number face"형식의 문자열이거나 "Liar!"문자열이어야합니다. 이전 입찰자를 거짓말 쟁이라고 부릅니다.
- 출력 형식이 잘못되면 제거됩니다.
- toString 메소드를 대체 할 수 있지만 필수는 아닙니다. 그러나 컨트롤러 출력의 가독성을 방해하는 방식으로 편집 할 수 없습니다.
- 컨트롤러의 다른 공용 메소드는 호출 할 수 있지만 기본 메소드는 호출 할 수 없습니다 .
- 봇 자신의 접두사가 붙은 실행중인 디렉토리의 파일 만 읽고 편집 할 수 있습니다
- 다른 출처에서 정보를 입수 할 수 없습니다
- 인스턴스 변수는 새로운 게임이 시작될 때마다 재설정되지만 정적 변수는 재설정되지 않습니다.
채점
- 봇이 추가 될 때마다 (3 개 이상의 봇이 제출 되 자마자) 1,000 개의 게임 세트가 시뮬레이션되며 컨트롤러 소스 (어떤 게임에서든 각 턴이 시작될 때마다 1, 주사위를 capture 때마다 10, 승리하면 1,000의 보너스를 얻습니다). 각 게임에 5,000 턴 (라운드 아님)의 제한을 시행합니다.
- 봇은 최신 게임 세트의 점수로 점수가 매겨집니다. 음수가 아닌 경우 투표 점수의 10 배를 더한 값입니다. (후자는 점수에 큰 영향을 미치지 않을 것입니다)
2015-06-19 기준 점수 :
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
diceEachPlayerHas[yourId]
= 당신의 주사위 수이고 bids[yourId]
첫 번째 입찰입니다 (또는 첫 번째 턴이면 null입니다). 그 맞습니까?