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.
fuente
Respuestas:
visigodo
Visigoth intenta quemar a sus enemigos en el suelo. Espera hacer esto antes de que alguien más llegue a su tierra.
Correr:
python visigoth.py
Esta es mi primera entrada, ¡se agradece la crítica constructiva!
fuente
min
donde debería haber tenidomax
. Lo arreglé.Java, protector
Intenta rodear su campo con una cerca de cenizas.
Editar: lógica mejorada un poco. Probablemente no haga la diferencia.
Colocar en un archivo llamado
Protector.java
.Compilar con:
javac Protector.java
Ejecutar con:
java Protector
fuente
GetOff, Python
GetOff solo quiere quedarse con su tierra, y no tiene miedo de perseguir a esos malditos robots por toda su tierra, arrojándolos con su pistola de agua hasta que se vayan. Si bien no se viola su propiedad, hace todo lo posible para asegurarse de que su tierra no se queme.
fuente
a < b < c
sintaxis funciona en Python? Pensé que se evalúa como(a < b) < c
, que es1 < c
o0 < c
. Corrígeme si estoy equivocado. (Encontrado en el primer condicional del bucle bot.)1<3>2
evalúaTrue
en mi máquina (si los agrupara devolvería falso:1>2
y1<1
son las posibilidades).Granjero, java
El granjero solo se preocupa por sus cultivos. Constantemente vigila su campo en busca de posibles incendios o invasores.
fuente
isFire
su lugar podría utilizarCharacter.isDigit
.Pyro, python
A Pyro le gusta el fuego. Pyro ama el fuego. Pyro vive en el fuego. Estoy pensando "Pyro de TF2". A Pyro le gusta quemar cosas. No quemará su propio territorio, pero intentará salir de él, utilizando un algoritmo simple de "búsqueda de caminos".
fuente
DontBurnMeBro
Otra entrada de Python. Garantizado para no ser el primero en morir (creo).
fuente
P
no lo esW
.Bombero, java
Combate todos los incendios.
fuente
Guardián, Python 2
Podría simplificarse, pero estoy cansado.
El Guardián trata de mantener su campo libre de daños. Si aparece un incendio, se apresura hacia él y lo apaga tan rápido como puede.
También puedo agregar alojamiento para incendios entrantes.
fuente
ValueError: min() arg is an empty sequence
arroja errores si todavía no hay nada en llamas.CautiousBot, Node.js (ES5)
Este bot se apaga e intenta prender fuego a la tierra de otros bots. ¡Incluso se sienta en la parte superior del fuego durante 3 tics para ocultarlo! Sin embargo, uno nunca puede ser demasiado cauteloso, por lo que siempre se asegura de que esté lo suficientemente cerca como para apagar incendios en su propia tierra.
Notas:
state.json
almacenado en su directorio de trabajo, utilizado para almacenar información sobre las posiciones iniciales de otros bots y para determinar cuánto tiempo ocultar un incendio iniciado. Esto debe eliminarse una vez que finaliza la ronda (por ejemplo, cuando algún bot ha ganado). De lo contrario, el bot se confundirá en la próxima ronda. (Avísame si esto rompe las reglas).split
módulo.fuente
Error: Cannot find module 'split'
. Estoy usando Node.js v0.10.30.cd botdir
npm install split
por alguna razón, al nodo no le gusta que esté instalado globalmente para mí, pero también podrías probarlo