Es un verano seco en la pradera. Los cuatro agricultores del área se dan cuenta de que pueden arrinconar el mercado del maíz quemando los cultivos de sus vecinos. Pero necesitan una estrategia para hacerlo; ahí es donde entras tú.
Su tarea es escribir un bot para decirles a los granjeros qué quemar. El objetivo es terminar el juego con la mayor área de tierra no quemada. El campo de juego es una cuadrícula de 32x32. Cada celda puede ser una de las siguientes:
. - Ground
@ - A bot
# - Ash
W - Wet ground
1,2,3,4,5, or 6 - Fire
El fuego crece en intensidad en 1 cada turno. Una vez que sea 3 o superior, prenderá fuego a las celdas a su lado (horizontal o verticalmente). Después de que el fuego alcanza 6, se convierte en cenizas.
En cada turno, los bots reciben como STDIN lo siguiente: bot start x, bot start y, bot current x position, bot current y position, y el tablero, separados por nuevas líneas. Un ejemplo:
8
22
6
24
................................
................................
................................
.....................1..........
....................1#1.........
...................1#363........
....................16@1........
.....................31.........
................................
.........1.1....................
........15#62...................
........15@2....................
.........32.....................
................................
................................
................................
................................
................................
................................
................................
................................
................................
....4.1.........................
.....1#3........................
.....@3.........................
.....W..........................
................................
................................
................................
................................
................................
................................
(en este caso, eres el bot en la parte inferior izquierda).
Debe generar tres caracteres, con una nueva línea opcional, que represente lo siguiente:
Move - uno de L, R, U, D, or S (stay)
Acción - uno de B (burn), P (pour water) or X (do nothing)
Dirección - una de L, R, U, D or S
- controla en qué celda realiza la acción
El fuego no afecta a los bots.
El orden de giro es el siguiente: todos los bots se mueven; todos los bots realizan acciones; entonces las reglas ambientales suceden. Si vierte agua en el suelo, estará húmeda ( W
) durante una vuelta. El fuego no se extenderá al suelo mojado. Si vierte agua sobre suelo mojado, seguirá estando mojado. Si vierte agua al fuego, vuelve a la tierra normal. No puedes hacerle nada a las cenizas.
Las rondas se ejecutan con 4 bots a la vez. La ronda termina después de 50 turnos, o cuando un bot se queda sin terreno quemado, lo que ocurra primero. Su puntaje se calcula como el número de celdas de tierra o tierra húmeda en el cuadrado de 9x9 centrado en el lugar donde comenzó su bot.
Aquí hay un ejemplo de bot; elige las tres letras al azar y generalmente termina quemando sus propios campos.
RandomBurner:
#!/usr/bin/env python
import random
print random.choice('LRUDS')+random.choice('BPX')+random.choice('LRUDS')
Reglas:
- No hay acceso al sistema de archivos fuera de su propia carpeta.
- Puede escribir en archivos si necesita almacenar datos persistentes entre turnos, pero solo hasta un máximo de 1 kb por bot
- No puede sobrescribir el bot de nadie más
- Si genera un movimiento no válido, su bot se quedará quieto. Si genera una acción no válida, su bot no hará nada.
- Apéguese a los idiomas comunes que se pueden ejecutar en una caja OSX o Linux.
El código del controlador se puede encontrar aquí.
Resultados iniciales
Average of 15 rounds:
---------------------
81 Farmer
56 CautiousBot
42 GetOff
41 Visigoth
40 DontBurnMeBro
37 FireFighter
35 Pyro
11 Protector
Actualización : Farmer agregado, CautiousBot, GetOff, FireFighter y Pyro.