Wszystkie boty na arenie bitwy nagle dostały szału i nikt nie może wyjaśnić, dlaczego. Ale kogo to obchodzi, o ile nadal są w stanie walczyć - chociaż Brainfuck to jedyny język, który rozumieją.
Minęło trochę czasu od ostatniego zgłoszenia, więc w końcu ogłosimy zwycięzcę BrainFuckedBotsForBattling: Gratulacje dla LymiaAluysia za zwycięstwo z NyurokiMagicalFantasy!
Tablica wyników
| 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 |
Wyniki końcowe od 09.10.2014
EDYCJA 6 : Odrzucone dzienniki z powodu ekstremalnego rozmiaru i czasu działania. Możesz je wygenerować samodzielnie, usuwając komentarz z linii RunThisTournament.py
.
EDYCJA 5 : Zaimplementowano obsługę skrótów w kontrolerze, nie ma już dużych środowisk uruchomieniowych. Ma to taki efekt uboczny, że liczby i nawiasy nie są już traktowane jako komentarze. Nadal możesz ich używać, jeśli chcesz podać wersję z adnotacjami, ale byłoby bardzo pomocne, gdyby istniała również nieskomentowana wersja twojego kodu , więc nie muszę ręcznie usuwać komentarzy. Dzięki!
EDIT4 : Zmieniłem tytuł, ponieważ turniej został usunięty z gorących pytań w sieci. Dzięki @Geobits za zwrócenie na to uwagi!
EDYCJA 3 : Usunięto komentarze w programach bf, ze względu na nieoczekiwany wynik, powinny zostać teraz naprawione. Jeśli ktoś ma problem z usunięciem swoich komentarzy, zgłoś się.
EDYCJA 2 : Ponieważ spowodowało to tajemniczy czas działania na moim dość wolnym komputerze, skróciłem limit czasu z 100000 cykli do 10000 cykli. Zresztą nikt nie zmienił wyniku uruchomionej gry.
EDYCJA 1 : Naprawiono błąd w skrypcie konwersji powodujący, że interpreter nie ignorował liczb w komentowanych programach.
Opis
To jest turniej Brainfuck zainspirowany przez BF Joust . Dwa boty (programy Brainfuck) walczą ze sobą na arenie reprezentowanej przez taśmę pamięci. Każda komórka może przechowywać wartości od -127 do 128 i zawijać je na swoich granicach (więc 128 + 1 = -127).
Prawidłowe instrukcje są podobne do zwykłego Brainfuck, co oznacza:
+ : 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
Arena ma rozmiar od 10 do 30 komórek, które są wybierane pseudolosowo w każdej bitwie. Na obu końcach znajduje się „flaga”, która ma wartość początkową 128, podczas gdy wszystkie inne komórki są zerowane. Celem twojego bota jest wyzerowanie flagi wroga przez 2 kolejne cykle, zanim wyzeruje twoją własną flagę.
Każdy bot zaczyna od własnej flagi, która jest komórką [0] z jego własnej perspektywy. Przeciwnik znajduje się po drugiej stronie taśmy.
[ 128 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 ]
^ ^
my bot other bot
Oba boty wykonują swoje działanie jednocześnie, jest to uważane za jeden cykl. Gra kończy się po 10000 cyklach lub gdy tylko zostanie spełniony jeden z warunków wygranej. Jeśli jeden z programów osiągnie koniec, po prostu przestanie robić wszystko do końca gry, ale nadal może wygrać.
Warunki wygranej
Twój bot wygrywa pod jednym z następujących warunków:
- Flaga twojego wroga jest zerowana przed twoją
- Twój wróg przesuwa swój wskaźnik z taśmy (wykonuje
>
na twojej fladze lub<
sam) - Wartość twojej flagi jest daleko od zera niż wartość flagi przeciwnika po 10000 cyklach
Zasady
Twój post powinien zawierać nazwę twojego bota i jego kod.
- Aby zwiększyć czytelność kodu, możesz użyć następującej składni skrótu:
- np.
(+)*4
jest taki sam, jak++++
jest to ważne dla każdej instrukcji z wyjątkiem niedopasowanych nawiasów w nawiasach, ponieważ logika pętli koliduje z logiką skrótów. Użyj[-[-[-
zamiast([-)*3
- np.
- Każda inna postać niż
+-><[].
jest komentarzem i dlatego jest ignorowana, z wyjątkiem()*
skrótów
Boty niezgodne z zasadami zostaną wykluczone z turnieju.
- Dozwolone jest tylko podstawowe Brainfuck, bez innych wariantów, które wspierają procedury lub operacje arytmetyczne
- Kod źródłowy twojego bota nie powinien zawierać niedopasowanych nawiasów
Możesz zapoznać się z podstawowymi strategiami, ale nie używaj kodu innej osoby dla własnego bota.
Punktacja
Wynik bota zależy od liczby wygranych w stosunku do wszystkich innych botów. Spotkanie między dwoma botami składa się z 10 meczów o różnych długościach taśmy pamięci, co daje maksymalny wynik 10 punktów na spotkanie. Remis nie daje punktów za ten mecz.
Program sterujący
Program sterujący możesz znaleźć na github, wraz z pełnymi dziennikami z bitew. Tabela wyników zostanie opublikowana tutaj po wygenerowaniu.
Sklonuj repozytorium i sam wypróbuj swojego bota przeciwko innym. Użyj, python Arena.py yourbot.bf otherbot.bf
aby uruchomić mecz. Możesz modyfikować warunki za pomocą flag wiersza poleceń -m
i -t
. Jeśli twój terminal nie obsługuje sekwencji ucieczki ANSI, użyj --no-color
flagi, aby wyłączyć kolorowe wyjście.
Przykładowe boty
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
DecoyBot wygra każdy mecz z taśmą o długości większej niż dziesięć, ponieważ FastClearBot może uniknąć małych wabików, ale nie większych. Jedyną sytuacją, w której FastClearBot może wygrać z DecoyBotem, jest sytuacja, gdy jest wystarczająco szybki, aby dotrzeć do flagi wroga, zanim jego przeciwnik zgromadzi duże wabiki.