Bot di codice
Odio le variabili private e protette. Voglio solo accedere a qualsiasi cosa!
Se sei come me, questa sfida è per te!
Scrivi un robot che lavora insieme in armonia con altri robot per far sì che altri robot facciano quello che vuoi. Sei un programmatore e sai come dovrebbero funzionare le cose. Il tuo compito è convertire il maggior numero possibile di robot nei tuoi modi.
Il codice
Avrai 24 righe di codice per scrivere il tuo bot. Ad ogni turno, ogni bot eseguirà 1 riga in sequenza.
Ogni bot memorizza 5 variabili A
attraverso E
. A
e B
sono per uso personale, C
memorizza la riga successiva da eseguire, D
memorizza la direzione corrente ed E
è un numero casuale. Le variabili iniziano da 0, ad eccezione di D
, che inizierà con un valore casuale. Tutte le variabili hanno solo un archivio da 0 a 23. I numeri più grandi o più piccoli saranno modulati di 24.
In questo post, userò l'avversario come bot adiacente che stai affrontando
Ogni riga deve contenere uno dei seguenti 5 comandi:
Flag
non fa nulla. Solo che è come vinciMove
sposta il tuo robot nellaD
th direzione. Se un bot occupa già lo spazio, non si verificherà alcuna mossaCopy Var1 Var2
copia il contenuto di Var1 in Var2If Condition Line1 Line2
Se la condizione è vera, esegue Line1, altrimenti Line2Block Var1
blocca la scrittura successiva su una variabile
Una variabile può essere utilizzata come segue:
#Var
utilizzerà la variabile come numero di riga. Se A
è 17, Copy #8 #A
copierà il contenuto della riga 8 sulla riga 17.
*Var
utilizzerà la variabile del tuo avversario. Copy 5 *C
imposterà la C
variabile dell'avversario per 5
Var+Var
aggiungere le due variabili. Copy D+1 D
ruoterà il bot verso destra
Quando D
viene utilizzato come direzione, [North, East, South, West][D%4]
verrà utilizzato
Questi modificatori possono essere concatenati: Copy *#*C #9
copieranno la riga successiva che il tuo avversario eseguirà nel tuo codice alla riga 9. si **D
riferisce alla D
variabile dell'avversario del tuo avversario .
Una condizione verrà valutata come segue:
- Se
Var
:- Se Var è
A
passatoC
, restituirà true se Var è diverso da zero, altrimenti false. - Se Var è
D
, tornerà vero se c'è un bot nellaD
direzione th, altrimenti falso - Se Var è
E
, tornerà vero se E è dispari, altrimenti falso - Se Var è una linea, tornerà vero se è una linea Flag
- Se Var è
- Se
Var1=Var2
:- Restituisce vero se entrambi lo sono
A-E
ed equivale allo stesso numero - Restituisce vero se entrambe sono linee e il tipo di linea è uguale
- Restituisce vero se entrambi lo sono
- Se
Var1==Var2
:- Restituisce vero se entrambi lo sono
A-E
ed equivale allo stesso numero - Restituisce vero se entrambe sono linee e sono identiche (le bandiere di diversi robot non saranno uguali)
- Restituisce vero se entrambi lo sono
50 robot di ogni tipo verranno posizionati in un mondo toroidale nel seguente schema:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
..B...B...B...B.
Dopo ogni partita di 5.000 turni, verranno conteggiate le bandiere su ciascun bot. Ottieni un punto se un bot ha più bandiera di qualsiasi altro tipo di bandiera. Se il caso di un pareggio tra i N
robot, non viene assegnato alcun punto.
Ci saranno 10 partite e i punteggi verranno accumulati alla fine.
Note laterali
I commenti di fine riga sono consentiti e sono indicati con //
Tentare di fare qualcosa che non ha senso, come aggiungere a una linea, non farà nulla
Tentare di fare qualcosa su un bot inesistente non farà nulla
La ricorsione infinita su una If
terminerà senza che venga eseguita alcuna linea
If
non cambia il valore di C
A Block
non scade fino a quando qualcuno non tenta di scrivergli
Più variabili e linee possono essere bloccate contemporaneamente
Block
l'inserimento di una variabile più volte si bloccherà più volte a condizione che la seconda istruzione di blocco si trovi su una riga di codice diversa dalla prima
Gli spazi sono consentiti solo tra argomenti (e dopo il comando)
Se un bot è più corto di 24 linee, Flag sarà il resto delle linee.
Programma di esempio
Copy 2 C //Skip to the If line
Flag //Where I'm storing my flag
Move //Move in the D'th direction
If D #5 #2 //If there's a bot, copy code, otherwise, move!
Copy #1 *#E //Copy my flag onto a random spot in my bot's code
Copy 2 C //Skip back to the If line
Il programma verrà eseguito dal mio controller Python qui .
Il controller Java è qui È veloce e sembra molto meglio di quello di Python.
Pagelle:
- 6837 $ Copia
- 3355 Lockheed
- 1695 MindControl
- 967 bizantino
- 959 AttackOrElse
- 743 Cadmyllion
- 367 Influenza
- 251 TheCommonCold
- 226 Magus
- 137 HideBlockAttack
- 129 RowBot
- 123 FastMoveCloneDodge
- 112 FastForwardClone
- 96 QuickFreeze
- 71 RepairAndProtect
- 96 SuperFreeze
- 93 RovingVirus
- 80 ForwardClone
- 77 FreezeTag
- 68 Palimpseste
- 62 BlockFreezeAttack
- 51 RushAttackDodge
- 46 Blocker
- 40 TurretMaker
- 37 Copycat
- 37 Kamikaze
- 35 FlagInjector
- 33 RandomCopier
- 31 Insidioso
- 29 HappyAsAClam
- 25 NanoVirus
- 21 annullatore
- 19 Nanoviris
- 17 BoringCopybot
- 16 Movebot
- 14 Flagbot
- 13 Neutralizzatore
- 12 Cancro
- 9 DNAbot
- 9 Parassita
- 8 MetaInsidious
- 8 Rebranding
- 8 AdaptiveBot
- 8 ReproducingBot
- 8 KungFuBot
- 5 QuickFreezerbot
- 4 Attaccante