Votre ami géologue a failli frapper la porte de votre bureau alors qu'il entrait, les yeux écarquillés d'excitation, et vous a demandé de venir avec lui sur un site qu'il venait de découvrir. En chemin, il explique qu'il pense qu'il vient littéralement de frapper l'or. Le seul problème est qu'il est enterré profondément sous terre dans une caverne avec un toit très instable. Il est trop dangereux de faire de la spéléologie, il veut donc que vous programmiez l'un de ses robots d'exploration des grottes pour collecter autant d'or que possible avant de le remonter. Il mentionne également qu'il a sondé la caverne et trouvé de la faune qui pourrait être nocive pour les robots, et aussi qu'il avait laissé tomber du matériel là-bas qui pourrait encore être utilisable. Chaque robot est équipé de deux bras et d'une gamme de capteurs. Lorsque vous arrivez sur les lieux, il vous dit qu'il prévoit de recruter plus de codeurs,
Maintenant, descendons au fond. Les capteurs transmettent des informations à votre programme sous forme de caractères ASCII. Voici une liste de ce que signifie chaque personnage et des descriptions de tout ce que le bot pourrait rencontrer dans la grotte:
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
La taille de la caverne augmente en fonction du nombre de robots qui y participent. Il commence comme 30x30, et il obtient un 10x10 supplémentaire pour chaque bot. Donc 2 robots exploreront une caverne 50x50.
Les bots commencent avec 20 points de vie, mais ils n'ont pas de limite maximale de santé.
Contribution:
Vous recevrez une entrée via STDIN dans le format suivant:
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 première ligne contient des informations sur votre bot, et le reste est la grille que votre bot peut voir. Si votre bot est contre l'un des 4 murs de la caverne, vous obtiendrez une grille qui ressemble plus à ceci (dans le cas d'être tout le chemin vers l'ouest):
---
}--
Y--
---
---
La caverne ne s'enroule pas et votre vision non plus. Les murs de la caverne ne sont pas marqués, la seule indication que votre bot reçoit qu'il s'approche d'un mur est sa vue diminuée. Avec le révélateur, vous pourriez obtenir quelque chose comme ceci:
--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R
Production:
Vous obtenez deux coups par tour, que vous produisez au format suivant:
MNNANW <- Moves are groups of 3 characters representing the action and the direction
Les actions possibles sont les suivantes:
M Move - Move your bot in the specified direction
A Attack - Attack the square in the specified direction
H Hold - Do nothing
Les directions possibles sont les suivantes:
NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest
Les mouvements sont appliqués de gauche à droite.
Se tourne:
Transforme les progrès de la manière suivante:
Les effets de poison sont appliqués à tout joueur qui a été empoisonné
Les non-bots se déplacent et attaquent
2a. Les lions, les mille-pattes et les chauves-souris se déplacent au hasard
2b. Les Lions et les mille-pattes attaqueront tout ce qui lui est directement adjacent (y compris en diagonale)
2c. L'effet de chauve-souris ne sera appliqué à un bot que s'il se trouve sur le même espace que la chauve-souris
2d. L'infirmière Nina restera dans un endroit pendant 3 tours, puis sautera à un endroit aléatoire.
Les bots se déplacent
3a. Si votre bot donne une sortie invalide, il ne bougera pas
3b. Votre bot essaiera de se rapprocher le plus possible de l'espace désigné par la sortie (voir la note en bas pour plus de détails)
3c. Une attaque contre un mille-pattes, un lion ou une chauve-souris le tuera
3d. Attaquer un autre bot sans couteau fera 5 dégâts et 10 avec un couteau
Règles:
Tenez-vous en aux langues courantes qui peuvent être exécutées sur OS X ou Linux.
Vous pouvez éventuellement écrire jusqu'à 1 Ko de données au maximum dans un fichier
Notation:
Les robots ne seront dans la caverne que jusqu'à ce qu'il n'en reste qu'un, ou jusqu'à ce que 50 tours se soient écoulés, selon la première éventualité. Votre bot sera jugé sur la somme du nombre de pièces d'or qu'il a collectées et du nombre de tours qu'il a duré.
Le code du contrôleur peut être téléchargé pour les tests ici (créez un dossier appelé "bots" dans le même répertoire que celui où vous le téléchargez et placez votre bot dans "bots"). Vous aurez besoin de NumPy pour l'exécuter. N'hésitez pas à creuser, mais vous devrez excuser le désordre ...
Voici un code pour un bot aléatoire:
#!/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)])
**** Votre bot se déplacera toujours dans la direction générale spécifiée par votre sortie, mais s'il est obstrué par un rocher ou un mur, la direction exacte dépend des circonstances. Par exemple, si votre robot est contre un mur comme ceci:
---
}--
Y--
---
---
et votre sortie est
MNWMSW
votre bot se déplacera d'un espace vers le bas. Il ne pouvait pas se déplacer vers le nord ou l'ouest, donc ce mouvement n'a eu aucun effet. Il pouvait se déplacer vers le sud (et l'a fait) mais ne pouvait pas se déplacer vers l'ouest. Cependant, si votre bot essayait de se déplacer vers le nord-est, il irait directement à cet espace (le mouvement diagonal est diagonal, pas procédural)
Classement
Ce sont les scores moyens de 4 matchs.
The bot of Survival: 54.75
Coward: 52.25
Pufferfish: 50.00
Randombot: 50.00
Indiana Jones: 47.50
TheoremBot: 46.50