NOTA : O vencedor desta competição é Jack !!!. Não serão aceitas mais submissões.
Aqui está a sala de bate-papo para esse desafio do rei da colina . Este é o meu primeiro, então estou aberto a sugestões!
Reaper é um conceito de jogo desenvolvido pela Art of Problem Solving, que envolve paciência e ganância. Depois de modificar o jogo para se encaixar em um concurso de estilo KOTH (obrigado a @NathanMerrill e @dzaima por suas sugestões e melhorias), aqui está o desafio.
O jogo funciona da seguinte maneira: temos um valor conhecido como Reap que se multiplica por uma constante constante a cada tick. Após cada tick, cada bot tem a opção de "colher", o que significa adicionar o valor atual de Reap à pontuação de uma pessoa e reduzir Reap para 1.
No entanto, há um número fixo de ticks que um bot deve esperar entre as "colheitas" e um número fixo de pontos necessários para vencer o jogo.
Simples o suficiente? Aqui estão suas entradas:
I / O
Você deve escrever uma função no Python 3 que aceite 3 entradas. A primeira é self
usada para referenciar objetos de classe (mostrados mais tarde). O segundo é o Reap
valor atual do Reap que você ganharia se quisesse "colher". O terceiro é prevReap
uma lista dos bots que foram coletados durante o tick anterior.
Outros objetos que você pode acessar em sua função:
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.
Você NÃO deve editar nenhum conteúdo desses objetos, exceto self.obj
.
Você deve produzir 1
para colher e qualquer outra coisa (ou nada) para não colher. Observe que, se você colher quando não tiver esperado carrapatos suficientes, ignorarei o fato de que você escolheu colher.
Regras
Os parâmetros que serão usando são winning_score=10000
, multiplier=1.6-(1.2/(1+sqrt(x)))
, waittime = floor(1.5*x)
onde x
está o número de bots no KOTH.
- O jogo termina quando um jogador (ou vários) atinge a pontuação vencedora.
- Quando vários bots pedem para colher de uma só vez, é dada prioridade aos bots que esperaram mais tempo (em caso de empate, os bots que esperaram o tempo máximo permitidos para colher e ganhar pontos no Reap)
- Seu bot não deve demorar mais de 100 ms, em média, em 5 ticks.
- Se você deseja importar bibliotecas, pergunte! Vou tentar adicionar quaisquer bibliotecas que eu possa executar na minha versão desktop do Python (a matemática já foi importada: fique à vontade para usá-lo)
- Todas as brechas padrão para KoTHs, como bots duplicados, bots 1-up, etc., são igualmente proibidas.
- Qualquer robô que use qualquer tipo de aleatoriedade deve usar a
getRandom
função que forneci.
Você pode encontrar o controlador no link TIO abaixo. Para usá-lo, adicione o nome da sua função BotList
como uma string e adicione a função ao código. Modifique multiplier
para alterar o que o Reap é multiplicado por cada tick, modifique winning_score
para alterar a pontuação necessária para finalizar o jogo e modifique waittime
para alterar o número de ticks a esperar entre as colheitas.
Para sua conveniência, aqui estão alguns bots de amostra (e bastante tolos). Enviar bots semelhantes a estes não será permitido. No entanto, eles demonstram como o controlador funciona.
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
Para os interessados, aqui está o Controlador com as 15 submissões incorporadas: Experimente Online
RESULTADOS FINAIS
WOO ELES ESTÃO FINALMENTE AQUI! Verifique o link do TIO acima para ver qual código eu usei para gerar as classificações finais. Os resultados não são terrivelmente interessantes. Nas 1000 corridas que fiz com diferentes sementes aleatórias, os resultados foram
1000 wins - Jack
0 wins - everyone else
Parabéns ao vencedor do Bounty Jack !! (tcp @Renzeee)
len(BotList)
?
25
bots em jogo. No entanto, primeiro espere um pouco para ver os robôs de outras pessoas. Rushabh Mehta , haverá um prazo / data final em que todos os bots serão executados e um vencedor será determinado?