참고 :이 대회의 우승자는 Jack !!!입니다. 더 이상 제출이 접수되지 않습니다.
이 왕의 도전을 위한 대화방이 여기 있습니다. 이것은 나의 첫 번째이므로 제안에 개방적입니다!
Reaper는 Art of Problem Solving에서 개발 한 게임 컨셉으로 인내심과 탐욕을 포함합니다. KOTH 스타일 콘테스트에 맞게 게임을 수정 한 후 (제안과 개선을 위해 @NathanMerrill과 @dzaima에게 감사드립니다) 도전은 다음과 같습니다.
이 게임은 다음과 같이 작동합니다. 우리는 Reap으로 알려진 값을 매 틱마다 주어진 상수로 곱합니다. 각 틱 후, 각 봇에는 "리핑"옵션이 있습니다. 즉, 현재 Reap 값을 점수에 더하고 Reap을 1로 줄입니다.
그러나 봇이 "리프"사이에서 기다려야하는 고정 된 틱 수와 게임에서 승리하기 위해 필요한 고정 된 수의 포인트가 있습니다.
충분히 간단합니까? 입력 내용은 다음과 같습니다.
I / O
파이썬 3에서 3 개의 입력을받는 함수를 작성해야합니다. 첫 번째는 self
클래스 객체를 참조하는 데 사용됩니다 (나중에 표시). 두 번째는, Reap
"수거"할 경우 얻을 수있는 현재 수확량입니다. 세 번째는 prevReap
이전 진드기 동안 거둔 봇 목록입니다.
함수에서 액세스 할 수있는 다른 객체 :
self.obj: An object for your use to store information between ticks.
self.mult: The multiplier that Reap is multiplied by each tick
self.win: The score you need to win
self.points: Your current set of points
self.waittime: The amount of ticks that you must wait between reaps during the game
self.time: The number of ticks since your last reap
self.lenBots: The number of bots (including you) in the game.
self.getRandom(): Use to produce a random number between 0 and 1.
를 제외하고 이러한 객체의 내용을 편집 해서는 안됩니다 self.obj
.
1
수확 하려면 출력해야 하고 수확하지 않으려면 그 밖의 다른 것 (또는 아무것도없는 것)을 출력해야합니다 . 진드기를 충분히 기다리지 않았을 때 수확하면 수확하기로 선택한 사실을 무시합니다.
규칙
내가 사용됩니다 매개 변수는 winning_score=10000
, multiplier=1.6-(1.2/(1+sqrt(x)))
, waittime = floor(1.5*x)
어디 x
KOTH에서 봇의 수입니다.
- 플레이어 (또는 복수)가 승리 점수에 도달하면 게임이 종료됩니다.
- 여러 봇이 한 번에 수확을 요청하면 더 오래 기다린 봇에 우선 순위가 부여됩니다 (동점의 경우 최대 시간을 기다린 봇은 모두 수확 할 수 있으며 Reap에서 점수를 얻습니다)
- 봇은 5 틱에 걸쳐 평균 100ms를 넘지 않아야합니다.
- 라이브러리를 가져 오려면 물어보십시오! 데스크톱 버전의 Python에서 실행할 수있는 라이브러리를 추가하려고합니다 (수학은 이미 가져 왔습니다 : 자유롭게 사용하십시오)
- 중복 봇, 1- 업 봇 등과 같은 KoTH의 모든 표준 허점은 유사하게 금지됩니다.
- 임의의 종류의 임의성을 사용하는 모든 봇은
getRandom
내가 제공 한 기능을 사용해야합니다 .
아래의 TIO 링크에서 컨트롤러를 찾을 수 있습니다. 사용하려면 함수 이름을 BotList
문자열로 추가 한 다음 함수를 코드에 추가하십시오. 수정 multiplier
, 수정 무엇 각 틱을 곱 심 변경할 winning_score
게임을 종료 할 필요가 점수 무엇을 변경, 수정 waittime
거둔다 사이에 대기 틱의 수를 변경할 수 있습니다.
귀하의 편의를 위해 다음은 샘플 봇입니다. 이와 유사한 봇을 제출하는 것은 허용되지 않습니다. 그러나 컨트롤러 작동 방식을 보여줍니다.
def Greedybot(self,Reap, prevReap):
return 1
def Randombot(self,Reap, prevReap):
if self.obj == None:
self.obj=[]
self.obj.append(prevReap)
if self.getRandom()>0.5:
return 1
관심있는 분들을 위해 15 개의 제출물이 내장 된 컨트롤러는 다음과 같습니다. 온라인 사용해보기
최종 결과
우와 그들은 마침내 여기에 있습니다! 최종 순위를 생성하는 데 사용한 코드를 확인하려면 위의 TIO 링크를 확인하십시오. 결과는별로 흥미롭지 않습니다. 다른 무작위 씨앗으로 1000 회 이상 실행 한 결과는
1000 wins - Jack
0 wins - everyone else
바운티 수상자 Jack에게 축하드립니다! (일명 @ 렌제)
len(BotList)
있습니까?
25
있습니다. 그러나 먼저 다른 사람들의 봇을 보자. Rushabh Mehta , 모든 봇이 운영되고 승자가 결정될 때 마감일 / 마지막 날짜가 있습니까?