Esto fue inspirado por un minijuego de Minecraft. Las reglas son bastante simples: corres y saltas, y cada bloque que pisas desaparece una vez que lo pisas. El objetivo es ser el último que quede.
Tu bot debe ser un programa completo. Debe aceptar la entrada como un argumento de línea de comando. La entrada será un mapa del "mundo"; Aquí hay un ejemplo:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx x xxxxxxxxxxxxx@xxxxxxxxxxx
xxxxxx1xxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx
xxxxxxxxxxxxxxxxx x x xxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxx xxx xx3xxxxxxxxxx
xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx x
xxxxxxxxxxxxxxxxxxxxxxxxxxx xx
xxxxxxxxxxxxxxxxxxxxxxxxx 2
xxxxxxxxxxxxxxxxxxxxxxx
La leyenda es la siguiente:
x: solid block
: empty air
@: your bot
1,2,3,4,5,6,7,8,9,0: other bots
Su bot debería generar su movimiento como un par de enteros. Ejemplo: -1, 2
se moverá 1 bloque hacia la izquierda y 2 bloques hacia abajo (el origen de las coordenadas está en la esquina superior izquierda).
Puede moverse hasta cuatro cuadras, distancia de Manhattan, desde su ubicación actual. Si intenta avanzar más allá de eso, el movimiento no es válido. Cualquier movimiento que lo lleve más allá del borde lo colocará en el borde. Los movimientos inválidos serán ignorados.
Una vez que aterrizas en un bloque, se elimina; Si permaneces en el mismo bloque el próximo turno, caerás. Dos bots pueden aterrizar en el mismo bloque en el mismo turno y ambos sobreviven; Si esto sucede, ambos bots solo se verán a sí mismos y no al otro bot.
Si necesita almacenar archivos para persistencia, hágalo en una carpeta con el nombre de su bot. No puede leer los datos persistentes de otros bots si existe alguno.
El controlador de partido está disponible en https://paste.ee/p/Xf65d .
Utilice idiomas que se puedan ejecutar en una instalación estándar de Linux u OSX.
Resultados actuales (100 rondas):
JumpBot 31
LookBot 27
ShyBot 26
Slow Bot 15
KnightBot 2
Moat Builder 0
UpBot 0
Random Bot 0
fuente
Respuestas:
Bot lento (Python)
Se mueve en un patrón de línea y comprueba sus movimientos antes de hacerlos (también se suicida cuando es el último vivo para evitar largos tiempos de ejecución) Ganó 195/200 Battels en mi torneo de prueba.
No soy un experto en python y probablemente hay 100 formas de hacerlo más corto / mejor
fuente
JumpBot (C)
Intenta saltar al campo con la mayoría de los movimientos posibles en la próxima ronda.
fuente
LookBot (C)
Bot simple que es similar en rendimiento a Slow Bot, excepto que este realiza movimientos aleatorios posibles. Planee mejorar esto para PredictBot.
fuente
Constructor de fosos (Python)
Si cavo un foso a mi alrededor, nadie afuera puede fastidiarme.
... también conocido como "Píntate en un simulador de esquina 2016".
fuente
Monte (pitón)
Lo siento, ese juego de palabras solo tenía que hacerse.
De todos modos, este bot funciona haciendo un Búsqueda de árbol de Monte Carlo en todos los conjuntos de movimientos posibles. Piense en JumpBot, solo que más en profundidad.
Para ejecutarse, necesita un argumento de línea de comando adicional (puede especificarse en el controlador). Controla cuánto tiempo debe buscar el bot (en ms); Usé 750-1500 en las pruebas.
Código:
Ensayos
25 rondas:
100 rondas:
200 rondas:
Todas las simulaciones anteriores utilizaron el tiempo de búsqueda 750. Este robot probablemente sería aún mejor con un tiempo de búsqueda más largo (no sé cuál es el máximo permitido).
Mejoras
Este bot aún necesita mejoras en:
fuente
ShyBot (Python)
A este bot realmente no le gustan otros bots e intentará mantenerse alejado si es posible. ShyBot también es muy cuidadoso sobre dónde pisa; ni siquiera pisará otros bots. Sin embargo, ShyBot todavía pierde a menudo, lo que lo hace inseguro.
fuente
KnightBot (Java)
Funciona como el ajedrez, y se llama como Twitch ...
...
.........
............................lo siento...
SwirlyBot (Java)
Claramente, estas no son las soluciones óptimas, pero espero que sean útiles para las pruebas de nivel medio.
fuente
Bot aleatorio, UpBot
Dos bots iniciales para competir contra:
Bot aleatorio: un bot de ejemplo que se mueve al azar.
UpBot: un ejemplo de bot que se mueve hacia arriba.
fuente
StalkerBot (Python)
Se acercará lo más posible al bot más cercano que vea. Apunta al suicidio automático de Slow Bot (sin sentido). (Si estoy en la misma casilla y no hay otros jugadores, no me verá y se suicidará).
fuente