Benvenuti in Code Bots 2!
Hai imparato la lezione dagli ultimi Code Bots. Hai provato a trovare più modi per adattare più azioni in meno righe, e ora finalmente ce l'hai. Stai per creare un codice Bot orientato agli eventi.
Il tuo bot deve essere composto da 24 linee. Ogni riga segue uno dei due formati:
Condition:Action
o
Action
Il tuo bot hanno anche spazio di archiviazione sufficiente per memorizzare 5 numeri interi chiamati A
attraverso E
. Un numero intero può memorizzare valori da 0 a 23.
Ad ogni turno, eseguirai la linea C
, a meno che una delle condizioni non sia vera. In tal caso, C
conterrà quindi il numero di riga del condizionale che è true e quindi tale riga verrà eseguita. Alla fine di ogni turno, C
verrà incrementato.
Ci sono le condizioni disponibili:
Start
è vero solo al primo turno. Devi averlo nel tuo codice esattamente una voltaBotAt(N)
è vero se esiste un bot nella posizione definita da NEquals(A,B)
è vero se A è uguale a B. Possono essere di tipi diversi, in tal caso, non saranno uguali.Modified(A)
è vero se èA
stato copiato durante l'ultimo turno.A
deve essere un nome di variabile, una riga o una condizioneAny(C1,C2,...)
è vero se una qualsiasi delle condizioni è veraNone(C1,C2,...)
è vero se nessuna delle condizioni è veraAll(C1,C2,...)
è vero se tutte le condizioni sono vereNot(C)
è vero se C è falso.C
deve essere una condizione.
Le variabili possono essere in uno dei seguenti formati. I primi 9 sono numerici e possono essere utilizzati ogni volta che N viene utilizzato in questa pagina.
A
,B
,C
,D
,E
- Un numero compreso tra 0 e 23
This
restituirà il numero di riga in cui si trova attualmenteAdd(N1,N2,...)
restituirà la somma di tutti i valoriSub(N1,N2)
restituirà N1 meno N2Mult(N1,N2,...)
restituirà il prodotto di tutti i valoriDiv(N1,N2)
restituirà N1 diviso per N2Mod(N1,N2)
restituirà N1 mod N2OVar(N)
accetterà un nome di variabile e restituirà la variabile dell'avversarioLine(N)
restituirà l'ennesima riga nel tuo codiceType(N)
restituirà l'ennesimo tipo di riga nel codice (i tipi sono i nomi delle azioni)Cond(N)
restituirà la condizione sull'ennesima rigaCondType(N)
restituirà il tipo di condizione sull'ennesima riga (i tipi sono i nomi delle condizioni)OLine(N)
restituirà l'ennesima riga nel codice del tuo avversarioOType(N)
restituirà l'ennesimo tipo di riga nel codice del tuo avversarioOCond(N)
restituirà la condizione sull'ennesima rigaOCondType(N)
restituirà il tipo di condizione sull'ennesima riga
A
e B
sono per uso personale, C
viene utilizzato per determinare quale riga eseguire nel codice e D
viene utilizzato come direzione. Ogni valore di si D
riferisce a una diversa coppia di quadrati e direzioni. E
produce un valore casuale ogni volta. D
e E
verrà inizializzato su un valore casuale, altrimenti 0
.
La direzione utilizzata sarà [North,East,South,West][D%4]
. Il tuo avversario è il robot nella casella immediata in quella direzione.
Sono disponibili 4 azioni:
Move
ti sposterà di 1 quadrato in avanti nellaD
direzione th. Se c'è un bot lì, non ti sposterai.Copy(A,B)
copierà la variabileA
inB
.B
non può essere un valore numerico, ad eccezione di un nome di variabile.A
eB
non può essere di diversi tipi. La copia di una riga non copia la condizione.Flag
non fa nulla. Il bot con il maggior numero di flag nel codice otterrà un punto. Vince il bot con il maggior numero di punti.If(C,L1,L2)
eseguirà la lineaL1
seC
è vero, altrimenti esegueL2
.C
è una condizioneL1
eL2
deve essere linee.
La grande immagine
50 copie di ogni bot verranno posizionate nel mondo. Il tuo obiettivo è quello di ottenere la tua bandiera nel maggior numero possibile di robot. Per ogni bot che ha più del tuo tipo di bandiera di qualsiasi altro tipo di bandiera, ottieni un punto.
I robot saranno posizionati come segue:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
Verranno giocate 10 partite e verranno calcolati i punti in media in tutte le partite, determinando chi è il vincitore.
Note laterali
Se si applicano più condizioni, Start
verrà eseguita quella che segue immediatamente
I robot saranno imballati da vicino ma non inizierai a confinare con un altro robot. (Tecnicamente sarà lo stesso formato degli ultimi CodeBot)
Poiché questa sfida non è stata pubblicata nella sandbox (per non dare a nessuno un vantaggio), mi riservo il diritto di modificare piccoli dettagli per correttezza o funzionalità aggiuntive. Inoltre, se c'è un bug nel runner CodeBots, lo cambierò, anche se un bot dipendesse da quel bug per il suo successo. Sto cercando di essere il più equo possibile.
Le If
dichiarazioni ricorsive non verranno eseguite
Se il tuo bot è più corto di 24 righe, le righe rimanenti verranno riempite Flag
Ricorda quando copi per conto tuo C
, che C
viene incrementato alla fine del tuo turno.
L'interprete CodeBots può essere trovato qui . Include un file .jar per una facile esecuzione. Aggiungi semplicemente il tuo bot alla cartella bot
I punteggi
- 893,9 Borg
- 1.3 LazyLioness
- 0.9 Difensore
- 0,5 Flagger
- 0.4 CliqueBot
- 0.4 Insidioso
- 0.3 Attaccante
- 0.3 Gard
- 0.3 SingleTarget
- 0.2 FreezeBot
- 0.2 Sentinel
- 0.2 Driveby
- 0.0 AntiInsidious
- 0.0 MoveBot
- 0.0 CliqueBorg
- 0.0 Calcolatrice
- 0.0 TestBot
- 0.0 Imitatore
AGGIORNARE
Le linee di codice ora vengono ruotate quando visualizzi il codice del tuo avversario. Ciò significa che la linea 1 del tuo avversario può essere la linea 14 (o qualunque altra linea). Un bot avrà un offset fisso che compenserà le sue linee in base X
all'importo se visto da un avversario . Anche la C
variabile dell'avversario sarà compensata dello stesso X
importo. X
non cambierà all'interno dello stesso gioco, ma cambierà da gioco a gioco.