미래에 Time Travel (약칭 TT)이 일반적 일 때 코인 던지기는 심각한 정신 스포츠가 될 것입니다. 미래를 준비하기 위해 우리는 입장의 관점에서 시간 여행이 실제로 일어날 프로그램에 대한 경쟁을 만듭니다.
경쟁은 라운드 로빈 스타일의 King of the Hill로 Java 클래스 간의 동전 던지기 경기로 구성됩니다.
동전 던지기 경기 규칙
- 두 선수와 100 라운드가 있습니다.
- 매 라운드마다 동전이 던져지고 그 결과에 따라 플레이어 중 하나가 1 점을 얻습니다. 각 플레이어는 50 %의 확률로 점수를 얻습니다.
- 던지기 후 두 선수 모두 레버를 당겨 시간을 제어 할 수 있습니다.
- 당신이 당겨 경우 파란색 레버 (되돌리기 스토퍼를) 더 TT는 이전 라운드 더 이상 레버가 사용 된 원형 또는 어느 불가능합니다. TT가이 라운드에 가려고해도 효과가 없습니다.
- 빨간색 레버 (리 버터) 를 당기면 시간을 이전 라운드로 되돌립니다. 성공한 경우 , 선택한 라운드 전에 상대의 메모리가 메모리로 되돌아 가고 선택한 라운드 에서 시작한 동전 던지기 결과도 삭제됩니다 . 상대에게 TT에 대한 유일한 표시는 되돌릴 수없는 사용되지 않은 레버의 수입니다.
- 각 플레이어는 경기 시작시 5 개의 파란색 레버와 20 개의 빨간색 미사용 레버를 가지고 있습니다. 이 레버는 TT의 영향을받지 않습니다.
- 100 라운드가 끝날 때 TT가 발생하지 않으면 게임이 종료되고 더 높은 점수를 얻은 플레이어가 승리합니다.
세부
- 라운드는 1 기반 색인 (양식 1 ~ 100)을 갖습니다.
- 라운드하기 전에
x
사용 가능한 파란색과 빨간색 레버의 수가 제공되며, 동전은 턴x
(포함) 및 마지막x-1
라운드 의 메모리 까지 결과를 던집니다 . - 파란색 레버를 둥글게 당기면
x
라운드x
또는 그 이전에 목적지가있는 TT가 중지됩니다 (동일한 정확한 라운드에서도 TT가 발생하면 TT가 차단됨). - 라운드로 되 돌리면
x
다음 라운드가 라운드x
됩니다. - 두 선수가 라운드 종료시 되돌리기를 선택하면 시간이 차단되지 않은 이전 목적지로 되돌아갑니다. 이 시점으로 되돌리려 고 시도한 플레이어는 기억을 유지합니다.
기술적 세부 사항
- 제공된 Bot 인터페이스를 구현하는 Java 클래스를 작성해야합니다.
- 봇을 프로젝트에 추가하십시오.
Bot
파일에 Bot 인스턴스를 추가 합니다Controller.java
.- 수업 중에는 통화간에 정보를 보관 해서는 안됩니다 . (대부분의 경우
final
함수 외부에 변수 만있는 경우이 요구 사항을 충족합니다.) memory
반환 된Action
객체 의 필드 에서 컨트롤러에 정보를 제공 할 수 있습니다 . TT가 발생하지 않은 경우 다음 차례에 귀하에게 다시 제공됩니다. TT가 발생하면 해당하는 이전 메모리를 받게됩니다.- 클래스 의
totalScore()
메소드를 사용하여Game
히스토리 문자열의 점수를 얻을 수 있습니다 .
실험 계획안
매번 당신의
takeTurn(...)
메소드는 5 개의 인자로 호출됩니다 :- 사용되지 않은 파란색 레버의 수
- 사용하지 않은 빨간색 레버의 수
- 동전 던지기 기록, 1과 0으로 구성된 문자열은 이전 라운드에서 승리와 손실을 표시합니다. 첫 번째 문자는 첫 번째 동전 던지기에 해당합니다. (첫 번째 라운드에서 문자열의 길이는입니다
1
.) - 문자열, 이전 라운드의 저장된 메모리
- 이 라운드의 1 기반 인덱스
매번 메서드는 다음을
Action
포함 하는 객체를 반환합니다.move
조치를 설명 하는 필드 의 정수 :0
행동하지 않기 위해-1
파란색 레버를 당기고 TT가이 라운드를 통과하는 것을 차단합니다.x
현재 레버보다 크지 않은 양의 정수로 , 빨간색 레버를 당기고 다시 라운드로 되돌리려 고합니다.x
- 유효하지 않은 정수는로 취급됩니다
0
.
이 라운드의 메모리를 유지하고 싶은 문자열. 참고 메모리에 저장하는 것이 중요한 과제의 일부가 아니다 . 문자열에 유용한 데이터를 저장하지 않고 올바른 항목을 만들 수 있습니다. 첫 번째 라운드에서 문자열은 빈 문자열입니다.
매치에서 평균 라운드 당 10ms를 넘지 않아야합니다.
- 시간 제한을 정기적으로 실패하면 실격 처리됩니다.
채점
- 한 경기에서 승리하면 두 선수 모두 2 점을 얻습니다. 손실은 포인트를 얻지 못합니다.
- 봇의 점수는 수집 한 총 점수입니다.
- 각 참가자 쌍 사이의 경기 수는 참가 횟수와 속도에 따라 다릅니다.
두 개의 간단한 예제 봇이 답변으로 게시됩니다.
컨트롤러와 첫 번째 커플 봇은 여기에서 사용할 수 있습니다 .
11 월 3 일까지 제출 된 봇으로 테스트 결과 :
총점 :
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(컨트롤러는 Cat catcher challenge 컨트롤러를 기반으로합니다 . @flawr가이를 기본으로 제공합니다.)
보너스 : 비슷한 개념을 기반으로 한 멋진 6 분짜리 영화 .
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
"라운드 통과"는 무엇입니까?