Introducción
Estás varado en una isla desierta con algunos sirvientes y estás buscando tesoros. Cuanto más se busca, más tesoros se encuentran. Cuantas menos personas buscan, más encuentra cada persona.
Debido a los suministros limitados, el líder ha decidido que algunas personas, hasta una cuarta parte del grupo, se dejarán morir cada noche. Ha decidido no decirle a nadie exactamente cuántas personas morirán en un día determinado antes de tiempo.
Tienes el control de un pequeño grupo de 5 personas, que se aventurarán a salir del campamento para encontrar un tesoro para ti.
Objetivo
El objetivo de esta competencia es acumular la mayor cantidad de tesoros posible. Cada vez que tus sirvientes no intenten regresar al campamento, encontrarán una cierta cantidad de tesoros. Tus sirvientes pueden regresar al campamento en diferentes momentos.
En cada turno que un trabajador se queda fuera para buscar tesoros, el trabajador encuentra 1+Rpiezas de tesoros, donde Restá el número de trabajadores (de todos los bots) que ya están en el campamento. Los bots muertos no tienen en cuenta este cálculo.
Al comienzo de cada día, se elegirá un número aleatorio ( n) de 2a max(3, floor(num_live_players/4)). (Para 10 jugadores en el día 1, esto es 2para max(3,50/4)=12. Para 20 jugadores en el día 1, esto sería 2para max(3,100/4)=25.) Este número representa el número de jugadores que se dejarán morir ese día, y no serán entregados a su programa. .
Si un sirviente es una de las últimas npersonas en regresar, él / ella morirá y no podrá transferir el tesoro que encontró a su posesión. Además, el sirviente no podrá participar en la búsqueda del tesoro por el resto de la aventura.
Su puntaje final es la cantidad promedio de tesoro que obtuvo por aventura (ejecución del controlador).
Si más personas intentan regresar al campamento en el mismo turno que las franjas horarias abiertas, los números aleatorios determinarán quién entra y quién muere.
Un día en esta isla desde el amanecer hasta el atardecer dura 30 turnos. Como hay muchos animales peligrosos por la noche, no regresar al atardecer significa que no se le permitirá ingresar al campamento.
De entrada y salida
Su programa debe ejecutarse durante toda la simulación.
Al comienzo de la simulación, INDEX Ise ingresará, donde Iestá el índice de su bot (este índice se cuenta desde 1 hacia arriba).
Al comienzo de cada día, START_DAY D/Nse ingresará a su programa, donde Destá el número de día (a partir de 1), y Nes igual a max(3, floor(num_live_players/4)), que es el número máximo de personas que pueden morir en ese día en particular.
Al comienzo de cada turno, START_TURN Tse ingresará a su programa, donde se Tencuentra el número de turno (a partir de 1).
Una vez que su programa recibe esto, debe responder con una lista de los movimientos de sus servidores, cada uno separado por una coma.
Los movimientos válidos son:
R: Intenta volver al campamento.S: Sigue buscando tesoros.N: El sirviente ya está muerto o en el campamento.
Ingresar un movimiento no válido se interpretará como Ssi el bot estuviera vivo y no en el campamento, y de lo Ncontrario.
Al final de cada turno, se pasará una cadena a su programa:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
donde los movimientos de los sirvientes de cada bot están separados por comas.
Estos movimientos serán uno de los siguientes:
R: Con éxito regresó al campamento ese turno.r: No se pudo regresar al campamento ese turno.S: Todavía estoy buscando tesoros.D: Murió en un turno anterior.N: Ya de vuelta en el campamento.
Los bots y los servidores permanecen en el mismo orden durante toda la simulación.
Por ejemplo:
INDEX 2
....
END_TURN 8 N,N,N,N,N r,r,r,r,D D,D,D,N,R S,D,D,N,D
Aquí, usted es el segundo bot ( r,r,r,r,r), que intentó devolver los cuatro servidores que aún están vivos (y desafortunadamente fallaron en los cuatro). Los sirvientes de Bot 1 están de vuelta en el campamento. Bot 3 tiene tres sirvientes muertos, uno más en el campamento y un quinto sirviente que regresó con éxito. Bot 4 tiene un sirviente que se quedó (y morirá, ya que este es el último turno de un día), un sirviente en el campamento y tres sirvientes muertos.
Después de cada una de estas cadenas, a menos que también se haya emitido una cadena que indique el final del día (ver más abajo), su programa es generar los próximos movimientos de sus servidores, separados por comas. Todos los sirvientes deben ser contabilizados (con Nsi ya están en el campamento y Dsi ya están muertos). Los movimientos inválidos serán tratados como Ssi el sirviente no estuviera en el campamento / muerto. Ejemplo:
N,N,S,S,R
lo que significa:
Servant # | Action
1 | Do nothing.
2 | Do nothing.
3 | Stay put (keep looking for treasure).
4 | Stay put (keep looking for treasure).
5 | Try to return to camp.
Al final de un día, se pasará la siguiente secuencia después de la secuencia del último turno END, informando a todos sobre quién está vivo:
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
donde el estado es una lista separada por comas de A(vivo) o D(muerto). El día siguiente comienza inmediatamente después.
La simulación finaliza cuando hay menos de 6 servidores en vivo. Su programa recibirá la siguiente entrada al final de la simulación:
EXIT
Reglas / Detalles
- Solo en los turnos donde está tu acción
Sencontrarás tesoros. - Número de simulaciones ejecutadas: 1000 veces
- Su programa no debería tomar más de 1 segundo para determinar movimientos.
- Su programa no debe salir temprano; Se iniciará exactamente una vez.
- Asegúrese de que el búfer de salida (si corresponde) se vacía después de cada salida.
- Los archivos se pueden escribir en la carpeta de su bot (
./players/BotName/). Su nombre de bot es el nombre que le dé a su bot, con todos los caracteres no alfanuméricos eliminados y escritos en CamelCase. Las entradas pueden guardar datos entre ejecuciones del controlador, ya que las ejecuciones se realizan de forma secuencial. - Su programa debe salir después de recibir
EXIT. - Los programas que no compilan o arrojan errores o generan texto inválido (no en el formato de 5 caracteres separados por comas) pueden ser excluidos de la competencia. Una nueva línea debe seguir cada salida.
- El controlador se puede encontrar en GitHub .
Incluya el nombre del bot, idioma + versión, código y comando para compilar (si corresponde) y ejecutar su bot.
Ejemplo
El texto generado por el programa tiene el prefijo aquí con a >. Su programa no debería generar este carácter.
INDEX 2
START_DAY 1/3
START_TURN 1
>S,S,S,S,S
END_TURN 1 S,R,S,S,S S,S,S,S,S
START_TURN 2
>S,S,S,S,S
END_TURN 2 S,N,S,R,S S,S,S,S,S
START_TURN 3
>R,R,S,S,S
END_TURN 3 R,N,R,N,R R,R,S,S,S
START_TURN 4
>N,N,S,S,S
END_TURN 4 N,N,N,N,N N,N,S,S,S
START_TURN 5
>N,N,R,R,R
END_TURN 5 N,N,N,N,N N,N,r,r,R
END_DAY 1 A,A,A,A,A A,A,D,D,A
START_DAY 2/3
START_TURN 1
>S,S,N,S,N
END_TURN 1 R,R,R,R,R S,S,D,D,N
END_DAY 2 A,A,A,A,A D,D,D,D,D
EXIT
Los puntajes para el ejemplo anterior son:
Bot# Day 1 Day 2 Total
1 10 0 10
S1 1+2 0 3
S2 0 0 0
S3 1+2 0 3
S4 1 0 1
S5 1+2 0 3
2 20 0 20
S1 1+2 0 3
S2 1+2 0 3
S3 0 0 0
S4 0 0 0
S5 1+2+3+8 0 14
Por lo tanto, el ganador es el jugador, bot 2. Tenga en cuenta que el ganador no tiene que sobrevivir hasta el final absoluto. (También tenga en cuenta que el jugador podría haber permanecido hasta el turno 30 en el día 1, ya que el campamento no estaría lleno hasta que el jugador devolviera un bot más).
Puntuaciones
Bot Score
Bob 2939.422
Statisticians 2905.833
Morning Birds 1652.325
Evolved 1578.285
Slow Returners 1224.318
Wandering Fools 1065.908
Randomizers 735.313
Drunkards 0
Plague 0
Los registros están disponibles en GitHub . Los resultados de cada prueba están disponibles en esta hoja de cálculo de Google .