BrainF *** edBotsForBattling - Turniej Brainf ***


88

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. (+)*4jest 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
  • 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.bfaby uruchomić mecz. Możesz modyfikować warunki za pomocą flag wiersza poleceń -mi -t. Jeśli twój terminal nie obsługuje sekwencji ucieczki ANSI, użyj --no-colorflagi, 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.


5
Oryginalny, podoba mi się. Obawiam się, że nie pozwoli to na wystarczającą strategiczną głębię, ale to może być tylko ja.
Augıʇǝɥʇuʎs

11
Z Befunge byłoby jeszcze więcej zabawy .
IchBinKeinBaum

6
Znalazłem BF potyczki stronę internetową , która może uruchomić i wizualizacji podczas turnieju mecze.
PhiNotPi

4
Dzięki za hosting tego KOTH, Cipher. Musi być dużo pracy przy tylu zgłoszeniach.
AndoDaan,

3
Wolę wszystkim podziękować za udział ^ ^
Cipher

Odpowiedzi:


18

Nyuroki Magical Fantasy

Myślę, że najwyższy czas zacząć poważnie ~ Skończyłem mój kompilator na trochę HLL, aby ułatwić pisanie programów BF Joust. To była moja pierwsza poważna próba zrobienia czegoś z tym. Koncepcja bota jest dość prosta. Ustawia kilka wabików o różnej polaryzacji, a następnie wariuje z dużym poruszeniem z wyraźnym odwróconym przesunięciem pośrodku.

Nawiasem mówiąc, oczekiwany wynik to około 577 punktów w porównaniu ze wzgórzem ostatniej rundy. To 93% wskaźnik wygranych. <3

Opracowano | Kod źródłowy

Nyuroki Magical Fantasy by Lymia Aluysia
Released under the terms of MIT license

>>>>>>>>++<--<+<--<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+<-------------------------------------------------------------<---------------
----------------------------------------------<++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++<(-)*19(>)*8(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-
[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[
+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-
[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[
-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3
+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[
-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>
[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[
-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*
82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(
-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[
+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+
[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[
+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-
[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[
+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-
[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*
41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[
(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[
-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-
[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[
-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.]
.]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[
-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+
[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[
+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+
[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16
+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+
[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[
-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+
[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[
-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-
[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+
[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-
[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[
-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-
[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82
[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)
*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[
+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+
[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[
+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(
+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[
+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]-->[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[
-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+
[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]--)*2]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]--)*3]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]--)*4]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*5]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*6]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*7]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*8]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*9]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]--)*10]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]--)*11]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)
*12]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*13]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*14]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*15]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*16]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]--)*17]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]--)*18]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]--)*19]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*
20]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*21

Edycja : Wycisnąłem kilka zwycięstw z Nyuroki.

Edycja 2 : Hej, spójrz, zrobiłem to jeszcze raz!

Edycja 3 : Po dłuższej walce z głupim błędem analizy w Arena.py, w końcu dostałem kolejną poprawę w ~ To właśnie rozumiem przez „czas na poważność”, wiesz. <3


Wygląda na to, że Loke wymaga korekty :-) Uwielbiam swój język. Czy błąd w Arena.py polegał na tym, że miałeś spację między )a *lub między *a a liczbą?
Sylwester

@Sylwester Znacznie gorzej. Pętle idą tam, gdzie nie powinny iść: github.com/redevined/brainfuck/pull/6
Lymia Aluysia

Gratulacje z numerem 1. Trudno wyrównać wskaźnik wygranych na poziomie 92,5%.
Sylwester

Dobra robota, ale czy to nie jest stenograficzne nadużycie? Zagnieżdżone pętle mają efektywnie 21 silni = 5 * 10 ^ 19. Innymi słowy, jest to praktycznie nie do rozszerzenia do podstawowego pieprzenia mózgu.
weston

1
@weston Tak. A większość programów na najbardziej rozwiniętym wzgórzu BF Joust Hill ( codu.org/eso/bfjoust/in_egobot - patrz na przykład smartlock ) jest jeszcze gorsza. Nie jest to szczególnie wielka sprawa, ponieważ jest to rodzaj skrótu. To sprawia, że ​​strategie, które w innym przypadku byłyby nieopłacalne ze względu na samą długość, są wykonalne. :)
Lymia Aluysia

43

Bot maskowania urządzenia

Ten bot w zasadzie próbuje ukryć swoją bazę, dzięki czemu inne boty przejdą tuż obok niej i zejdą z taśmy.

(-)*127(-+--+-++)*12500

4
Bardzo sprytny, musiałem dostosować mojego bota, aby to uwzględnić.
Moop

2
Moim zdaniem jest to jeden z najmądrzejszych tutaj.
Almo

+ f dla pierwszego szlafroka. Nie zauważyłem tego wcześniej po zrobieniu Ràn, ale to podobny pomysł, inna aplikacja.
Sylwester

19

Burly Balder v3

Burly Balder to średnio wolny pośpiech. Robi dwa duże wabiki przed przejściem do trybu szczytu. W trybie szczytu ma pętlę, która wykorzystuje tylko 4 kroki na każdą komórkę zerową, a gdy komórka niezerowa ma analizę przypadków dla [-18,18] przed ślepym zmniejszeniem za pomocą 107 przed wyczyszczeniem za pomocą [-.]. Czyści niezmienioną flagę w 242 krokach, 114 więcej niż niepewny -*128 i 14 mniej niż naiwny [-]czysty. Po wyczyszczeniu komórki kontynuuje pozostawianie śladu -2 wabików. Ma specjalny przypadek tylko dla indeksu 9, aby zaoszczędzić kilka kroków dla gier w rozmiarze 10 i opuszcza komórkę z 1 przynętą.

>((-)*18>)*2                                  Make two minus seventeen decoys
(->)*6                                        Move to cell nine

[                                             special case for ten cell game 
   +[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[       if not minus one to minus eighteen 
   (-)*18                                     decrease by eighteen
   -[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[       if not plus one to plus eighteen
       (-)*107                                decrease by hundred and seven
       [-.]                                   slow clear
   ]]]]]]]]]]]]]]]]]]                         end plus conditionals
   ]]]]]]]]]]]]]]]]]]                         end minus conditionals
]                                             end special case
+
([>                                           while true go right
  [                                           start clear cell 
   +[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[       if not minus one to minus eighteen 
   (-)*18                                     decrease by eighteen
   -[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[       if not plus one to plus eighteen
       (-)*107                                decrease by hundred and seven
       [-.]                                   slow clear
   ]]]]]]]]]]]]]]]]]]                         end plus conditionals
   ]]]]]]]]]]]]]]]]]]                         end minus conditionals
  ]                                           end clear cell
  --                                          set to minus two 
 ]                                            while true end
 -                                           decrease and loop
)*5                                          In case of clash or initial column minus seven is zero

Ciekawostki: Balder jest nordyckim bogiem i synem Odyna. Znany jest głównie z historii swojej śmierci : bał się o swoje bezpieczeństwo, więc inni bogowie próbowali przewidzieć i chronić przed każdym zagrożeniem. W końcu został zabity przez Lokiego, ponieważ podczas gdy chronili go przed mieczami i strzałami, zapomnieli go chronić przed Jemiołą.


2
Twoje wabiki mnie zabijają. Dobra robota.
AndoDaan

1
@AndoDaan Thanks. Twój BeatYouMatebył sprytny. Obawiam się, że wabiki większości botów będą jeszcze większe w następnej rundzie, dopóki nie zostanie ukarana. Być może pojawią się kolejne fajne strategie :)
Sylwester,

2
Problem ze zwiększeniem wielkości wabika polega na tym, że kompromisuje się wydajnością na krótszych taśmach z botami szybkiego ataku. Przy 10 losowych rundach istnieje większe prawdopodobieństwo, że zmieni się w zależności od szybkości ataku innych wejść.
Komintern

2
Tak, wciąż jesteś tym, który pokonasz.
AndoDaan

4
@AndoDaan Przy tylu bogach nordyckich, którzy mnie wspierają, losowe areny wydają się być na moją korzyść :-)
Sylwester

13

EvoBot 1

Jest to prosty bot stworzony za pomocą algorytmu genetycznego. Zacząłem od szablonu, a mój program powoli dostosowywał liczby, aby stworzyć lepszego bota-wojownika. Poniższy kod został edytowany w celu zwiększenia czytelności.

>+>---(>)*6(>[+++[-]])*30

Wykorzystałem inne prace konkursowe do zmierzenia sprawności różnych kandydatów.

Ponieważ była to moja pierwsza próba evobota, zacząłem od prostego szablonu:

>(+)*n>(-)*n(>)*n(>[(+)*n[-]])*30  #template

Przewiduję, że ten bot uzyska wynik w przedziale 50–60.

Obecnie pracuję nad szablonem odwrotnego wabika.

EvoBot 2

Jest to bot utworzony przez ten sam algorytm genetyczny, ale z następującym szablonem:

>>>>(-)*n<(+)*n<(-)*n<(+)*n(>)*8(>[+++[-]])*30  #template

Ten bot wykorzystuje strategię odwrotnego wabienia do ustawienia 4 wabików o różnej wysokości. Powstały bot to:

>>>>(-)*4<(+)*6<(-)*7<(+)*8(>)*8(>[+++[-]])*30

Spodziewam się, że ten nowy bot poradzi sobie lepiej niż poprzednie boty, prawdopodobnie zdobywając wynik w latach 70. (prawdopodobnie znacznie wyższy niż ten, ponieważ istnieje wiele nowych wpisów).


2
+1 dla algorytmów genetycznych. Mam w nich wielką wiarę. Mam nadzieję, że twoje boty mają się dobrze.
AndoDaan

12

Alternator

Zakłada, że ​​większość ludzi wyzeruje komórkę, dodając ją lub odejmując, więc średnio każda komórka zajmie 128 obrotów do zera.

(>+>-)*4>+(>[-][.])*21

Wersja z adnotacjami

(>+>-)*4       Move eight squares alternating polarity    
>+             Move one more
(
    >          Move to the next square
    [-]        Zero it
    [.]        Wait while it is zero
)*21           Repeat

Cholera, twoje ostatnie zmiany poprawiają wskaźnik wygranych Alternatora przeciwko Geronimo z ~ 60% do ~ 90%. Miły.
Ingo Bürk

tak, poruszałem się 18 razy, kiedy to zrobiłem (> +> -) * 9, więc spadnie z taśmy. Głupi błąd.
Moop

Nawet ochrona Geronimo przez naprzemienne dodawanie / odejmowanie do zera komórka w ogóle nie zmienia mojego wskaźnika wygranych. Zwycięzcą może być alternator - używa kilku cylindrów, aby ustawić dość trudną do złamania pułapkę.
Ingo Bürk,

Hej, popraw mnie, jeśli się mylę, ale czy ten bot nie zejdzie automatycznie z planszy, jeśli plansza ma 10 długości? Porusza się o 10 kwadratów przed próbą wyzerowania czegokolwiek.
Boschman

11

Więc ktoś tutaj używa algorytmu genetycznego, aby spróbować tworzyć programy tutaj. Cóż ... dawno temu napisałem ewolucję BF Joust dla stałego skoku w kanale IRC. Postanowiłem spróbować również w tym konkursie ~

I ... w przeciwieństwie do innej osoby z ewolucją, moja ewolucja może faktycznie zmienić więcej programu niż liczbę powtórzeń. :)

NestDarwin (generacja 309)

To najlepszy wynik, jaki do tej pory wymyślił mój ewolucja. Nie jestem pewien, jak bardzo struktura zagnieżdżona pomaga w tym przypadku, ale takie konstrukcje były tym, co ewolucja ma zrobić. Oczekiwany wynik na skoczni 27.08.2014 to 474 punkty. (Obliczane przez uruchomienie bitwy na wszystkich 21 długościach taśmy i pomnożenie przez 10/21. Zauważ, że nie jest to normalizowane ze względu na fakt, że na tym wzgórzu jest jeden dodatkowy program)

(-)*5(>[(-)*4----[.+]]--((-)*5(>[(-)*4----[.+]]--((-)*5(>[(-)*4----[.+]]--((-)*5(>[(-)*4----[.+]]--)*10000)*10000)*10000)*10000)*10000)*10000)*10000

EDYCJA : Zmieniono listę programów, które chcę wejść na to wzgórze. Ran ewoluował przez noc. :)


EDYCJA 2 : Poszedłem i ręcznie przeanalizowałem dane wyjściowe ewolucji. Mimo że wygląda zupełnie inaczej, NestDarwin jest w zasadzie zoptymalizowaną wersją TinyDarwin ... Ręcznie zminimalizowaną (z identyczną funkcjonalnością) i przeanalizowano:

(-)*5                     Break stuff that assumes flag size.
(>[(-)*8[.+]](-)*7)*3     Make a few larger decoys next to our flag. 
                          The clear loop is basically dead code here.
                          Few things are going to approach so fast, so.
(>[(-)*8[.+]](-)*2)*10000 And go on an rampage with an offset clear!
                          I presume the slow clear is to beat tripwires.

Tak więc prawie identyczny program wyglądałby następująco ... co jest w zasadzie superoptymalizowaną wersją TinyDarwin.

(-)*5(>.(-)*7)*3(>[(-)*8[.+]](-)*2)*10000

TinyDarwin przedstawiał się następująco. Nie bardzo inaczej, prawda? Po prostu wyciągnę go ze wzgórza. Myślałem, że to jest wyraźne, ale ... no cóż, myliłem się.

((-)*5>[(-)*4.[+.]].)*10000

Staje się oczywiste, że obecna skocznia nie jest wystarczająco silna, aby mogła ewoluować o wiele bardziej skomplikowane rzeczy. :(


1
Gratulacje z pierwszym miejscem. Czy program genetycznego algo jest w stanie wykorzystać twoją aktualną wersję jako szablon i kontynuować wprowadzanie nowych wersji, aby ją jeszcze bardziej ulepszyć?
Sylwester

Świetna robota z pierwszym miejscem. Cieszę się, że algorytm genetyczny (cóż, jego spawn) znalazł się tam!
AndoDaan

Teraz, jeśli moglibyśmy wziąć pod uwagę wyniki wszystkich gier, ewoluować dalej, dodać trochę uczenia maszynowego ... to my, żałośni ludzie, nie będziemy już mieć żadnych szans: P
Sp3000,

@Sylwester Sortuj według? Moja wewnętrzna reprezentacja wykorzystuje (słabo przemyślany) system aktywacji genów, który powinien pozwolić mu rozwinąć nadbudowę (aw praktyce tak naprawdę nie jest). Nie mogę przywrócić końcowego programu i odzyskać wewnętrznej reprezentacji, ale mogę umieścić instrukcje w jednym genie i pozwolić mu kontynuować ewolucję (jakkolwiek to by pomogło).
Lymia Aluysia

@ Sp3000 Niestety mój algorytm ledwo robi postępy na dobrze rozwiniętym wzgórzu ezoterycznym. Byłoby miło, gdybym mógł zrobić coś takiego, ale niestety moja umiejętność algorytmów genetycznych po prostu nie jest wystarczająca. Prawdopodobnie wypuszczę swój ewolwer pewnego dnia, kiedy wyczyszczę wszystkie moje brzydkie hacki.
Lymia Aluysia

10

Niedźwiedź polarny Mk II

Istnieją dwa rodzaje niedźwiedzi polarnych : te, które wpadają w pułapkę i te, które chwytają innych ludzi.

Próbuje odgadnąć polaryzację przeciwnika, a następnie wykorzystuje tę informację do zablokowania przeciwnika w nieskończonej pętli. Działa dobrze przeciwko prostym strategiom czyszczenia i nieco losowo przeciwko innym. Pułapek można dość łatwo uniknąć, więc później mogę dodać strategie tworzenia kopii zapasowych.

>++>- create polar bear traps
[[]]<
[][
[[]]<
(+)*290 (>)*9  (+)*120 (.+)*16 (<)*9
(+)*112 (>)*10 (+)*120 (.+)*16 (<)*10
(+)*112 (>)*11 (+)*120 (.+)*16 (<)*11
(+)*112 (>)*12 (+)*120 (.+)*16 (<)*12
(+)*111 (>)*13 (+)*120 (.+)*16 (<)*13
(+)*111 (>)*14 (+)*120 (.+)*16 (<)*14
(+)*111 (>)*15 (+)*120 (.+)*16 (<)*15
(+)*110 (>)*16 (+)*120 (.+)*16 (<)*16
(+)*110 (>)*17 (+)*120 (.+)*16 (<)*17
(+)*110 (>)*18 (+)*120 (.+)*16 (<)*18
(+)*109 (>)*19 (+)*120 (.+)*16 (<)*19
(+)*109 (>)*20 (+)*120 (.+)*16 (<)*20
(+)*109 (>)*21 (+)*120 (.+)*16 (<)*21
(+)*108 (>)*22 (+)*120 (.+)*16 (<)*22
(+)*108 (>)*23 (+)*120 (.+)*16 (<)*23
(+)*108 (>)*24 (+)*120 (.+)*16 (<)*24
(+)*107 (>)*25 (+)*120 (.+)*16 (<)*25
(+)*107 (>)*26 (+)*120 (.+)*16 (<)*26
(+)*107 (>)*27 (+)*120 (.+)*16 (<)*27
(+)*106 (>)*28 (+)*120 (.+)*16 (<)*28
(+)*106 (>)*29 (+)*120 (.+)*16 (<)*29
(+)*106 (>)*29 [-]
]<
(-)*290 (>)*9  (+)*120 (.+)*16 (<)*9
(-)*112 (>)*10 (+)*120 (.+)*16 (<)*10
(-)*112 (>)*11 (+)*120 (.+)*16 (<)*11
(-)*112 (>)*12 (+)*120 (.+)*16 (<)*12
(-)*111 (>)*13 (+)*120 (.+)*16 (<)*13
(-)*111 (>)*14 (+)*120 (.+)*16 (<)*14
(-)*111 (>)*15 (+)*120 (.+)*16 (<)*15
(-)*110 (>)*16 (+)*120 (.+)*16 (<)*16
(-)*110 (>)*17 (+)*120 (.+)*16 (<)*17
(-)*110 (>)*18 (+)*120 (.+)*16 (<)*18
(-)*109 (>)*19 (+)*120 (.+)*16 (<)*19
(-)*109 (>)*20 (+)*120 (.+)*16 (<)*20
(-)*109 (>)*21 (+)*120 (.+)*16 (<)*21
(-)*108 (>)*22 (+)*120 (.+)*16 (<)*22
(-)*108 (>)*23 (+)*120 (.+)*16 (<)*23
(-)*108 (>)*24 (+)*120 (.+)*16 (<)*24
(-)*107 (>)*25 (+)*120 (.+)*16 (<)*25
(-)*107 (>)*26 (+)*120 (.+)*16 (<)*26
(-)*107 (>)*27 (+)*120 (.+)*16 (<)*27
(-)*106 (>)*28 (+)*120 (.+)*16 (<)*28
(-)*106 (>)*29 (+)*120 (.+)*16 (<)*29
(-)*106 (>)*29 [-]

Możesz zmniejszyć rozmiar kodu o połowę (]< (+)*290 (>)*9 ... [-])*2?
Sylwester

@Sylwester Nie mogę, ponieważ druga połowa używa, +a druga używa -.
Mika Lammi

Niedźwiedź polarny nie radzi sobie dobrze z
czyszczeniem

@ Sp3000 Czy na pewno? Próbowałem z kilkoma przesunięciami i polaryzacjami (jak [(+)*3[-]], [(-)*6[+]]) i działa świetnie (przynajmniej w przypadku dość małych przesunięć).
Mika Lammi

Och, wiem co jest nie tak: / Próbowałem programów, >>>>>>>>>((-)*4[+][--.]>)*21które podwójnie sprawdzają komórkę, a ty (+/-)*290powodowałeś uruchomienie drugiej pętli synchronizacji. To nie wina przesunięcia.
Sp3000,

10

Bot pacyfisty

Mój bot wierzy, że przemoc nigdy nie jest odpowiedzią i za wszelką cenę spróbuje uniknąć walki.

(.)*8       Since it takes at least 9 turns for a bot to come to mine, remain idle for 8
>           Skedaddle over one spot
([(>)*8     If a bot has approached, RUN
[(<)*8      If you accidentally ran into a bot, run the other way this time
]].         If it's safe here, chill out
)*6249      keep running until the end of battle, or until tired

8
Pozwoliłem sobie na usunięcie „.” W twoich komentarzach, ponieważ będą one liczone jako kod Brainfuck i sprawią, że twój bot będzie trochę wolniejszy niż to konieczne. Jeśli kropki są celowe, możesz mnie poprawić!
Szyfr

Och, racja
.To

9

Jest tam ktoś?

Okresowo spogląda za siebie, aby ustalić, kiedy wróg zaczął usuwać wabiki, a następnie pędzi naprzód.

Wydaje się, że dobrze sobie radzi, ale nie jestem pewien, czy wynika to ze strategii, czy tylko dlatego, że dodam 10 do każdej komórki przed wyczyszczeniem.

Edycja: Naprawiono problem z logiką. Pierwszy raz pisze program pieprzenia mózgu. Zasługuje na swoją nazwę.

>>>+<(+)*5<(-)*5>>             Initial defense
[                              While he hasn't passed us yet
  (>[([(+)*10[-]]>)*29])*4     Jump ahead four, checking for enemy
  +                            Front marker
  <<<<                         Check behind
  [                            If he hasn't passed us yet
    >>>
    (+)*5<(-)*5                Set decoys in reverse
    <<[-]                  
  ]
  >>>>                         Check ahead
]                              
([-[(+)*10[-]]]>)*29           Clear to the end

+1: To pierwszy bot, który widziałem, który wyciąga wabiki (inne niż +/- 1) poza pierwsze 9 komórek. Na dłuższych taśmach to zabójca. Modernizacja Lightfoot Plodder teraz trochę więcej ...
DLosc

9

WALL-E 2.0

Pędzi do położenia 9 i dodaje do niego 128, wygrywając szybko w arenie rozmiaru 10, jeśli przeciwnik nie zmienił początkowej wartości flagi. Na większych arenach działa to jak duża pułapka. Następnie wypełnia przestrzeń między lokalizacją 9 a własną flagą dużymi wabikami. Po umieszczeniu wabików skanuje w poszukiwaniu niepustych lokalizacji i próbuje je szybko usunąć.

Wersja 2.0 buduje większe wabiki i ma pewną tolerancję na zmianę początkowej wartości flagi. Może również przełączyć się na strategię tworzenia kopii zapasowych, jeśli zacznie wyglądać włochaty.

(>)*9
(+)*128 <
< [ (<)*7 ((-+-)*256)*15 ] > [ (<)*8 ((+-+)*256)*15 ]
(-)*47 < (+)*63 < (-)*72 < (+)*69 <
(-)*84 < (+)*66 < (-)*76 < (+)*66 <
++++ (>)*9 +.+.+.----.-.-. (>[-[++[(+)*124.+.+.+.+.+.+.+.+.>]]])*21

Skuteczność tego bota opiera się na dwóch faktach:

  1. Większość botów nie zmienia początkowej wartości swojej flagi.
  2. Budowanie dużych wabików jest szybsze niż ich usuwanie.

Te ściany mnie zabijają
Sp3000,

9

Lethal Loke V2.1 (with Jemioła)

Jest to oczywiście zabójczy bot i zabija nie tylko piękną, krzepką Balder a jemiołą, ale wygrywa prawie za każdym razem z innymi botami. Jest to połączony średni i szybki pośpiech. Mój test daje mi wynik 567

Skompilowany plik BFJ do bitwy , źródło generatora rakiety BFJ:

#lang racket
;; bare minimum bfj support
(define (bf . args)
  (apply string-append 
         (map (lambda (x) 
                (if (number? x)
                    (number->string x)
                    x))
              args)))

(define (dup x num)  
  (let loop ((n num) (lst '()))
    (cond ((< n 0) (error "Negative n"))
          ((zero? n) (apply bf lst))
          (else (loop (sub1 n) (cons x lst))))))


;; Useful procedures
(define (wiggle amount default-zero n)
  (let rec ((n n))
    (if (zero? n)
        ""
        (bf "["
            (dup "-[" amount)
            (bf "(+)*" amount)
            (dup "+[" amount)
            default-zero
            ">"
            (rec (sub1 n))
            (dup "]" (* amount 2))
            "]"))))

(define (goto from to)
  (let* ((dst (- to from))
         (op (if (> dst 0) ">" "<"))
         (abs (if (> dst 0) dst (- dst))))
    (if (= from to) 
        ""
        (bf "(" op ")*" abs))))

(define max-position 30)
(define initial-decoy  "(-)*17")
(define small-decoy "(+)*10")
(define large-decoy "(-)*32")
(define flag-position 7)
(define decoy-phase-end-position 14)
(define wiggle-amount 8)
(define plodd-clear "..(+)*120(+.)*27>")
(define plodd-inner-clear (bf "(+)*" 
                              (- 78 wiggle-amount) 
                              "..(+)*42(+.)*27"))
;; Main body of Loke V2
(define (generate-loke2)
  (bf ">" 
      initial-decoy
      ">->+>->+>->"
      (let gen-rec ((n flag-position) (p #t))
        (if (> n decoy-phase-end-position)
            (bf (medium-slow n))
            (bf "[" 
                (medium-slow n)
                "]" 
                (if p small-decoy large-decoy)
                ">"
                (gen-rec (+ n 1) (not p)))))))

;; Retreat goes back to home
;; leaving a trail of flags
;; from flag position
(define (medium-slow last-index)
  (bf (goto last-index 2)
      (let medium-rec ((n 2) (p #f))
        (if (= n flag-position)
                (fast-rush n last-index)
            (bf (if p "-" "+")
                "[" (fast-rush n (max 9 last-index)) "]" 
                (if p small-decoy large-decoy)
                ">"
                (medium-rec (+ n 1) (not p)))))))

(define (fast-rush cur-position last-known)
  (bf (goto cur-position last-known)      
      "([" plodd-clear 
      "("
      (wiggle wiggle-amount
              plodd-inner-clear 
              (- max-position last-known 1))
      ">)*" (- max-position last-known)
      "]>)*" (- max-position last-known)))

(display (generate-loke2))

Ciekawostki : Loke (Loki) to bóg w mitologii nordyckiej, który lubi bawić się ze wszystkimi i oszukiwać ich. Jest zmiennokształtnym (na zwierzęta i ludzi) i zwykle idzie własną drogą. W opowieściach często podróżuje i pomaga innym bogom, robi małe sztuczki i porusza różne rzeczy. Oprócz zabicia Baldera spłodził Hel (boginię Piekła / Helvete), bestię Fenrir i Węża Midgardu, który rozpoczyna Ragnarok (norse armageddon).

Jak to działa

Na początku robi duży (-17) wabik, a następnie tworzy +-wzór aż do indeksu 7. Skanuje do przodu od do 13, pozostawiając ślad (+ 10, -32) + wabików, ale kiedy wykryje zestaw, przerwie i rozpocznij średni poziom szczytu. Jeśli nie zostaną ustawione żadne komórki, rozpocznie on także tryb powolnego * 3 szczytu.

* 1 W trybie średniego szczytu wykrył aktywność przeciwnika w jednym z indeksu 7-13 i zaczyna od indeksu 2. Niektórzy przeciwnicy pozostawiają zero, a inni pozostawiają inną wartość, a teraz mają środki do wykrycia aktywności przeciwnika przed podjęciem wabików indeks 2-6 (-32, + 10) +. Jeśli komórka nie ma oczekiwanej wartości (-1, 1) lub skończył robić wszystkie wabiki, przechodzi w tryb szybkiego * 2 szczytu.

* 2 Tryb szybkiego pośpiechu, którego oczekuje, że został wykryty, więc wabiki nie będą działać. Mamy nadzieję, że te, które już ustawiliśmy, powstrzymują przeciwnika i koncentrują się na przepuszczaniu przeciwników. Zaczyna pędzi w najdalszym znanym nam punkcie na podstawie poprzedniego skanowania [9,14] lub indeksu 9, jeśli zostaliśmy stworzeni wcześniej. Ma specjalny przypadek dla pierwszego wabika, w którym po prostu dodajemy 120 i plodę 27, ponieważ nie chce on zmniejszać tej wartości poniżej zera, ponieważ jest to pułapka, ale dla każdego wabika po tym, jak poruszymy się w [-8,8], zanim zwiększymy 120 i krok po kroku 27 kroków, kontynuując przejście do następnej komórki.

Tryb powolnego szczytu został usunięty, ponieważ nie wpłynął on na wynik z bieżącej skoczni i sprawia, że ​​mój bot jest nieco mniejszy (ale niewiele).


3
Teraz zaczynamy widzieć szaleństwo. Lubię to.
Sp3000,

@ Sp3000 YandereBotv2 był powodem, dla którego musiałem myśleć o nowym, oprócz tylko zwiększenia wartości wabików i wahań. Miał wyższy percentyl wygranej w porównaniu z przeszkodą niż wszystkie boty w ostatniej rundzie, więc po prostu nie miałeś szczęścia z rozmiarami areny.
Sylwester

Achaha, może - myślę, że potrzebuję kontrplanu wobec ciągle rosnących rozmiarów wabików: / Naprawdę podoba mi się to, jak masz różne tryby
Sp3000

westchnienie . Będę musiał sprawić, by mój HLL dla BF Joust działał lepiej, aby mój ewolucja mógł znów mieć szansę. Gratulujemy # 1 ~
Lymia Aluysia

@LymiaAluysia Thanks. Byłem bardziej zaskoczony Balderem. Liczę na nowe wersje NestDarwin, YandereBot i Mickey :-)
Sylwester

8

Geronimo

Jest nawet bardziej ofensywny niż bot BestOffense Kaine'a, ponieważ nie buduje żadnej obrony. Strategia jest następująca: inni będą starali się być sprytni, ale bycie sprytnym wymaga cykli. Przejdźmy więc do części, w której wiemy, że jest wróg i wyczyść wszystko, co znajdziemy.

(>)*9(>[-])*21

Wydaje się, że wygrywa większość meczów z przykładowymi botami PO i botem Kaine'a.


7

SternBot

Właściwie półpoważny bot, teraz, gdy wszystko się zaczęło. Odnosząc się do symetrycznej natury niektórych z tych botów.

(>->+>)*3(>[+]>[-])*21

1
SternBot daje mi problemy z parzystością :(
Sp3000,

7

DoNothingBot

Najlepszą obroną (...) jest ignorancja.

.

Nic nie robi.

EDYCJA: Wow, byłem zaskoczony, widząc, że wykonał lepszą pracę niż więcej niż co najmniej 20% wszystkich botów =) (Czy to oznacza, że ​​używa lepszej strategii, czy ...?)


2
Niektóre inne boty podejmują samobójstwa na małych arenach. na przykład. Hazardzista trafia bezpośrednio do 20. komórki, a dla gier z 10-19 przegra, nawet przeciwkoDoNothingBot
Sylwester

2
Z ciekawości przebiegłem to przez mój tester (odtwarza wszystkie długości taśmy) w stosunku do innych wpisów. Oto ściana wstydu ... +1
Comintern

Haha, dziękuję za podzielenie się - spodziewałem się, że może być jedna lub dwie czarne owce, ale nie spodziewałem się, że „pokona” tyle botów =)
wada

7

CounterPunch - edytowany

Zrównoważona kombinacja budowania silnej obrony, a następnie ataku.

(+)*6>(-)*12(>)*7(<(-)*12<(+)*12)*3(>)*7(([-([(-)*6[+.]])*5])*4>)*21

Adnotacja:

(+)*6                             Switch polarity of the flag
>(-)*12                           Build a quick decoy in front of the flag
(>)*7(<(-)*12<(+)*12)*3           Hop out and start building decoys backward
(>)*7                             Tally ho!
(([-([(-)*6[+.]])*5])*4>)*21      Clear toward the opposite end

Broni podobnie jak Backtracker @ Geobit , ale broni się przed szybkimi atakującymi, najpierw stawiając szybki wabik przed flagą.

Atak to zagnieżdżanie z przeciwną polaryzacją, aby szybko usunąć wabiki o niewielkich wartościach. Najgorszym scenariuszem powinna być wabik 64 (każda z biegunowości).

Edycja 1: Popraw skuteczność ataku przeciwko wabikom (miał błąd logiczny podczas przełączania polaryzacji).

Edycja 2: Testowanie wskazuje, że pauza działa nieco lepiej w najbardziej wewnętrznej pętli.


6

Backtracker

Odwrotna strategia wabika. Zacznij układać wabiki od przodu z tyłu, aby nikt nie przeskakiwał nad resztą, kiedy je buduję.

Jeśli plansza jest mniejsza niż około 20, nie działa to przeciwko botom z szybkim atakiem, ponieważ miniemy się, zanim zacznę wabić.

(>)*9((-)*4<+<-<(+)*4<)*2(>)*8(>[-])*21

(>)*9                   Jump ahead 9
((-)*4<+<-<(+)*4<)*2    Lay down alternating polarity/size decoys for 8 spots behind
(>)*8                   Jump back forward
(>[-])*21               Clear until flag

Uwaga: nie mam BF, ale to tak robi mi to, co chcę. Jeśli nie, pozwól mi teraz.


6

Nie można tego dotknąć

Jest to program zorientowany na obronę, który próbuje ustalić, w jaki sposób przeciwnik oczyszcza komórki, i buduje wabik o odpowiedniej wielkości.

>---    create 1st decoy
>+      decoy for timing
>+      decoy for waiting
[]<     tripwire activated!
[<-->]  increase size of 1st decoy while opponent clears 2nd decoy
(>)*8   attack!
[+(<)*9(+)*20(>)*9]    slowly clear, while going back to stop enemy progress
>[+(<)*10(+)*22(>)*10]
>[+(<)*11(+)*24(>)*11]
>[+(<)*12(+)*26(>)*12]
>[+(<)*13(+)*28(>)*13]
>[+(<)*14(+)*30(>)*14]
>[+(<)*15(+)*32(>)*15]
>[+(<)*16(+)*34(>)*16]
>[+(<)*17(+)*36(>)*17]
>[+(<)*18(+)*38(>)*18]
>[+(<)*19(+)*40(>)*19]
>[+(<)*20(+)*42(>)*20]
>[+(<)*21(+)*44(>)*21]
>[+(<)*22(+)*46(>)*22]
>[+(<)*23(+)*48(>)*23]
>[+(<)*24(+)*50(>)*24]
>[+(<)*25(+)*52(>)*25]
>[+(<)*26(+)*54(>)*26]
>[+(<)*27(+)*56(>)*27]
>[+(<)*28(+)*58(>)*28]

Obecnie pracuję nad wersją, która może wygrać przeciwko obu biegunom.


6

ImpatientTripwire (alias YandereBot)

Próbuje być tripwiresem, aby mógł kłaść wabiki (głównie) o odpowiedniej polaryzacji, ale poddaje się, jeśli trwa zbyt długo i zakłada, że ​​jesteś przeciwny parzystości. Ma odwrotny drut trójdrożny dla małych desek.

(+)*5                                     Toggles the base
>-                                        Sets up reverse tripwire
>>++>-->                                  Sets up basic decoys    
(+)*20                                    Makes a massive antioffset tripwire
(([)*150                                  Waits for a while
    <<<<                                  Goes to check on the other tripwire
    +[
      <                                   Bot found you and is furious
      ((+)*128 (>)*9 (+.)*55 (<)*9)*5     Tries to tie you up
      ((+)*128 (>)*10 (+.)*54 (<)*10)*5   And torture you
      ((+)*128 (>)*11 (+.)*53 (<)*11)*5   As it destroys the world
      ((+)*128 (>)*12 (+.)*52 (<)*12)*5
      ((+)*128 (>)*13 (+.)*51 (<)*13)*6
      ((+)*128 (>)*14 (+.)*50 (<)*14)*6
      ((+)*128 (>)*15 (+.)*49 (<)*15)*6
      ((+)*128 (>)*16 (+.)*48 (<)*16)*6
      ((+)*128 (>)*17 (+.)*47 (<)*17)*6
      ((+)*128 (>)*18 (+.)*46 (<)*18)*6
      ((+)*128 (>)*19 (+.)*45 (<)*19)*6
      ((+)*128 (>)*20 (+.)*44 (<)*20)*6
      ((+)*128 (>)*21 (+.)*43 (<)*21)*6
      ((+)*128 (>)*22 (+.)*42 (<)*22)*7
      ((+)*128 (>)*23 (+.)*41 (<)*23)*7
      ((+)*128 (>)*24 (+.)*40 (<)*24)*7
      ((+)*128 (>)*25 (+.)*39 (<)*25)*7
      ((+)*128 (>)*26 (+.)*38 (<)*26)*7
      ((+)*128 (>)*27 (+.)*37 (<)*27)*7
      ((+)*128 (>)*28 (+.)*36 (<)*28)*8
      ((+)*128 (>)*29 (+.)*35 (<)*29)*8      
    ]-
    >>>>)*2                                 Waits again
      <(+)*20                               Bot got stood up, is sad
      <(+)*20                               Sets up some decoys
      <(+)*20                               Grabs a knife
      <(-)*20                               Licks the blade
      <(-)*5                                Locks the house
      >>>>>>>>                              Goes to hunt you down
     (
       >                                    Start searching
       [
         +[+[+[                             Search from minus three
         ---
         -[-[-[                             To plus three
         (-)*17                             If that's no good, do an offset
         [+]                                Clear by adding
         [-.--]                             Just in case
         ]]]]]]                             I would duplicate the program to skip these like at
       ]                                    the bottom but the file would get too large
       [--.---]                             Also just in case
       -                                    Leave a small trail
     )*22
(
  ]                                         Skip the bracket closing
  <(-)*20                                   Bot found you and is happy
  <(-)*20                                   Has just the perfect presents for you
  <(-)*20                                   You like decoys right?
  <(+)*20                                   Here's a plus one in case you are sneaky
  <(-)*5
  >>>>>>>>                                  Time to hunt you down

  (>[+[+[+[----[-[-[(-)*17[+][-.--]]]]]]]][--.---]-)*22
)*300

Aktualna wersja: 1.3 - zredagowana, by lepiej radzić sobie na mniejszych planszach, kosztem przegrywania gier z powodu przemykania się wrogów podczas sprawdzania drutów

Poprzednie wersje: 1.2.1

(Potrzebuję lepszego jasnego algorytmu: /)


1
OMG 411k w pełni rozwinięty i usunięty: -O Kod chipera po prostu się na tym opiera.
Sylwester

Właśnie zmieniłem kilka komentarzy, aby teraz
działał

od ostatniej edycji niepasujące nawiasy kwadratowe w nawiasach zachowują się dziwnie, ponieważ logika pętli koliduje z logiką skrótów. czy mogę zmienić konstrukcje jak w ([)*300przeszłości [[[ and so on?
Szyfr

@ Szyfruj Tak, idź do niego - chociaż wersja pastebin powinna być dokładnie taka
Sp3000

1
3 miejsce to miłe miejsce do wejścia. Dobra robota.
AndoDaan

5

Lightfoot Plodder - EDYCJA

Oparty na Plodder , ten szybki behemot jest w stanie „szybko przewinąć” przez kolejne 0, aż osiągnie coś niezerowego (w tym momencie zacznie plodować zgodnie z oczekiwaniami).

Teraz ulepszone dzięki bardziej niezawodnemu algorytmowi skimmingu, który umożliwia także szybkie przewijanie małych wabików i własnych większych wabików.

Edycja # 2 : Teraz może wrócić do przeglądania, jeśli znajdzie więcej kieszeni zer.

>(-)*4
>(-)*7
>(-)*4
>(+)*7
>(-)*17
>(+)*3
> -
>(-)*10
>(+)*16[-]<-
([
[>>
 [+
  [--
   [+++
    [<+>(+)*14[-]]
   ]
  ]
 ]<-
]>>
[(+)*126(+.)*4>]
<]+)*10

Niezła „wygodna” zmiana rozmiaru :)
Lily Chung

@IstvanChung Bardzo wygodne. ;) Każde dalsze spowolniłoby mnie zbytnio, tracąc punkty na kilka innych botów. Jeśli zwiększysz Biggera, nie sądzę, żebym starał się dotrzymać kroku.
DLosc

Cóż, podniosłem nieco rozmiar, aby zobaczyć, jak to działa. Myślę, że Bigger może zdjąć jeszcze większy rozmiar, ale nie mam czasu, aby go dokładnie przetestować. Powodzenia!
Lily Chung,

Uwielbiam środek zaradczy przeciwko botom Cloacking i fakt, że tak naprawdę wygląda to jak programowanie BF :)
Sylwester

5

Niechętny Rán v2

Strategia jest łatwa. Postaraj się, aby przeciwnik pomyślał, że jego flaga jest wabikiem i wyprzedza planszę i jest luźna (rodzaj drutu / wibratora). Po 10 pełnych rundach poddaje się i próbuje ustalić, czy przeciwnik znajduje się pod jej flagą, a jeśli nie, zrobi -17 wabików, dopóki nie trafi w ustaloną komórkę. Metoda czyszczenia, której używa, jest specjalnym przypadkiem dla [-12,12] i zaczyna plodować podobnie jak Loke.

>>-<<                                  set a flag
(.)*11                                 wait for sixteenth step
((-)*256)*10                           reduce by ten rounds
                                       We give up check flags
> [(>)*7                               detected fast rush mode
    (-[>[
        -[-[-[-[-[-[-[-[-[-[-[-[       from plus one to twelve
        (+)*12                         reduce by twelwe
        +[+[+[+[+[+[+[+[+[+[+[+[       from minus one to twelve
          (+)*66..(+)*41(+.)*17>       increase and plod
        ]]]]]]]]]]]]]]]]]]]]]]]]]-])*3 
  ](-)*31
>+[(>)*6                               detected fast rush mode
    (-[>[
        -[-[-[-[-[-[-[-[-[-[-[-[       from plus one to twelve
        (+)*12                         reduce by twelwe
        +[+[+[+[+[+[+[+[+[+[+[+[       from minus one to twelve
          (+)*66..(+)*41(+.)*17>       increase and plod
        ]]]]]]]]]]]]]]]]]]]]]]]]]-])*3 
  ](-)*21
[>[                                    propably a trapper so we move slow
    ..+..-(+)*119(+.)*17               plodd the first cell so we dont go to zero on low positive
    ([>[
        -[-[-[-[-[-[-[-[-[-[-[-[       from plus one to twelve
        (+)*12                         reduce by twelwe
        +[+[+[+[+[+[+[+[+[+[+[+[       from minus one to twelve
          (+)*66..(+)*41(+.)*17>       increase and plod
        ]]]]]]]]]]]]]]]]]]]]]]]]]-]-)*3 
  ](-)*17
]

Ciekawostki: Rán to bogini mitologii nordyckiej, która zabiera żeglarzy, zanim umrą na morzu.


5

Mickey V4

W przypadku V4 zastosowałem tę samą metodę, co V3, w stosunku do zaktualizowanych botów, ale z bardziej równoczesnymi populacjami (30, a nie 10).

Opracowany przeciwko wszystkim 60 botom , w tym BurlyBalderV3i LethalLoke(ale z wyłączeniem 2botsonecup, którego nie można skompilować przez moją ścisłą implementację).

Odkryłem bardzo różne boty i wskaźniki sukcesu, jeśli zacząłem od różnych losowych nasion. Postanowiłem więc podzielić te różne punkty początkowe na populacje i pozwolić im od czasu do czasu zapylić krzyżowo.

W 1400 pokoleniach 30 równolegle ewoluujących populacji stworzyło ten program:

++>------>->---<<<------------->------>->
---->------------->>--->------<----------
------<------<-<<--<------------->-------
-<-->------>------->----------->---------
----->-------->------->----------------[>
[--[-[+]]]>[--[+]]-]-------[>[--[-[+]]]>[
--[+]]-]<--<------>------->--------------
--[>[--[-[+]]]>[--[+]]-]<--<-------------
--------->------>->-<-----

Obliczam współczynnik wygranych tego bota na 90,0% w stosunku do obecnej uprawy. (Wygrane / przegrane / wyciągnięte długości taśm 1135/125/0).

Informacje o V3

Obliczony wskaźnik wygranych na 89,2% (wygrane / przegrane / wyciągnięte długości taśm 1124/62/74).

Informacje o V2

Program generowania ma teraz analizę, która wskazuje, która część końca programu jest nieużywana i przycina go przed wygenerowaniem z niego kolejnych generacji. Oznacza to, że losowe mutacje występują tylko w używanych częściach programu, a zatem ewolucja przebiega szybciej.

72% w stosunku do obecnej uprawy w tym czasie. (Wygrane / przegrane / wyciągnięte długości taśmy 892/204/143).

Informacje o wersji V1

31500 pokoleń, tylko 12 botów. 65% (taśmy o długości 165/80/7 wygrane / zgubione / wyciągnięte). Używam wszystkich 21 długości taśm.

Potencjalne boty są uszeregowane według:

  • wtedy większość wygrywa;
  • większość losuje wtedy;
  • najkrótszy z możliwych czas;
  • najszybszy wygrany czas

Drobnostki

  • Mickey nosi imię mojego kota i;
  • Parafrazując TS Elliot: The Naming of Cats is a difficult matter, It isn't just one of your brainfuck bots
  • Mój java bf vm i algorytm genetyczny są na github .
  • Vm jest w stanie przeprowadzić pełny turniej w czasie krótszym niż 4 sekundy na jednym rdzeniu i7 (uwaga - wyniki nie zawsze są identyczne z silnikiem turniejowym).

Czy nie byłoby lepiej używać wszystkich 60 botów?
Sylwester

@Sylwester Może nie zrobiłem tego głównie dlatego, że jest tak wolny. Zajęło to dwie godziny. Chociaż ewoluował wolniej, tym więcej botów musiał sobie z tym poradzić. Doszedłem do wniosku, że jeśli uda mu się pokonać najlepszych facetów, będzie dobrze. Nie byłem w stanie przeprowadzić prawdziwego turnieju, aby potwierdzić, problemy z pythonem. Więc pomyślałem, że po prostu to opublikuję i zobaczę ...
weston

@weston Może moglibyśmy pomóc w rozwiązywaniu problemów z pythonem?
Szyfr

@ Dzięki szyfrowi, otworzyłem problem na github github.com/redevined/brainfuck/issues/2
weston

@Sylwester Używam teraz większości botów, ponieważ mój generator jest znacznie szybszy i wielowątkowy.
weston

4

Gracz

Jest to ściśle związane z moim botem Geronimo. Ale tam, gdzie Geronimo gra pewną rzecz, Hazardzista próbuje być szybszy, robiąc to, co robi najlepiej - hazard: Przechodzi do 20. komórki i zaczyna stamtąd zerować.

Oznacza to, że może łatwo stracić tylko dlatego, że arena nie jest tak duża. Ale jeśli tak, być może liczy się kilka cykli.

(>)*19(>[-])*11

Ciekawostka: naprawdę zastanawiałem się nad wejściem do grupy botów, które wyglądają jak (>)*X(>[-])*Ygdzie X in 9..29i gdzie Y = 30 - X. Ale myślę, że wpisanie dwudziestu botów byłoby trochę za dużo :) Lub nawet czterdzieści, gdybym miał dwie wersje, jedną z zerami [+]i jedną, która to robi [-].


Czy liczba taka jak 13 lub 14 nie dawałaby lepszych procentów wygranych niż 20?
Moop

Tak, może. Chcę tylko na środku. Co ciekawe, jeśli pójdę w lewo zamiast w prawo, moje szanse na wygraną znacznie spadną. Spodziewałbym się czegoś przeciwnego.
Ingo Bürk

Ponieważ każdy bot walczy, a następnie dopasowuje się do dowolnego innego bota, nawet 40 z nich nie zwiększyłoby twoich szans tak bardzo - i miałem trudności z kopiowaniem i wklejaniem: D
Szyfr

4

Dumbot

Niezwykle głupi bot, który po prostu miesza się z otoczeniem i ma nadzieję, że boty, z którymi walczy, zejdą z taśmy.

(+)*50(>-)*7(([.])*50(+)*50>)*7([-])*256

(Nie jestem pewien, czy to w ogóle działa - jednak to nie błąd!)

Adnotacje (z tym, co myślę, że robi):

(+)*50      Increase home cell by 50
(>-)*7      For next 7 cells, decrement once
(           Open loop
([.])*50    If cell is non-zero, do nothing. If cell is zero... Still do nothing? I'unno.
(+)*50      Now let's increment it fifty times for some reason.
>)*7        And let's do the above two instructions ten times more, in the next 7 cells
([-])*256    If the cell we're on is non-zero, decrement it continuously and hope it's the enemy.

(Rozłożę się, jeśli wygra to pojedynczą bitwę)


1
twój drugi wiersz faktycznie wyzeruje komórkę przez dodanie, a następnie odejmie jeden siedem razy z rzędu.
dumny haskeller

1
@proudhaskeller Masz rację ... Właśnie to dostaję za próbę zrobienia Brainfuck przy odrobinie snu. Właśnie uprościłem to, zamiast faktycznie opracować, jak to zrobić poprawnie.
Sellyme

4

CropCircleBot

[>>[+][-]-<[-][+]+][>[+][-]<[-][+]++]

Bot ten wykorzystuje zaawansowane algorytmy, które zostały przesłane przez kosmitów poprzez kręgi zbożowe, które umieścili na ziemi. Zmieni ludzkość i zapewni ogromny postęp technologiczny, a nawet rozwiąże wiele problemów środowiskowych.


Wiesz, że nigdy nie powinieneś używać] [, prawda?
CalculatorFeline

Nie wiem, czy możesz wyjaśnić, dlaczego?
flawr

Gdy opuszczasz pętlę, bieżąca komórka wynosi 0. Następnie pomijasz następną pętlę, ponieważ komórka na wskaźniku wciąż ma wartość 0.
CalculatorFeline

Och, zawsze myślałem, że kontrola nastąpi na końcu pętli?
flawr

Występuje również na początku. W niektórych implementacjach [nic nie robi, ale to jest zupełnie inny język (newbiefuck na esolang wiki)
CalculatorFeline

4

BeatYouMate

A ponieważ każdy powinien opublikować bota, który pokona pierwszego bota, który opublikował, oto 5 + bot do wabienia:

(>------>+++++++)*4>([(+)*6[-]]>)*21

4

CleverAndDetermined

>+>-(>+++[-])*21

Ustawia kilka małych pułapek, a następnie biegnie na drugą stronę i próbuje wyczyścić wszystko, powyżej lub poniżej zera. Nie działa ----.


+++wcześniej [-]jest naprawdę sprytny, aby uniknąć prostych pułapek!
Ingo Bürk

Rzucił wyjątek z powodu niedopasowanego (, czy mogę to potraktować jak komentarz?
Szyfr

@ Szyfr Naprawię to, przepraszam.
isaacg

4

MetaJSRandomBot

+[[>-[->+]>>[-]>-<<[>][+]<]+<]->

Ideą tego bota jest zrobienie czegoś całkowicie losowego, co wciąż jest poprawnym kodem js bez zbytniej bezużyteczności. Napisałem następujący kod ( link JSFiddle ) do jego wygenerowania. Zobaczmy, jak dobrze sobie radzi =)

var nchars = 30;
var nbrack = 10;
var alphab = "+ - < >".split(' ');
var s = [];
for(var i=0;i<nchars;i++){
    s.push(alphab[(Math.random()*alphab.length)|0]);
}
var ind1,ind2;
for(var i=0;i<nbrack;i++){
    ind1 = (s.length*Math.random())|0;
    s.splice(ind1,0,'[');
    ind2 = ((s.length-ind1-1)*Math.random())|0 + ind1;
    s.splice(ind2,0,']');
}
s = s.join('')
for(var i=0;i<Math.max(nchars,nbrack);i++){//remove useless stuff
    s=s.replace('[]','');
    s=s.replace('+-','+');
    s=s.replace('-+','-');
    s=s.replace('<>','');
    s=s.replace('><','');
}
alert(s);

4

Ruletka pruska

Rosyjska ruletka postawiła zakład ze swoim przyjacielem Prusakiem, a teraz jego kolej na grę.

>(+)*5(-.[>.[>(-)*10]]>>)*1000

Masz 2 dekrety wskaźnika i tylko 1 przyrost w głównej pętli - to wyskoczy z twojego końca taśmy.
Komintern

2
To wciąż po prostu się wyrzuci.
dumny haskeller

Na początku masz plus, a następnie minus. 2 zmarnowane cykle.
weston

4

Większy

Rozpoczyna się wyścig zbrojeń !!

Zarówno buduje, jak i niszczy ściany o wysokości 16 18 cm, większe niż większość konkurentów. Ma też trochę logiki, by pokonać szlafrok, obrońców flagi, przeciw-alternatory i boty, które przyjmują nietkniętą flagę

+>->+>+>-(>(-)*18>(+)*18)*2(>([(+)*18[-][-[+]]])*2)*21

Wersja z adnotacjami

Off by one
==========
Adjust own flag a little for fun
-

Decoy stage
===========
Build decoys

>->+>+>-        Add four quick walls to deter rushers
                Also throw off bots depending on the alternation
(>(-)*18
 >(+)*18)*2     Build four large decoys

Clear stage
===========
(               Repeat the following forever:
  >             Move forward
  ([            Skip if the space is zeroed already
      (+)*18    Bust negative decoys smaller than 18
      [-]       Clear
      [-[+]]    Check that the wall is actually cleared; if it isn't,
                clear in the opposite direction to defeat bots that try
                to sense our clear direction and defend the flag
  ])*2          Repeat the "non-zero" check to guard against the cloaker
)*21

3

PatientBot

Częściowo poważny bot. ten bot spróbuje wygrać do limitu 100 000 cykli. pójdzie pod flagę wroga, stawiając na drodze kilka pułapek, nieco ją zmniejszy, wróci i będzie bronić flagi.

>++>->->+>+>->->+(>+[-[-[(<)*9--[<--](+)*10000]]])*20

przyjmie, że wszystko większe niż 1 lub mniejsze niż -1 jest flagą, a gdy je napotka, wróci. broni się, po prostu stale zwiększając. zakłada to, że większość programów użyje [] do sprawdzenia, czy flaga zmieniła się na 0, a więc (+) * 100000 będzie znacznie szybszy

Edycja: nie można zmusić go do pracy z interpreterem BF Joust. poddaję się. może powinieneś mi powiedzieć, jak poprawić mój kod.

Edycja: teraz bot wykrywa miejsce tuż przed flagą 2, a po nieznacznym zmniejszeniu flagi wyszukuje 2. Ma to na celu anulowanie scenariusza, w którym bot znalazłby komórkę 0 inną niż komórka przed flaga.


Twój bot wydaje się zabijać na (dość rzadkiej, przyznaję) taśmie o długości 10, ponieważ na początku jest 10 '>'. Poza tym [<]nie jest to dobry pomysł, ponieważ powtarza cofanie się, dopóki komórka pod wskaźnikiem nie będzie równa zero , co jest albo jedną z komórek przed flagą, albo po prostu samobójstwem, jeśli wskaźnik osiągnie flagę (od flagi mam nadzieję, że nie jest zero ).
Szyfr

@ Szyfr Zauważ, że bot nie umieszcza pułapki w miejscu tuż przed flagą - moim pomysłem było oznaczenie tego miejsca, aby bot zbudował tam swoją obronę. Czy jest lepszy sposób? W bfjoust czasami wróg usuwa pułapki, a następnie bot zatrzymuje się, zanim powinien.
dumny haskeller
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.