7 월의 크리스마스이기 때문에 가상의 흰 코끼리 선물 교환보다 축하하는 더 좋은 방법!
이 King of the Hill 도전을 위해서는 화이트 엘리펀트 교환 시뮬레이션 에서 플레이하는 봇을 만들어야합니다 .
게임 규칙
- 게임은 여러 차례에 걸쳐 진행되며, 각 라운드는 가변 회전 수로 구성됩니다.
- 라운드 설정 : 게임에 플레이어가있는 수만큼의 선물이 있으며, 각각의 값은 [0 ... 1) 범위 내에서 무작위로 균일하게 평가되며,이 값은 현재가 열릴 때까지 알 수 없습니다. 플레이어는 대기열에서 무작위 순서로 배치됩니다. 첫 번째 플레이어는 대기열의 전면에서 튀어 나옵니다.
- 플레이어의 턴인 경우, 선물을 열거 나 다른 플레이어의 현재를 훔쳐서 도난당한 플레이어에게 차례를 넘길 수 있습니다.
- 각 선물은 3 번까지 도난 당할 수 있습니다.
- 당신은 당신에게서 훔친 플레이어로부터 훔칠 수 없습니다.
- 각 플레이어는 한 번에 하나의 선물 만 가질 수 있습니다.
- 선물이 열리면 큐의 앞쪽에서 튀어 나온 다음 플레이어로 진행합니다. 아직 턴을하지 않은 다음 차례의 플레이어가됩니다.
- 라운드 엔드 : 모든 선물이 열리면 라운드가 끝나고 각 플레이어가 보유한 현재 값이 해당 플레이어의 점수에 추가됩니다. 각 플레이어는 현재 선물을 가지고 있지 않고 새로운 순서가 시작되고 새로운 라운드가 시작됩니다.
- 게임 종료 : 적어도 하나 명의 선수가 득점에있을 때 게임이 종료됩니다
100승리는 선물의 합이 높은 선수에게 수여와 함께, 500 점.
코딩
모든 제출물은 Python 3.7과 호환되어야합니다. 에서 직접 상속되는 클래스를 작성해야합니다 WhiteElephantBot
. 예를 들어 :
class FooBot(WhiteElephantBot):
# Your implementation here
bot 클래스에서를 호출해야하는 __init__
메소드 (한 개의 인수를 취함)를 제공 할 수 있습니다 . 클래스 에는 다음 순서로 다음과 같은 인수를 예상 하는 메소드 가 있어야합니다 .name
super().__init__(name)
take_turn
players
: 아직 선물이없는 모든 플레이어의 플레이어 이름 목록입니다.presents
: 플레이어 이름을 해당 플레이어가 보유한 현재 값과 현재 도난 횟수가 포함 된 2 개의 튜플에 매핑하는 사전입니다. 여기에는 현재 선물을 들고있는 다른 플레이어 만 포함됩니다.just_stole
: 마지막으로 취한 행동이 도둑질 이었다면, 방금 훔친 플레이어의 이름이됩니다. 그렇지 않으면None
입니다.
각 인수는 변경 불가능하거나 새로운 객체이므로이를 변경하면 게임에 영향을 미치지 않습니다. 원하는 경우 모든 주장의 사본을 보관할 수 있습니다.
에 대한 예제 값 presents
:
{
'Alice': (0.35, 0),
'Bob': (0.81, 2),
'Charlie': (0.57, 1)
}
당신의 take_turn
방법은 당신이 훔치거나 None
선물을 열 플레이어의 이름을 반환해야합니다 . 예외가 발생 str
하거나 또는 이외의 것을 반환 하거나 None
도용 할 수없는 플레이어의 이름이 있으면 기본적으로 선물을 엽니 다.
생성자는 각 라운드의 시작 부분에서 호출되므로 라운드에서 라운드까지의 상태를 기억할 수 없습니다.
에서 상속을 받으면 선물을 받아 훔칠 수있는 플레이어 이름 목록을 반환하는 방법에 WhiteElephantBot
액세스 할 수 있습니다.steal_targets
just_stole
스크립트가 필요한 모든 모듈은 항목 상단에 가져와야합니다.
테스트 드라이버
테스트 드라이버는 여기 에서 찾을 수 있습니다 . from white_elephant import WhiteElephantBot
게시 된 답변 에 포함 할 필요는 없지만 로컬 모듈이 그렇게해야합니다.
기준 경쟁사
- 랜덤 : 새로운 선물을 열거 나 훔칠 지 여부를 무작위로 선택합니다.
- 욕심 : 도난 당할 수있는 가장 소중한 선물을 훔칩니다. 선물을 도난 당할 수 없으면 선물을여십시오.
- Nice : 항상 새로운 선물을 엽니 다. 도둑질하지 마십시오.
추가 규칙
- 모든 예외를 잡는 것은 귀하의 책임입니다. 수업에서 예외를 잡지 못하면 실격 처리됩니다. 또한 KeyboardInterrupts를 놓치지 마십시오.
- 게임간에 상태를 저장할 수 없다는 것을 우회하기 위해 파일이나 다른 방법을 사용하지 마십시오. 예를 들어 신경 네트워크 상태를 실행 중 파일에 저장할 수 없습니다.
- 봇은 클래스 코드 및 관련 상수 내에 자체적으로 포함되어야합니다.
- 표준 라이브러리 가져 오기만 사용할 수 있습니다.
- 엄격한 성능 요구 사항은 없습니다. 합리적이고 신중해야합니다. 성능이 문제가되면 제한 시간을 추가 할 권리가 있습니다.
한 사람당 한 항목.하나 이상의 출품작을 제출하면 봇이 함께 작동하지 않을 수 있습니다. 지금은 1 인당 여러 항목을 허용 할 예정이지만 문제가 될 경우 나중에 다시 금지 할 수 있습니다.- 이것은 종료 날짜가없는 공개 경쟁입니다. 중요한 변경 사항이있을 때 가능하면 언제든지 다시 실행됩니다.
EDIT1 : 순위가 더 일관되도록 우승 점수를 100에서 500으로 변경했습니다. 테스트 드라이버에는 새로운 버그 수정이 있으며 승리 점수 변경 사항도 반영합니다.
EDIT2 : 필요한 가져 오기에 대한 설명이 명확합니다.
리더 보드 (2018 년 8 월 8 일 현재)
- 샘플 봇 (500.093)
- LastMinuteBot (486.163)
- 로빈 후드 (463.160)
- OddTodd (448.825)
- 욕심 봇 (438.520)
- SecondPlaceBot (430.598)
- 임계 값 봇 (390.480)
- 도박꾼 (313.362)
- 니스 봇 (275.536)
- 랜덤 봇 (256.172)
- 선한 사마리아인 (136.298)