Su amigo geólogo casi derribó la puerta de su oficina cuando entró, con los ojos muy abiertos por la emoción, y le pidió que lo acompañara a un sitio que acaba de descubrir. En el camino, explica que cree que literalmente acaba de encontrar oro. El único problema es que está enterrado bajo tierra en una caverna con un techo muy inestable. Es demasiado peligroso hacer espeleología, por lo que quiere que programes uno de sus robots de exploración de cuevas para recolectar la mayor cantidad de oro posible antes de que vuelva a levantarlo. También menciona que sondeó la caverna y encontró algo de vida silvestre que podría ser dañina para los robots, y también que había arrojado algunos equipos allí que aún podrían ser utilizables. Cada robot está equipado con dos brazos y una gama de sensores. Cuando llegas a la escena, él te dice que está planeando reclutar más codificadores,
Ahora, hasta el meollo de la cuestión. Los sensores pasan información a su programa como caracteres ASCII. Aquí hay una lista de lo que significa cada personaje y descripciones de cualquier cosa que el bot pueda encontrar en la cueva:
Code Name/Description
Y Your bot
You do things
@ Other bots
They do other things
- Ground
This doesn't do things
C Centipede
These will bite you and leave a poison effect
The bite will cost 1 health
The poison effect will last for 3 turns, costing 2 health each turn
B Bats
If bats end up in the same space you are, your bot runs in a random direction during its turn rather than what you told it to do
L Lion (because reasons)
Lions deal heavy damage, 10 health, each time they attack
F Food
Eating this will give you 5 health
Can only be used once
W Water
Drinking this will cure poison effects early
Can only be used once
R Revealer
This will increase the range of your visibility to an 11x11 grid
The extra range will only be 75% correct, but the original range won't be effected
K Knife
You do twice as much damage to other bots if you have a knife
G Gold
The whole reason you're doing this in the first place
N Nurse Nina
She mend you good
Restores your health by 10 while you occupy the same space as her
} Boulder
You can't walk over boulders, and neither can anything else
P Pit
If you fall in a pit, you will be stuck for 3 turns
El tamaño de la caverna crece según la cantidad de bots que participan. Comienza como un 30x30, y obtiene un 10x10 extra por cada bot. Entonces 2 bots explorarán una caverna de 50x50.
Los bots comienzan con 20 de salud, pero no tienen un límite máximo de salud.
Entrada:
Recibirá información a través de STDIN en el siguiente formato:
20,5,10,1,0,True,False <-health, number gold pieces, number of turns your bot has lasted, number of until the poison wears off, number of turns until you are no longer stuck in a pit, if you have a revealer, if you have a knife
-----
-G}--
--Y-L
-C---
---B-
La primera línea contiene información sobre su bot, y el resto es la cuadrícula que su bot puede ver. Si su bot está contra una de las 4 paredes de la caverna, obtendrá una cuadrícula que se parece más a esto (en el caso de estar todo el camino hacia el oeste):
---
}--
Y--
---
---
La caverna no se envuelve, y tu visión tampoco. Las paredes de la caverna no están marcadas, la única indicación de que su bot recibe que se está acercando a una pared es que su vista está disminuyendo. Con el Revelador, puede obtener algo como esto:
--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R
Salida:
Obtienes dos movimientos por turno, que se obtienen en el siguiente formato:
MNNANW <- Moves are groups of 3 characters representing the action and the direction
Las acciones posibles son las siguientes:
M Move - Move your bot in the specified direction
A Attack - Attack the square in the specified direction
H Hold - Do nothing
Las posibles direcciones son las siguientes:
NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest
Los movimientos se aplican de izquierda a derecha.
Vueltas:
Convierte el progreso de la siguiente manera:
Los efectos de veneno se aplican a cualquier jugador que haya sido envenenado
Los no bots se mueven y atacan
2a. Leones, ciempiés y murciélagos se mueven al azar
2b. Los leones y los ciempiés atacarán todo lo que esté directamente adyacente a él (incluso en diagonal)
2c. El efecto murciélago solo se aplicará a un bot si está en el mismo espacio que el murciélago
2d. La enfermera Nina permanecerá en una ubicación durante 3 turnos y luego saltará a una ubicación aleatoria.
Bots se mueven
3a. Si su bot da una salida no válida, no se moverá
3b. Su bot intentará acercarse lo más posible al espacio designado por la salida (consulte la nota en la parte inferior para obtener más detalles)
3c. Un ataque a un ciempiés, león o murciélago lo matará
3d. Atacar a otro bot sin un cuchillo hará 5 daños y 10 con un cuchillo
Reglas:
Apéguese a los lenguajes comunes que se pueden ejecutar en OS X o Linux.
Opcionalmente, puede escribir hasta y no más de 1 kb de datos en un archivo
Puntuación:
Los bots solo estarán en la caverna hasta que solo quede uno, o hasta que hayan transcurrido 50 turnos, lo que ocurra primero. Su bot será juzgado por la suma de la cantidad de monedas de oro que recolectó y cuántos turnos duró.
El código del controlador se puede descargar para probar aquí (haga una carpeta llamada "bots" en el mismo directorio donde lo descargó, y coloque su bot dentro de "bots"). Necesitará NumPy para ejecutarlo. Siéntete libre de investigarlo, pero tendrás que disculpar el desorden ...
Aquí hay un código para un bot aleatorio:
#!/usr/bin/python
import random as r
a = ['M','A','H']
d = ['NN','NE','EE','SE','SS','SW','WW','NW']
print(a[r.randint(0,2)]+d[r.randint(0,7)]+a[r.randint(0,2)]+d[r.randint(0,7)])
**** Su bot siempre se moverá en la dirección general que especifica su salida, pero si está obstruido por una roca o una pared, la dirección exacta depende de las circunstancias. Por ejemplo, si tu bot está contra una pared así:
---
}--
Y--
---
---
y tu salida es
MNWMSW
tu bot se moverá un espacio hacia abajo. No podía moverse hacia el norte o el oeste, por lo que ese movimiento no tuvo ningún efecto. Podría moverse hacia el sur (y lo hizo) pero no pudo moverse hacia el oeste. Sin embargo, si su bot intentara moverse hacia el noreste, iría directamente a ese espacio (el movimiento diagonal es diagonal, no de procedimiento)
Tabla de clasificación
Estos son los puntajes promedio de 4 juegos.
The bot of Survival: 54.75
Coward: 52.25
Pufferfish: 50.00
Randombot: 50.00
Indiana Jones: 47.50
TheoremBot: 46.50
fuente
Respuestas:
Indiana Jones, Python 2
Este bot no tiene miedo a nada. Intentará obtener el oro; y si no puede encontrar ninguno, intentará apuñalar a los oponentes con cuchillos.
fuente
line.index('Y')
arrojará un error si "Y" no está en la línea, peroline.find('Y')
devolverá -1 si "Y" no está en la línea. De lo contrario, ¡es genial!MSNMSN
, que no es válido.Cobarde, pitón3
Un cobarde siempre huye de posibles amenazas.
Sin embargo, si se siente súper fuerte, de repente se volverá loco y apuñalará todo cerca de él.
El problema con la implementación actual es que los comandos de movimiento se emiten sin saber si es el primer o el segundo movimiento.
fuente
El bot de supervivencia - Python 2
Editar: se agregó una mejor evitación de fosas.
fuente
Pez globo, Python 3+
Solo soy esa persona.
fuente