Caccia all'uovo di Pasqua
Bot trova l'uovo prima che il coniglietto trovi l'uovo. Bot felice.
Panoramica
Questa è una sfida da re delle colline in onore della Pasqua e della tradizione della caccia alle uova di Pasqua!
Il tuo bot ha una visione di due spazi in ogni direzione, comprese le diagonali, creando un quadrato 5x5 attorno a te che puoi vedere. Sta cercando le uova e chi trova più uova vince!
Il bordo
Il tabellone sarà composto da o
s, che sono uova di Pasqua, #
s, che sono muri, *
s, che sono altri giocatori, e che sono spazi vuoti.
- Sarà un quadrato con lunghezza del bordo
(number of entries) * 3
. - Sarà circondato da mura.
- All'interno delle pareti ci sarà un assortimento di pareti di linea retta disposte in modo casuale
#
, che avranno una lunghezza casuale compresa tra 2 e 10 inclusi. Ce ne saranno(number of entries) * 3
. - Le uova verranno quindi posizionate in modo casuale. Ce ne saranno
(number of entries) * 4
, e saranno generati solo suquadrati vuoti ( ).
- Devono esserci almeno 7 indirizzi affinché il processo di generazione della scheda funzioni correttamente.
Ecco un JSFiddle che genererà una scheda casuale con cui testare. Ecco un esempio, con (number of entries) = 7
:
#####################
# o ##
# # o ##
# #o ###### ##
###### # ##
## o # # ##
## o# #o# o o##
## #o # # o # #
## # o # # # #
## ## # # o # #
## # # o # # #
## # o # ## # # #
## # # # #
# o # ## # #
# o oo ##o #
#o ####### oo ## #
# # # #
# o o o# #
# o #### o o#
# #
#####################
Dopo che il tabellone è stato generato, ogni giocatore viene posizionato in un quadrato casuale (spazio vuoto).
Ingresso
Prenderai sei righe di input. Le prime cinque linee sono il tuo campo visivo (gli spazi fuori dai limiti della tavola saranno rappresentati da X
, e lo spazio medio sarà sempre *
tu) e la sesta linea sarà vuota (all'inizio).
Produzione
Verranno emesse tre righe. Innanzitutto, la direzione in cui vuoi spostarti:
1 2 3
8 YOU 4
7 6 5
(9 è una no-op se non vuoi muoverti), secondo, uno di A
ttack, C
ounter o N
othing (questo sarà spiegato in profondità presto), e la treccia sarà qualsiasi stringa di lunghezza fino a 1024 Questa sarà la memoria del tuo bot. Puoi usarlo per quello che vuoi, o puoi lasciarlo in bianco. Questa memoria sarà quindi la sesta riga di input per il tuo programma alla prossima esecuzione.
Tutte le ulteriori righe di output vengono ignorate e se esiste solo una riga, si presuppone che la seconda sia vuota.
In movimento
Il seguente processo viene utilizzato per determinare dove ti sei trasferito:
- Se, quando ti sposti, finisci in uno spazio vuoto (
), il tuo giocatore viene posizionato in quello spazio.
- Se finisci in un muro (
#
), la tua mossa viene ignorata e perdi il tuo turno. - Se finisci in un uovo (
o
) o su un giocatore (*
), queste informazioni vengono memorizzate e verranno utilizzate dopo che tutti si sono spostati.
Dopo che tutti si sono mossi, le ambiguità sono state risolte.
Se ci sono due giocatori che sono atterrati nello stesso spazio, si verifica un combattimento! È qui che entra in gioco A
/ C
/ N
. A
ttack batte N
othing (attacco normale), N
othing batte C
ounter (non puoi contrastare nulla), e C
ounter batte A
ttack (contrattacco). Il giocatore che vince questo combattimento rimane nella propria casella e il giocatore che perde torna nella casella originale da cui ha iniziato. In caso di pareggio, entrambi i giocatori tornano dove erano.
Se un giocatore perdente o in parità ritorna dove si trovava e c'è un altro giocatore lì, non c'è combattimento e anche l'altro giocatore tornerà al suo spazio originale. Se questo spazio ha un altro giocatore, quel giocatore torna indietro e questo continua fino a quando tutti i giocatori si trovano in spazi diversi.
Se ci sono tre o più giocatori su uno spazio, tutti tornano alle loro posizioni originali.
Se qualche giocatore è ancora in piedi su un uovo ...
- Se il giocatore ha scelto
A
, l'uovo viene distrutto. - Se il giocatore ha scelto
C
, non accade nulla e il giocatore ritorna al suo spazio originale. - Se il giocatore ha scelto
N
, il giocatore prende l'uovo! Il punteggio del giocatore viene incrementato di uno e l'uovo viene rimosso.
Le lingue
È possibile utilizzare qualsiasi linguaggio liberamente disponibile su Windows, OSX e Linux, per garantire l'equità tra ciascun concorrente. Se il codice non è eseguibile liberamente ma può essere compilato o impacchettato in un formato che sia, si prega di includere anche questo formato nella risposta. Idealmente, se riesci a compilare il tuo codice in un linguaggio più comune (ad es. CoffeeScript -> JavaScript), ti preghiamo di farlo.
punteggio
Il tuo punteggio sarà il numero medio di uova che raccogli su dieci serie. Una corsa termina quando tutte le uova vengono raccolte o quando i (number of entries * 25)
turni sono passati. Mi accerterò manualmente che sia possibile raggiungere tutte le uova per ogni mappa (generando continuamente mappe fino a quando tutte le uova sono raggiungibili).
tabellone segnapunti
Verrà aggiunto un quadro di valutazione quando sono soddisfatte tutte le seguenti condizioni:
- Sono state inviate almeno sette voci valide con un punteggio positivo o zero (non declassato)
- Sono passate almeno 48 ore dalla creazione di questa sfida (UTC 14:23)
Le regole non cambieranno durante questo periodo pre-gara, tranne per aggiungere chiarimenti in cui una regola non era chiara. Una volta creato il quadro di valutazione, il programma di test verrà pubblicato anche qui in modo da poter testare le voci. Il codice di test per questo è ancora in fase di elaborazione, ma è riproducibile e funziona. Ecco il repository GitHub.
9
, non può mai essere attaccato in modo significativo. Se un altro giocatore (B) entra nella casella di quel giocatore e vince, A tornerà alla sua casella originale (che è la stessa). Ma ora c'è uno scontro perché sono presenti sia A che B, quindi B deve tornare nella propria casella. Quindi il risultato è indipendente dal combattimento reale, B torna sempre al quadrato iniziale e A rimane sempre messo. Ciò mi consentirebbe di scrivere entrambi che potrebbero aiutare un'altra presentazione bloccando un percorso per tutti gli altri.