En el futuro, cuando el viaje en el tiempo (abreviado como TT) sea común, el lanzamiento de monedas se convertirá en un deporte mental serio. Para prepararnos para el futuro, creamos una competencia para programas en los que viajar en el tiempo realmente sucederá desde los puntos de vista de las entradas.
La competencia es un King of the Hill de round-robin que consiste en partidos de lanzamiento de monedas entre clases Java.
Reglas del partido de lanzamiento de monedas
- Hay dos jugadores y 100 rondas.
- En cada ronda se lanza una moneda y, según el resultado, uno de los jugadores obtiene 1 punto. Cada jugador tiene un 50% de posibilidades de ganar un punto.
- Después del lanzamiento, ambos jugadores tienen la oportunidad de controlar el tiempo tirando de las palancas.
- Si tira de una palanca azul (revertir el tope) no es posible TT a la vuelta que se utilizó la palanca o cualquier vuelta anterior. El intento de TT de ir a estas rondas no tendrá efecto.
- Si tira de una palanca roja (reverter) , intenta revertir el tiempo a una ronda anterior. Si tiene éxito, la memoria del oponente se revertirá. a su memoria antes de la ronda elegida y los resultados del lanzamiento de la moneda a partir de la ronda elegida también se eliminarán . El único signo posible para tu oponente sobre el TT será el número de palancas no utilizadas que no se revertirán.
- Cada jugador tiene 5 palancas azules y 20 rojas sin usar al comienzo del partido. Estas palancas no se ven afectadas por los TT.
- Si no ocurre un TT al final de una ronda número 100, el juego termina y gana el jugador con el puntaje más alto.
Detalles
- Las rondas tienen una indexación basada en 1 (forma 1 a 100).
- Antes de la ronda
x
, se le proporciona el número de palancas azules y rojas disponibles, los resultados del lanzamiento de la moneda hasta el turnox
(inclusive) y el recuerdo de su (último)x-1
ronda. - Al tirar de una palanca azul en la ronda, se
x
detiene cualquier TT que tenga un destino en la rondax
o antes (bloquea un TT si sucede en la misma ronda exacta también). - Volver a la ronda
x
significa que la próxima ronda será redondax
. - Si ambos jugadores eligen revertir al final de una ronda, el tiempo se revierte al destino anterior que no está bloqueado. Los jugadores que intentaron volver a este tiempo mantendrán su memoria.
Detalles técnicos
- Debería escribir una clase Java implementando la interfaz Bot proporcionada.
- Agrega tu bot al proyecto.
- Agregue una instancia de su Bot al
Bot
archivoController.java
. - Su clase no debe guardar información entre llamadas . (En la mayoría de los casos, tener solo
final
variables fuera de las funciones satisface este requisito). - Puede proporcionar información al controlador en el
memory
campo de suAction
objeto devuelto . Esto se le devolverá en el próximo turno si no sucedió TT. Si ocurre un TT, recibirá la memoria anterior correspondiente. - Puede usar el
totalScore()
método de laGame
clase para obtener la puntuación de una cadena de historial.
Protocolo
En cada turno
takeTurn(...)
se llama a su método con 5 argumentos:- la cantidad de palancas azules no utilizadas
- la cantidad de palancas rojas no utilizadas
- el historial de lanzamiento de monedas, una cadena que consiste en 1 y 0 que marcan sus ganancias y pérdidas en las rondas anteriores. El primer personaje corresponde al primer lanzamiento de moneda. (En la primera ronda, la longitud de la cuerda será
1
). - una cadena, su memoria almacenada de la ronda anterior
- el índice basado en 1 de esta ronda
En cada giro, su método devuelve un
Action
objeto que contieneun número entero en el
move
campo que describe su acción:0
para ninguna acción-1
tirar de una palanca azul y bloquear los TT que pasan por esta ronda- un entero positivo
x
, no mayor que la ronda actual, para tirar de una palanca roja e intentar volver a la rondax
- Los enteros no válidos se tratan como
0
.
una cadena que contiene su memoria de esta ronda que desea conservar. Tenga en cuenta que almacenar memoria no es una parte crucial del desafío . Puede realizar buenas entradas sin almacenar datos útiles en la cadena. En la primera ronda, la cadena será una cadena vacía.
Su método no debería demorar más de 10 ms por ronda en promedio en un partido.
- El incumplimiento regular del límite de tiempo resulta en la descalificación.
Puntuación
- Ganar un partido gana 2 puntos y un empate gana 1 punto para ambos jugadores. La pérdida no gana puntos.
- La puntuación de un bot será el número total de puntos que recolectó.
- El número de partidos jugados entre cada par de concursantes dependerá del número de entradas y su velocidad.
Dos ejemplos simples de bots se publican como respuestas.
El controlador y los primeros Bots están disponibles aquí. .
Resultados de la prueba con bots enviados hasta el 3 de noviembre .:
Puntajes totales:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(El controlador se basa en el controlador del desafío Cat catcher . Gracias por @flawr que lo proporciona como base para este.)
Bonificación: una bonita película de 6 minutos basada en un concepto similar.
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.
¿Qué es "pasar por una ronda"?