NOTA : ¡El ganador de esta competencia es Jack ! No se aceptarán más presentaciones.
Aquí está la sala de chat para este desafío del rey de la colina . Este es el primero, ¡así que estoy abierto a sugerencias!
Reaper es un concepto de juego desarrollado por el Arte de la resolución de problemas que implica paciencia y codicia. Después de modificar el juego para que se ajuste a un concurso de estilo KOTH (Gracias a @NathanMerrill y @dzaima por sus sugerencias y mejoras), este es el desafío.
El juego funciona de la siguiente manera: tenemos un valor conocido como Reap que se multiplica por una constante dada en cada tic. Después de cada tick, cada bot tiene la opción de "cosechar", lo que significa agregar el valor actual de Reap a la puntuación de uno y reducir Reap a 1.
Sin embargo, hay un número fijo de ticks que un bot debe esperar entre "cosechas" y un número fijo de puntos necesarios para ganar el juego.
¿Suficientemente simple? Aquí están sus entradas:
I / O
Debe escribir una función en Python 3 que tome 3 entradas. El primero es self
, usado para hacer referencia a objetos de clase (mostrados más adelante). El segundo es el Reap
valor actual de la cosecha que ganaría si fuera a "cosechar". El tercero es prevReap
una lista de los bots que cosecharon durante el tic anterior.
Otros objetos a los que puede acceder en su función:
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.
Usted DEBE no editar cualquiera de los contenidos de estos objetos, a excepción de self.obj
.
Debe generar resultados 1
para cosechar, y cualquier otra cosa (o nada) para no cosechar. Tenga en cuenta que si cosecha cuando no ha esperado suficientes tics, ignoraré el hecho de que ha elegido cosechar.
Reglas
Los parámetros que utilizaré son winning_score=10000
, multiplier=1.6-(1.2/(1+sqrt(x)))
, waittime = floor(1.5*x)
donde x
es el número de los robots en el KOTH.
- El juego termina cuando un jugador (o múltiples) alcanza el puntaje ganador.
- Cuando varios bots piden cosechar a la vez, se les da prioridad a los bots que han esperado más tiempo (en caso de empate, los bots que han esperado el tiempo máximo tienen permitido cosechar y ganar puntos en el Reap)
- Su bot no debe tomar más de 100 ms en promedio en 5 ticks.
- Si quieres importar bibliotecas, ¡pregunta! Intentaré agregar cualquier biblioteca que pueda ejecutar en mi versión de escritorio de Python (las matemáticas ya están importadas: siéntase libre de usarlo)
- Todas las lagunas estándar para KoTH, como los bot duplicados, los bots de 1 en 1, etc., están igualmente prohibidos.
- Cualquier bot que use algún tipo de aleatoriedad debe usar la
getRandom
función que he proporcionado.
Puede encontrar el controlador en el enlace TIO a continuación. Para usarlo, agregue el nombre de su función BotList
como una cadena y luego agregue la función al código. Modifique multiplier
para cambiar lo que el Reap se multiplica por cada tic, modifique winning_score
para cambiar qué puntaje es necesario para finalizar el juego, y modifique waittime
para cambiar el número de ticks a esperar entre las cosechas.
Para su comodidad, aquí hay algunos bots de muestra (y bastante tontos). No se permitirán enviar bots similares a estos. Sin embargo, demuestran cómo funciona el controlador.
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 aquellos interesados, aquí está el controlador con las 15 presentaciones incorporadas: Pruébelo en línea
RESULTADOS FINALES
¡WOO ESTÁN FINALMENTE AQUÍ! Verifique el enlace TIO arriba para ver qué código usé para generar la clasificación final. Los resultados no son terriblemente interesantes. Durante las 1000 carreras que hice con diferentes semillas aleatorias, los resultados fueron
1000 wins - Jack
0 wins - everyone else
¡Felicitaciones al ganador de Bounty Jack! (también conocido como @Renzeee)
len(BotList)
?
25
bots en juego. Sin embargo, primero esperaré un poco para ver los bots de otras personas. Rushabh Mehta , ¿habrá una fecha límite / fecha final cuando se ejecutarán todos los bots y se determinará un ganador?