Il tuo amico geologo ha quasi buttato giù la porta del tuo ufficio mentre irrompe, con gli occhi spalancati per l'eccitazione, e ti chiede di venire con lui in un sito che ha appena scoperto. Sulla strada spiega che pensa di aver letteralmente appena colpito l'oro. L'unico problema è che è sepolto in profondità in una caverna con un tetto molto instabile. È troppo pericoloso andare in incantesimo, quindi vuole che tu programmi uno dei suoi robot esploratori delle caverne per raccogliere quanto più oro possibile prima che torni su. Cita anche di aver sondato la caverna e di aver trovato alcuni animali selvatici che potrebbero essere dannosi per i robot, e anche di aver lasciato cadere alcune attrezzature che potrebbero essere ancora utilizzabili. Ogni robot è dotato di due bracci e una gamma di sensori. Quando arrivi sulla scena, ti dice che sta pianificando di reclutare altri programmatori,
Ora, fino ai pessimi. I sensori trasmettono le informazioni al programma come caratteri ASCII. Ecco un elenco di ciò che ogni personaggio significa e le descrizioni di tutto ciò che il bot potrebbe incontrare nella caverna:
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 dimensione della caverna cresce in base al numero di robot che partecipano. Inizia come 30x30 e ottiene un ulteriore 10x10 per ogni bot. Quindi 2 robot esploreranno una caverna 50x50.
I robot iniziano con 20 punti salute, ma non hanno un limite massimo di salute.
Ingresso:
Riceverai input tramite STDIN nel seguente 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 prima riga contiene informazioni sul tuo bot e il resto è la griglia che può vedere il tuo bot. Se il tuo bot è contro una delle 4 pareti della caverna, otterrai una griglia che assomiglia di più a questo (nel caso di essere fino a ovest):
---
}--
Y--
---
---
La caverna non si avvolge e nemmeno la tua visione. I muri della caverna non sono segnati, l'unica indicazione che il tuo bot riceve che si sta avvicinando a un muro è la sua vista diminuita. Con il Revealer potresti ottenere qualcosa del genere:
--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R
Produzione:
Ottieni due mosse per turno, che ottieni nel seguente formato:
MNNANW <- Moves are groups of 3 characters representing the action and the direction
Le azioni possibili sono le seguenti:
M Move - Move your bot in the specified direction
A Attack - Attack the square in the specified direction
H Hold - Do nothing
Le direzioni possibili sono le seguenti:
NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest
Le mosse vengono applicate da sinistra a destra.
Giri:
Trasforma i progressi nel modo seguente:
Gli effetti veleno vengono applicati a qualsiasi giocatore che è stato avvelenato
Mosse e attacchi senza robot
2a. Leoni, millepiedi e pipistrelli si muovono a caso
2b. Lions e millepiedi attaccheranno tutto ciò che è direttamente adiacente (incluso in diagonale)
2c. L'effetto pipistrello verrà applicato a un robot solo se si trova nello stesso spazio del pipistrello
2d. L'infermiera Nina rimarrà in una posizione per 3 turni, quindi salterà in una posizione casuale.
I robot si muovono
3a. Se il tuo bot produce un output non valido, non si sposterà
3b. Il tuo bot proverà ad avvicinarsi il più possibile allo spazio designato dall'output (vedi la nota in fondo per maggiori dettagli)
3c. Un attacco a un centopiedi, un leone o un pipistrello lo ucciderà
3d. Attaccare un altro robot senza un coltello farà 5 danni e 10 con un coltello
Regole:
Attenersi alle lingue comuni che possono essere eseguite su OS X o Linux.
Puoi facoltativamente scrivere fino a un massimo di 1 kb di dati in un file
punteggio:
I robot rimarranno nella caverna solo fino a quando ne rimarrà solo uno, o fino a quando non saranno trascorsi 50 turni, a seconda dell'evento che si verifica per primo. Il tuo bot verrà valutato in base alla somma del numero di monete d'oro che ha raccolto e di quanti turni è durato.
Il codice del controller può essere scaricato per il test qui (crea una cartella chiamata "bot" nella stessa directory in cui lo scarichi e metti il tuo bot all'interno di "bot"). Per eseguirlo dovrai usare NumPy. Sentiti libero di scavarlo, ma dovrai scusare il casino ...
Ecco un po 'di codice per un bot casuale:
#!/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)])
**** Il bot si sposterà sempre nella direzione generale specificata dall'output, ma se è ostruito da una roccia o da un muro, la direzione esatta dipende dalla circostanza. Ad esempio, se il tuo bot è contro un muro in questo modo:
---
}--
Y--
---
---
e il tuo output è
MNWMSW
il tuo bot si sposterà di uno spazio verso il basso. Non poteva spostarsi a nord o ovest, quindi quella mossa non ebbe effetto. Poteva spostarsi a sud (e lo fece) ma non poteva spostarsi a ovest. Tuttavia, se il tuo bot provasse a spostarsi a nord-est, andrebbe direttamente in quello spazio (il movimento diagonale è diagonale, non procedurale)
Classifica
Questi sono i punteggi medi di 4 partite.
The bot of Survival: 54.75
Coward: 52.25
Pufferfish: 50.00
Randombot: 50.00
Indiana Jones: 47.50
TheoremBot: 46.50