Tutti i robot nell'arena di battaglia sono stati improvvisamente colpiti dal cervello e nessuno può spiegare il perché. Ma chi se ne frega finché sono ancora in grado di combattere, anche se Brainfuck è l'unica lingua che capiscono più.
È passato un po 'di tempo dall'ultima presentazione, quindi finalmente annuncerò il vincitore di BrainFuckedBotsForBattling: Congratulazioni a LymiaAluysia per aver vinto con NyurokiMagicalFantasy!
tabellone segnapunti
| Owner | Bot Score |
|--------------------|-------------------------------|
| LymiaAluysia | NyurokiMagicalFantasy - 600 |
| Sylwester | LethalLokeV2.1 - 585 |
| weston | MickeyV4 - 584 |
| Sp3000 | YandereBot - 538 |
| Comintern | CounterPunch - 512 |
| Sylwester | BurlyBalderV3 - 507 |
| LymiaAluysia | NestDarwin - 493 |
| IstvanChung | Bigger - 493 |
| Manu | DecoyMaster - 489 |
| archaephyrryx | Wut - 478 |
| DLosc | LightfootPlodder - 475 |
| archaephyrryx | 99BottlesOfBats - 461 |
| Sylwester | TerribleThorV2 - 458 |
| MikaLammi | WallE2.0 - 443 |
| Mikescher | MultiVAC - 441 |
| archaephyrryx | Twitcher - 439 |
| Timtech | MetalDetector - 438 |
| AndoDaan | BeatYouMate - 433 |
| csarchon | TheWallmaster - 427 |
| Sparr | SeeSawRush - 412 |
| archaephyrryx | Stitcher - 406 |
| PhiNotPi | RandomOscillator - 403 |
| ccarton | AnybodyThere - 398 |
| Comintern | 2BotsOneCup - 392 |
| kaine | SternBot - 387 |
| PhiNotPi | EvoBot2 - 385 |
| PhiNotPi | EvoBot1 - 381 |
| Brilliand | TimedAttack - 373 |
| Sylwester | ReluctantRanV2 - 373 |
| AndoDaan | PrimesAndWonders - 359 |
| Nax | TruthBot - 357 |
| DLosc | Plodder - 356 |
| weston | FastTrapClearBot - 345 |
| MikaLammi | PolarBearMkII - 340 |
| Sp3000 | ParanoidBot - 336 |
| Moop | Alternator - 319 |
| TestBot | FastClearBot - 302 |
| icedvariables | PyBot - 293 |
| TestBot | DecoyBot - 293 |
| kaine | BestOffense - 291 |
| Geobits | Backtracker - 289 |
| bornSwift | ScribeBot - 280 |
| IngoBuerk | Geronimo - 268 |
| flawr | CropCircleBot - 239 |
| plannapus | CleanUpOnAisleSix - 233 |
| frederick | ConBot - 230 |
| frederick | 128Bot - 222 |
| AndoDaan | EndTitled - 219 |
| PhiNotPi | CloakingDeviceBot - 215 |
| AndoDaan | GetOffMate - 206 |
| DLosc | ScaredyBot - 205 |
| isaacg | CleverAndDetermined - 202 |
| PhiNotPi | CantTouchThis - 202 |
| Moop | StubbornBot - 174 |
| Cruncher | StallBot - 168 |
| IngoBuerk | Gambler - 157 |
| BetaDecay | RussianRoulette - 129 |
| flawr | DoNothingBot - 123 |
| SebastianLamerichs | Dumbot - 115 |
| mmphilips | PacifistBot - 112 |
| SeanD | DontUnderstand - 92 |
| proudHaskeller | PatientBot - 83 |
| frederick | Dumberbot - 70 |
| flawr | MetaJSRandomBot - 68 |
| Darkgamma | TheRetard - 61 |
| BetaDecay | Roomba - 61 |
| BetaDecay | PrussianRoulette - 31 |
| frederick | Dumbestbot - 0 |
I punteggi finali del 09.10.2014
EDIT6 : registri scartati a causa di dimensioni e runtime estremi. Puoi generarli tu stesso decommentando le linee RunThisTournament.py
.
EDIT5 : implementata la gestione delle abbreviazioni nel controller, nessun tempo di esecuzione enorme. Ciò ha l'effetto collaterale che numeri e parentesi non vengono più trattati come commenti. Puoi comunque usarli se vuoi fornire una versione annotata, ma sarebbe molto utile se ci fosse anche una versione non commentata del tuo codice , quindi non ho bisogno di rimuovere i commenti manualmente. Grazie!
EDIT4 : modificato il titolo, perché il torneo è stato rimosso dalle domande sulla rete attiva . Grazie a @Geobits per averlo segnalato!
EDIT3 : i commenti rimossi nei programmi bf, a causa di un risultato imprevisto, dovrebbero essere corretti ora. Se qualcuno ha un problema con la rimozione dei suoi commenti, si prega di segnalare.
EDIT2 : Dal momento che ha causato un runtime arcano sul mio computer piuttosto lento, ho ridotto il limite di timeout da 100000 cicli a 10000 cicli. Non che nessuno abbia comunque superato il risultato di un gioco in esecuzione oltre questo punto.
EDIT1 : corretto un bug nello script convert che impediva all'interprete di ignorare i numeri nei programmi commentati.
Descrizione
Questo è un torneo Brainfuck ispirato a BF Joust . Due robot (programmi Brainfuck) si combattono in un'arena rappresentata da un nastro di memoria. Ogni cella può contenere valori compresi tra -127 e 128 e andare a capo (quindi 128 + 1 = -127).
Le istruzioni valide sono simili al normale Brainfuck, il che significa:
+ : Increment cell at your pointer's location by 1
- : Decrement cell at your pointer's location by 1
> : Move your memory pointer by 1 cell towards the enemy flag
< : Move your memory pointer by 1 cell away from the enemy flag
[ : Jump behind the matching ']'-bracket if the cell at your pointer's location equals 0
] : Jump behind the matching '['-bracket if the cell at your pointer's location is not 0
. : Do nothing
L'arena ha una dimensione da 10 a 30 celle che viene scelta in modo pseudorandom ogni battaglia. Ad entrambe le estremità si trova un 'flag' che ha un valore iniziale di 128, mentre tutte le altre celle sono azzerate. L'obiettivo del tuo bot è di azzerare la bandiera del nemico per 2 cicli consecutivi prima che azzeri la tua bandiera.
Ogni bot inizia con la sua bandiera, che è cella [0] dalla sua prospettiva. L'avversario si trova dall'altra parte del nastro.
[ 128 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 ]
^ ^
my bot other bot
Entrambi i robot eseguono la loro azione contemporaneamente, questo è considerato un ciclo. Il gioco termina dopo 10000 cicli o non appena viene raggiunta una delle condizioni vincenti. Se uno dei programmi raggiunge la fine, smette semplicemente di fare qualcosa fino alla fine del gioco, ma può comunque vincere.
Condizioni vincenti
Il tuo bot vince in una delle seguenti condizioni:
- La bandiera del tuo nemico viene azzerata prima della tua
- Il tuo nemico sposta il suo puntatore fuori dal nastro (viene eseguito
>
sulla tua bandiera o<
da solo) - Il valore della tua bandiera è più lontano da 0 rispetto al valore della bandiera del tuo avversario dopo 10000 cicli
Regole
Il tuo post dovrebbe contenere un nome per il tuo bot e il suo codice.
- È possibile utilizzare la seguente sintassi delle abbreviazioni per rendere più leggibile il codice:
- eg
(+)*4
è uguale a++++
, questo vale per qualsiasi istruzione eccetto parentesi senza pari tra parentesi poiché la logica del loop si scontra con la logica dell'abbreviazione. Si prega di utilizzare[-[-[-
invece di([-)*3
- eg
- Ogni personaggio diverso da quello
+-><[].
è un commento e quindi ignorato, ad eccezione()*
delle abbreviazioni
I robot che non seguono le regole saranno esclusi dal torneo.
- È consentito solo Brainfuck di base, nessuna altra variante che supporti procedure o operazioni aritmetiche
- Il codice sorgente del bot non deve contenere parentesi senza pari
Puoi informarti sulle strategie di base ma non utilizzare il codice di un altro per il tuo bot.
punteggio
Il punteggio di un bot è determinato dal numero di vittorie contro tutti gli altri bot. Un incontro tra 2 robot consiste di 10 partite con lunghezze di nastro di memoria diverse, il che si traduce in un punteggio massimo di 10 punti per incontro. Un pareggio non dà punti per questa partita.
Programma di controllo
Puoi trovare il programma di controllo su github, insieme ai registri completi delle battaglie. La classifica verrà pubblicata qui una volta generata.
Sentiti libero di clonare il repository e prova il tuo bot contro gli altri da solo. Utilizzare python Arena.py yourbot.bf otherbot.bf
per eseguire una partita. È possibile modificare le condizioni con i flag della riga di comando -m
e -t
. Se il terminale non supporta le sequenze di escape ANSI, utilizzare il --no-color
flag per disabilitare l'output colorato.
Bot di esempio
FastClearBot.bf
(>)*9 Since the tape length is at least 10, the first 9 cells can be easily ignored
([ Find a non-zero cell
+++ Increment at first, since it could be a decoy
[-] Set the cell to zero
]> Move on to the next cell
)*21 Repeat this 21 times
DecoyBot.bf
>(+)*10 Set up a large defense in front of your flag
>(-)*10 Set up another one with different polarity
(>+>-)*3 Create some small decoys
(>[-] Move on and set the next cell to zero
. Wait one round, in case it is the enemy's flag
)*21 Repeat this 21 times
Il DecoyBot vincerà ogni partita con una lunghezza del nastro superiore a dieci, poiché FastClearBot può evitare i piccoli esche, ma non quelli più grandi. L'unica situazione in cui FastClearBot può vincere contro DecoyBot è quando è abbastanza veloce da raggiungere la bandiera del nemico prima che il suo avversario abbia accumulato grandi esche.