BrainF *** edBotsForBattling - Турнір Brainf ***


88

У всіх ботів на бойовій арені раптом трахнули мозку, і ніхто не може пояснити, чому. Але кого хвилює, поки вони все ще вміють боротися - хоча Brainfuck - це єдина мова, яку вони вже розуміють.


Минуло час з часу останнього подання, тож я нарешті оголошу переможця BrainFuckedBotsForBattling: Вітаю LymiaAluysia за перемогу з NyurokiMagicalFantasy!


Табло

|       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    |

Підсумкові бали від 09.10.2014

EDIT6 : Відхилені журнали через надзвичайний розмір та час виконання. Ви можете створити їх самостійно, коментуючи рядки в RunThisTournament.py.

EDIT5 : Реалізовано обробку абревіатури в контролері, більше немає величезних циклів виконання. Це побічно впливає на те, що цифри та круглі дужки вже не розглядаються як коментарі. Ви все ще можете використовувати їх, якщо ви хочете надати пояснену версію, але було б дуже корисно, якби була і некомментована версія вашого коду , тому мені не потрібно видаляти коментарі вручну. Дякую!

EDIT4 : Змінено заголовок, оскільки турнір був видалений із гарячих питань мережі. Дякуємо @Geobits за вказівку на це!

EDIT3 : Видалені коментарі в програмах bf через несподіваний результат мають бути виправлені зараз. Якщо у когось є проблеми з видаленням його коментарів, будь ласка, повідомте про це.

EDIT2 : Оскільки це спричинило запізнілий час виконання на моєму досить повільному комп'ютері, я зменшив обмеження часу з 100000 циклів до 10000 циклів. Не те, щоб хто-небудь не перетворив результати запущеної гри поза цією точкою.

EDIT1 : Виправлена ​​помилка в скрипті перетворення, через що інтерпретатор не ігнорує числа в коментованих програмах.


Опис

Це турнір по Brainfuck, натхненний BF Joust . Два боти (програми Brainfuck) воюють один з одним на арені, яка зображена стрічкою пам'яті. Кожна комірка може вміщувати значення від -127 до 128 і обертати за їх межами (так 128 + 1 = -127).

Дійсні інструкції схожі на звичайний Brainfuck, що означає:

+ : 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

Арена має розмір від 10 до 30 осередків, що вибирається псевдовипадково кожною битвою. На обох кінцях розташований "прапор", який має початкове значення 128, а всі інші комірки нульові. Мета вашого бота - нуль прапора противника протягом двох циклів поспіль, перш ніж він нульовий ваш прапор.

Кожен бот починається зі свого власного прапора, який є осередком [0] з власної точки зору. Суперник розташований з іншого боку стрічки.

[ 128 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 ]
   ^                                             ^
my bot                                       other bot

Обидва боти виконують свою дію одночасно, це вважається одним циклом. Гра закінчується через 10000 циклів або як тільки буде досягнуто однієї з умов виграшу. Якщо одна з програм досягне свого кінця, вона просто перестає займатися мурашком до кінця гри, але все одно може виграти.


Умови виграшу

Ваш бот виграє за однієї з таких умов:

  • Прапор вашого ворога нульовий перед вашим
  • Ваш ворог переміщує вказівник із стрічки (виконує >на своєму прапорі або <самостійно)
  • Значення вашого прапора набагато більше, ніж 0, ніж значення прапора опонента після 10000 циклів

Правила

Ваше повідомлення повинно містити ім'я вашого бота та його код.

  • Ви можете використовувати такий синтаксис абревіатури, щоб зробити ваш код більш читабельним:
    • Наприклад (+)*4, те саме ++++, що це справедливо для будь-якої інструкції, за винятком незрівнянних дужок у дужках, оскільки логіка циклу стикається з логікою абревіатури. Будь ласка, використовуйте [-[-[-замість([-)*3
  • Кожен інший персонаж, ніж +-><[].коментар, тому ігнорується, за винятком ()*абревіатур

Боти, які не дотримуються правил, будуть виключені з турніру.

  • Допускається лише базовий Brainfuck, без інших варіантів, які підтримують процедури або арифметичні операції
  • Вихідний код вашого бота не повинен містити незрівняних дужок

Ви можете повідомити про основні стратегії, але не використовувати код іншого для власного бота.


Оцінка балів

Оцінка бота визначається кількістю виграшів проти всіх інших ботів. Зустріч між двома ботами складається з 10 матчів з різною довжиною стрічки пам'яті, що призводить до максимальної оцінки 10 балів за зустріч. Нічия не дала балів за цей матч.


Програма управління

Ви можете знайти програму управління на github разом з повними журналами з боїв. Оголошення буде розміщено тут, коли він буде створений.

Не соромтесь клонувати сховище та спробувати бота проти інших самостійно. Використовуйте python Arena.py yourbot.bf otherbot.bfдля проведення матчу. Ви можете змінювати умови за допомогою прапорів командного рядка -mта -t. Якщо ваш термінал не підтримує аварійні послідовності ANSI, використовуйте --no-colorпрапор, щоб відключити кольоровий вихід.


Приклад ботів

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 виграє кожен матч довжиною стрічки більше десяти, оскільки FastClearBot може уникнути дрібних манок, але не більших. Єдина ситуація, в якій FastClearBot може перемогти проти DecoyBot, - це коли достатньо швидко дістатися до прапора противника, перш ніж його супротивник створить великі мани.


5
Оригінально, мені це подобається. Я просто боюся, що це не дозволить отримати достатню стратегічну глибину, але це може бути тільки я.
ɐɔıʇǝɥʇuʎs

11
Це було б ще веселіше з Befunge .
IchBinKeinBaum

6
Я знайшов веб-сторінку JF Jousting, яка може запускати та візуалізувати ритм-матчі.
PhiNotPi

4
Дякуємо за розміщення цього КОТУ, Cipher. Має бути багато роботи з такою кількістю подань.
AndoDaan

3
Я б хотів сказати спасибі всім за те, що все-таки брали участь ^^
Шифр,

Відповіді:


18

Чарівна фантазія Нюрокі

Я думаю, що прийшов час серйозно ~ Я закінчив свій компілятор для невеликого рівня HLL, щоб полегшити написання програм BF Joust. Це була моя перша серйозна спроба зробити щось із цим. Концепція бота досить проста. Він встановлює декілька манок різної полярності, а потім божевільний з великим трясовиком, із зворотним зміщенням в середині.

О, до речі, очікуваний бал становить приблизно 577 балів проти пагорба останнього туру. Це 93% виграш. <3

Складено | Вихідний код

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

Редагувати : Я вичав ще кілька виграшів з Нюрокі.

Редагувати 2 : Гей, дивись, я це зробив ще раз!

Edit 3 : Після деякої боротьби з дурною помилкою розбору в Arena.py, я нарешті отримав ще одне поліпшення ~ Це те, що я маю на увазі під "часом стати серйозним". <3


Здається, що Локе потрібне коригування :-) Любіть свою мову. Чи була помилка в Arena.py, що у вас пробіл між )і *або між *номером?
Сільвестер

@Sylwester Набагато гірше. Петлі йдуть туди, куди не слід: github.com/redevined/brainfuck/pull/6
Lymia Aluysia

Подяки з №1. 92,5% виграшного показника буде важко відповідати.
Сільвестер

Молодці, але хіба це зловживання стенограмою? Вкладені петлі фактично 21 факторіальні = 5 * 10 ^ 19. Іншими словами, це фактично не піддається розгортанню в базовий епізод.
вестон

1
@weston Так. А більшість програм на найбільш розвиненому пагорбі BF Joust ( codu.org/eso/bfjoust/in_egobot - погляньте, наприклад, на смарт-блок) - ще гірші. Це не особливо велика справа, оскільки це своєрідна точка скорочення. Це робить стратегії, які в іншому випадку були б нежиттєздатними через велику життєздатність. :)
Lymia Aluysia

43

Маскувальний пристрій бот

Цей бот в основному намагається приховати свою базу, зробивши так, що інші боти будуть рухатися прямо повз неї та поза стрічкою.

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

4
Дуже розумний, довелося налаштувати мого бота, щоб це врахувати.
Moop

2
Це, на мою думку, один із найрозумніших.
Алмо,

+ f для першого шафки. Я не помічав цього раніше після того, як я зробив Ран, але це схожа ідея, інше застосування.
Сільвестер

19

Burly Balder v3

Burly Balder - середній повільний поспіх. З нього роблять два великих манки перед тим, як перейти в режим поспіху. У режимі пік у нього є цикл, який використовує лише 4 кроки кожної нульової комірки, а коли ненульова комірка, вона має аналіз випадку для [-18,18], перш ніж сліпо зменшити на 107, перш ніж очистити [-.]. Він очищає незмінний прапор за 242 кроки, на 114 більше, ніж невизначений -*128 і на 14 менше, ніж наївний [-]. Коли клітина очищена, він продовжує залишати слід від -2 манок. У нього є особливий випадок лише для індексу 9, щоб зберегти кілька кроків для ігор розміром 10, і він залишає клітинку з 1 приманкою.

>((-)*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

Дрібниці: Балдер - нордичний бог і син Одіна. Він відомий здебільшого історією своєї смерті : Він злякався за свою безпеку, тому інші боги намагалися передбачити і захищати від кожної загрози. Зрештою, Локі був убитий, оскільки, захищаючи його від мечів і стріл, вони забули захистити його від Омели.


2
Твої приманки вбивають мене. Молодці.
AndoDaan

1
@AndoDaan Дякую Ваш BeatYouMateбув розумний. Я побоююсь, що манки у більшості ботів будуть ще більшими в наступному раунді, поки не дадуть штраф. Тоді у нас, можливо, з’являться якісь крутіші стратегії :)
Сільвестер,

2
Проблема із збільшенням розміру приманки полягає в тому, що він торгується продуктивністю на коротших стрічках проти швидких ботів атаки. З 10 випадковими раундами, швидше за все, солодке місце, яке змінюється залежно від швидкості атаки інших записів.
Комінтерн

2
Так, ти все одно переможеш.
AndoDaan

4
@AndoDaan З такою кількістю нордичних богів, які підтримують мене, випадкові розміри арени здаються на мою користь :-)
Sylwester

13

EvoBot 1

Це простий бот, створений за допомогою генетичного алгоритму. Я почав з шаблону, і моя програма повільно коригувала числа, щоб створити кращого бота-воїна. Код нижче відредаговано для підвищення читабельності.

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

Я використовував інші записи в конкурсі, щоб оцінити придатність різних кандидатів.

Оскільки це була моя перша спроба евобота, я почав з простого шаблону:

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

Я прогнозую, що цей бот отримає бал у діапазоні 50-х-60-х років.

Зараз я працюю над зворотним шаблоном приманки.

EvoBot 2

Це бот, створений за тим же генетичним алгоритмом, але із наступним шаблоном:

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

Цей бот використовує зворотну стратегію приманки, щоб встановити 4 манки різної висоти. Отриманий бот:

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

Я очікую, що цей новий бот пройде краще, ніж попередні боти, можливо, заробивши бал у 70-х (можливо, набагато вище, ніж це, оскільки є багато нових записів).


2
+1 для генетичних алгоритмів. Я дуже вірю в них. Я сподіваюся, що ваші боти справляться добре.
AndoDaan

12

Генератор

Він передбачає, що більшість людей нульову клітину нулюють, додаючи або віднімаючи її, тому в середньому кожна комірка займе 128 витків до нуля.

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

Анотована версія

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

Чорт, ваші останні зміни покращують коефіцієнт виграшу для Alternator проти Geronimo з ~ 60% до ~ 90%. Приємно.
Інго Бюрк

так, я рухався 18 разів, коли я робив (> +> -) * 9, тож він би впав із стрічки. Дурна помилка.
Moop

Навіть захист Geronimo шляхом почергового додавання / віднімання до нуля клітинки зовсім не змінює мій коефіцієнт виграшу. Тут генератор може вийти переможцем - він використовує кілька циліндрів, щоб встановити досить важку для розлому пастку.
Інго Бюрк

Гей, виправте мене, якщо я помиляюся, але чи не бот автоматично відсувається від дошки, якщо дошка триває 10? Він рухається на 10 квадратів, перш ніж намагатися встановити що-небудь на нуль.
Бошман

11

Отже, хтось тут використовує генетичний алгоритм, щоб спробувати зробити програми тут. Ну ... давно я написав еволюціонер BF Joust для поточного пагорба в каналі IRC. Я вирішив дати йому і цей конкурс ~

І ... на відміну від іншої людини з еволютором, мій еволютор може насправді змінити більше програми більше, ніж повторний підрахунок. :)

NestDarwin (покоління 309)

Це найкращий результат, який мій еволюціонер досяг досі. Я не впевнений, наскільки допомагає вкладена структура в цьому випадку, але такі структури, як це, мав на увазі еволютор. Очікувана результативність на пагорбі 27.08.2014 - 474 бали. (Обчислюється шляхом проведення бою на всі 21 довжину стрічки та множення на 10/21. Зауважте, що це не нормалізується тому, що на цьому пагорбі є одна додаткова програма на ньому)

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

EDIT : Змінено перелік програм, які я хочу ввести на цей пагорб. Ран евольвер протягом ночі. :)


EDIT 2 : Я пішов і вручну проаналізував вихід еволютора. Незважаючи на те, що виглядає зовсім інакше, NestDarwin - це в основному оптимізована версія TinyDarwin ... Вручну мінімізована (з однаковою функціональністю) та проаналізована:

(-)*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.

Отже, майже ідентична програма виглядає наступним чином ... що в основному є супер-оптимізованою версією TinyDarwin.

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

TinyDarwin був таким. Не дуже різний, хун? Я просто збираюся вивести його з пагорба. Я думав, що це виразно, але ... ну, я помилявся.

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

Стало очевидно, що нинішній пагорб недостатньо сильний, щоб він міг розвиватися набагато складнішими речами. :(


1
Подяки з першим місцем. Чи здатна програма генетичного альго використати вашу поточну версію як шаблон і продовжувати нові версії для її вдосконалення?
Сільвестер

Відмінна робота з першим місцем. Я такий щасливий, що генетичний алгоритм (ну, його нерест) склав там!
AndoDaan

Тепер, якщо ми зможемо взяти результати всіх ігор, розвиватися більше, додати трохи машинного навчання ... тоді у нас жалюгідних людей більше не буде шансів: P
Sp3000

@Sylwester Сортування? Моє внутрішнє представництво використовує (погано продуману) систему активації генів, яка повинна дозволяти їй розвиватися надбудовою (а на практиці насправді не дуже). Я не можу повернути остаточну програму і відновити внутрішнє представлення, але я можу вкласти інструкції в один ген і дозволити йому продовжувати розвиватися (скільки б це не допомогло).
Lymia Aluysia

@ Sp3000 На жаль, мій алгоритм навряд чи може досягти успіху на добре розвиненому пагорбі #esoteric. Було б добре, якби я міг зробити таке, але, на жаль, моя навичка генетичних алгоритмів просто недостатньо. Я, мабуть, випущу свій еволюціонер одного дня, коли очищу всі мої некрасиві хаки.
Lymia Aluysia

10

Полярний ведмідь Mk II

Існує два види білих ведмедів : ті, хто потрапляє в пастку, і ті, хто вловлює інших людей.

Намагається відгадати полярність опонента, а потім використовує цю інформацію для блокування опонента в нескінченний цикл. Добре працює проти простих стратегій очищення та дещо випадково проти інших. Пасток можна легко уникнути, тому я можу пізніше додати кілька стратегій резервного копіювання.

>++>- 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 [-]

Ви можете вдвічі зменшити розмір коду (]< (+)*290 (>)*9 ... [-])*2?
Сільвестер,

@Sylwester Я не можу, тому що друга половина використовує, +а друга використовує -.
Міка Ламмі

Полярний ведмідь не дуже добре
справляється

@ Sp3000 Ви впевнені? Я спробував з декількома компенсаціями та полярностями (наприклад [(+)*3[-]], [(-)*6[+]]), і це чудово (принаймні, для зовсім невеликих компенсацій).
Міка Ламмі

О, я знаю, що не так: / Я намагався такі програми, як >>>>>>>>>((-)*4[+][--.]>)*21двічі перевірити клітинку, а ваша (+/-)*290викликала запуск другого циклу синхронізації. Не винна явна компенсація.
Sp3000

10

Пацифістський бот

Мій бот вважає, що насильство ніколи не є відповіддю і намагатиметься уникнути боротьби будь-якою ціною.

(.)*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
Я взяв на себе сміття видалити '.' У ваших коментарях, оскільки вони будуть вважатися кодом Brainfuck і зроблять вашого бота трохи повільніше, ніж потрібно. Якщо крапки навмисні, сміливо виправляйте мене!
Шифр

Ой, правда, були досить нерозумно, спасибі за їх видалення: p
mmphilips

9

Хтось?

Періодично оглядається позаду, щоб визначити, коли противник почав очищати його від приманок, а потім мчить вперед.

Здається, це добре, але я не впевнений, чи це через стратегію, чи просто тому, що я додаю 10 до кожної комірки перед очищенням.

Редагувати: виправлена ​​логічна проблема. Перший раз написання програми для мозків. Це залежить від його імені.

>>>+<(+)*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: Це перший бот, який я бачив, що рядок манок (крім +/- 1) виходить за рамки перших 9 комірок. На довших стрічках це вбивця. Модернізація лампового струменя ще трохи ...
DLosc

9

WALL-E 2.0

Побігає до місця 9 та додає до нього 128, швидко виграючи арену розміром 10, якщо противник не змінив початкове значення прапора. На великих аренах це працює як великий манок. Після цього він заповнює простір між розташуванням 9 та власним прапором великими приманками. Коли манки розміщуються, вона сканує непорожні місця та намагається їх швидко очистити.

Версія 2.0 створює великі манки і має деяку толерантність до зміни початкового значення прапора. Він також може перейти на стратегію резервного копіювання, якщо речі почнуть виглядати волохатими.

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

Ефективність цього бота ґрунтується на двох фактах:

  1. Більшість ботів не змінюють початкового значення свого прапора.
  2. Будувати великі манки швидше, ніж очищати їх.

Ці стіни вбивають мене
Sp3000

9

Смертельний Лок V2.1 (з омели)

Це, звичайно, смертоносний бот, і він вбиває не тільки прекрасного Берлі Бальдера амелою, але майже кожного разу перемагає і проти інших ботів. Це комбінований середній і швидкий пік. Мій тест дає мені оцінку 567

Скомпільований файл BFJ для бою , джерело генератора ракетки 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))

Дрібниці : Лок (Локі) - бог у нордичній міфології, який любить грати з усіма і хитрувати їх. Він є зміщувачем форми (тваринам і людям) і зазвичай йде власними шляхами. У розповідях він часто подорожує та допомагає іншим богам, робить невеликі хитрощі та роздуває речі. Окрім вбивства Бальдера, він народив Гель (богиню Пекла / Гельвета), звіра Фенріра та Змея Мідгард, що починає Рагнарок (норвезький Армагеддон).

Як це працює

На початку він робить великий (-17) манок, потім робить +-візерунок аж до індексу 7. Він сканує вперед від 13, залишаючи слід (+ 10, -32) + манок, але коли виявить набір, він припинить і запустити середній * 1 режим пік. Якщо не встановлено жодної комірки, він також запустить повільний режим * 3 пік.

* 1 У режимі середньої піки він виявив активність супротивника в одному з індексів 7-13, і він починає з індексу 2. Деякі опоненти залишають нуль, а інші залишають інше значення, і тепер у нього є засоби для виявлення активності противника, перш ніж робити примани в індекс 2-6 (-32, + 10) +. Якщо в комірці не очікується значення (-1, 1) або він закінчив робити всі манки, він переходить у швидкий * 2 режим пік.

* 2 Режим швидкого поспіху, який він очікує, що його виявили, тому манки не працюватимуть. Ми сподіваємось, що ті, які ми вже встановили, - це зупинити противника та зосередитись на пробігу через опонентів противника. Він починає поспішати в найдальшу точку, яку ми знаємо, на основі попереднього сканування [9,14] або індексу 9, якщо ми були зроблені раніше. У нього є особливий випадок для першого приманки, де ми просто додаємо 120 і plodd 27, оскільки він не хоче знижувати значення tha нижче нуля, якщо це пастка, але для кожного манку після того, як ми витріщаємося на [-8,8], перш ніж збільшувати на 120 і прокладення 27 кроків перед тим, як продовжуватися вперед до наступної комірки.

Режим повільного поспіху був знятий, оскільки це не вплинуло на рахунок з поточним пагорбом, і це робить мого бота трохи меншим (але не набагато).


3
Тепер ми починаємо бачити божевілля. Мені це подобається.
Sp3000

@ Sp3000 YandereBotv2 був причиною, що мені потрібно було думати нове, окрім того, що просто збільшувати значення манок та гойдалок. Він мав вищий відсотковий виграш проти перешкод, ніж усі боти минулого раунду, тому вам просто не пощастило з розмірами арени.
Сільвестер

Ахаха, можливо, я думаю, що мені потрібен контрплан проти постійно зростаючих розмірів приманки: / Мені дуже подобається, як у вас різні режими, хоча
Sp3000

зітхати . Мені доведеться змусити HLL для того, щоб BF Joust працював краще, щоб мій еволютор знову мав шанс. Вітаємо №1 ~
Lymia Aluysia

@LymiaAluysia Дякую Мене більше здивував Бальдер. Я розраховую на нові версії NestDarwin, YandereBot та Міккі :-)
Sylwester

8

Джеронімо

Це навіть більш образливо, ніж бот BestOffense Kaine, оскільки він не створює жодної оборони. Тут стратегія полягає в тому, що інші намагатимуться бути розумними, але розумністю займаються цикли. Тож давайте просто переходимо до тієї частини, яку ми знаємо, що ворог є, і очистимо все, що ми знайдемо.

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

Здається, виграє більшість матчів проти прикладу ботів та бота Kaine's.


7

SternBot

Насправді напівсерйозний бот тепер, коли все починається. Звернення до синхронного характеру деяких із цих ботів.

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

1
SternBot надає мені питання паритету :(
Sp3000

7

DoNothingBot

Найкращий захист (...) - незнання.

.

Це нічого не робить.

EDIT: Нічого собі, я був здивований, побачивши, що він зробив кращу роботу, ніж більше ніж мінімум 20% усіх ботів =) (Чи означає це, що він використовує вищу стратегію або ....?)


2
Деякі з інших ботів вживають самогубства на малих аренах. напр. Азартний гравець прямує до 20-ї клітини, а для ігор 10-19 років він втратить, навіть протиDoNothingBot
Сільвестер,

2
Просто з цікавості я провів це через свій тестер (відтворює всі довжини стрічки) проти інших записів. Ось стіна сорому ... +1
Комінтерн

Ха-ха, дякую за те, що ти поділився - я очікував, що там може бути одна-дві чорні вівці, але я не очікував, що це "переможе" стільки ботів =)
помилка

7

CounterPunch - відредаговано

Врівноважена комбінація побудови сильної оборони, а потім атаки.

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

Повідомлення:

(+)*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

Захищає схожий на Backtracker @ Geobit , але захищає від швидких нападників, спочатку виставляючи швидкий приманку перед прапором.

Атака - це вкладене очищення з протилежною полярністю для швидкого очищення манок з невеликими значеннями. Найгіршим сценарієм має бути манок 64 (або полярність).

Редагування 1: Підвищення ефективності атаки проти приманок (була логічна помилка при переключенні на полярність).

Редагування 2: Тестування вказує на те, що пауза працює трохи краще у внутрішньому циклі.


6

Зворотний трекер

Зворотна стратегія приманки. Почніть класти манки вниз з передньої задньої частини, щоб ніхто не пропускав решту, коли я будую їх.

Якщо дошка менше розміру 20 або більше, це не працює проти ботів швидкої атаки, оскільки ми просто пройдемо один одного, перш ніж я почну розбирати.

(>)*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

Примітка: я не BF, але це подобається робити те, що я хочу для мене. Якщо ні, то, будь ласка, дозвольте мені зараз.


6

Не можу торкнутися цього

Це оборонно-орієнтована програма, яка намагається визначити, як опонент очищає клітини, і будує приманку відповідного розміру.

>---    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]

Зараз я працюю над версією, яка може виграти проти обох полярностей.


6

ImpatientTripwire (він же YandereBot)

Намагається бути трикутником, щоб він міг розкладати приманки (здебільшого) відповідної полярності, але здається, якщо ви забираєте занадто довго і передбачає, що ви навпаки паритет. Має зворотний провід для невеликих дощок.

(+)*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

Поточна версія: 1.3 - відредаговано, щоб зробити краще на менших дошках, за рахунок програвання ігор через ворогів, що пробираються повз під час перевірки тривимірного провідника

Минулі версії: 1.2.1

(Мені потрібен кращий чіткий алгоритм: /)


1
OMG 411k повністю розширений і позбавлений: -O код Шипера просто висить на цьому.
Сільвестер

Просто змінив декілька коментарів, так що тепер він працює з новим кодом Cipher
Sp3000

оскільки остання редакція, незрівняні дужки в дужках поводяться дивно, оскільки логіка циклу стикається з логікою абревіатури. Чи можу я змінити такі конструкції, як ([)*300назад [[[ and so on?
Шифр

@Cipher Так, продовжуй це - хоча версія
пастіна

1
3 - це приємне місце, на яке можна зайти. Молодці.
AndoDaan

5

Екструдери легкої ступні - ЗМІНЕНО

Заснований на Plodder , цей швидкий бегемот здатний "швидко просунутися вперед" через послідовні 0, поки він не досягне чогось ненульового (в цей момент він починає хитатися так, як очікувалося).

Тепер вдосконалено за допомогою більш надійного алгоритму скимінгу, який також дозволяє швидко перемотати через невеликі приманки та більші маски.

Редагування №2 : Тепер можна повернутися до скимінгу, якщо знайде більше кишень нулів.

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

Приємна «зручна» зміна розміру там :)
Лілі Чунг,

@IstvanChung Дуже зручно. ;) Більше жодне сповільнило б мене, втрачаючи очки у кількох інших ботів. Якщо ви зробили Біггер більшим, я не думаю, що я б намагався йти в ногу.
DLosc

Що ж, я трохи наткнувся на розмір, щоб побачити, як це працює. Я думаю, що Біггер міг би зняти ще більший розмір, але не встигає його ретельно перевірити. Удачі!
Лілі Чунг

Любіть лічильник проти Cloacking-ботів і те, що це насправді схоже на програмування BF :)
Sylwester

5

Неохоче Rán v2

Стратегія проста. Постарайтеся змусити опонента подумати, що її прапор є приманкою і передує повз дошку та вільний (різновид трикутника / вібратора). Після 10 повних раундів вона здається і намагається визначити, чи є опонент біля її прапора, а якщо ні, то вона зробить -17 манок, поки не потрапить у встановлену клітинку. Метод очищення, який вона використовує, є окремим випадком для [-12,12] і починає плутати аналогічно Локе.

>>-<<                                  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
]

Дрібниці: Ран - морська богиня Північної Міфології, яка приймає моряків ще до того, як вони помруть у морі.


5

Міккі V4

Для V4 я використовував той самий метод, що і V3, проти оновлених ботів, але з більшою кількістю одночасних груп (30, а не 10).

Розроблено на основі всіх 60 ботів, включаючи BurlyBalderV3та LethalLoke(але виключаючи 2botsonecup, який неможливо порівняти з моєю суворою реалізацією).

Я виявив диво різні боти та показники успіху, якщо почав з різних випадкових насінин. Тож я вирішив розділити ці різні вихідні точки на популяції і дозволити їм час від часу перетинати запилення.

У 1400 поколіннях 30 одночасно розвиваються популяцій створили цю програму:

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

Я підраховую, що виграш цього бота складе 90,0% від поточного врожаю. (1135/125/0 довжина стрічки виграла / програла / розіграла).

Інформація про V3

Розрахунковий коефіцієнт виграшу 89,2% (1124/62/74 довжина стрічки виграла / програла / розіграла).

Інформація про V2

Програма покоління тепер має аналіз, щоб визначити, яка частина кінця програми не використовується, і обрізає її, перш ніж генерувати з неї наступні покоління. Це означає, що випадкові мутації трапляються лише в використовуваних частинах програми, і тому еволюція відбувається швидше.

72% проти поточного врожаю на той час. (892/204/143 довжина стрічки виграла / програла / розіграла).

Інформація V1

31500 поколінь зіткнулися лише 12 ботів. 65% (виграні / програні / розіграні довжини стрічки 165/80/7). Я використовую всі 21 стрічки.

Потенційні боти ранжуються за:

  • більшість виграє тоді;
  • більшість малює тоді;
  • найшвидший час, проведений тоді;
  • швидкий виграний час

Дрібниці

  • Міккі названий на честь мого кота і;
  • Перефразовуючи Т. Еліота: The Naming of Cats is a difficult matter, It isn't just one of your brainfuck bots
  • Мій java bf vm та генетичний алгоритм є на github .
  • Vm здатний запустити повний турнір за 4 секунди на одному ядрі i7 (обережно - результати не завжди ідентичні двигуну турнірів).

Не було б краще використовувати всі 60 ботів?
Сільвестер

@Sylwester Можливо, я в основному цього не зробив, тому що це так повільно. На це пішло дві години. Крім того, хоча вона розвивалася повільніше, тим більше ботів довелося їй впоратися. Я подумав, що якщо він б’є кращих хлопців, це буде добре. Мені не вдалося запустити фактичний турнір для підтвердження, проблеми з пітоном. Тому я подумав, що я просто опублікую його і побачу ...
weston,

@weston Можливо, ми могли б допомогти вам у вирішенні проблем з python?
Шифр

@Cipher спасибі, я відкрив випуск на github github.com/redevined/brainfuck/isissue/2
weston,

@Sylwester Я використовую більшість ботів зараз, оскільки мій генератор набагато швидший і багатопоточний.
weston,

4

Азартний гравець

Це тісно пов’язано з моїм ботом Geronimo. Але там, де Геронімо грає впевнено, гравець намагається бути швидшим, роблячи найкраще - азартні ігри: Він іде до 20-ї клітини і звідти починає нульову роботу.

Це означає, що він може легко втратити лише тому, що арена не така вже й велика. Але якщо це так, це може бути кілька циклів, які підраховують.

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

Факт забави: Я дійсно розглядав можливість ввести купу ботів, які всі схожі на те, (>)*X(>[-])*Yде X in 9..29і де Y = 30 - X. Але я думаю, що введення двадцяти ботів було б трохи занадто :) Або навіть сорок, якби у мене було дві версії, таку, з якою нульовий з, [+]і ту, яка це робить [-].


Чи не число, як 13, чи 14, не дасть вам кращих відсотків виграшу, ніж 20?
Moop

Так, можливо. Я просто хочу на середину. Цікаво, що якщо я просто йду ліворуч замість правої, мої шанси на виграш значно знижуються. Можна було б очікувати навпаки.
Інго Бюрк

Оскільки кожен бот бореться потім зіставляє проти будь-якого іншого бота, навіть 40 з тих , хто не підніме ваші шанси , що багато - і у мене був важкий час копіювання та вставки: D
Шифра

4

Дамбот

Надзвичайно дурний бот, який просто поспішає з навколишнім середовищем і сподівається, що боти, з якими він бореться, зійдуть із стрічки.

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

(Я не впевнений, чи це навіть працює - він не помиляється!)

Повідомлення (з тим, що я думаю, що це робить):

(+)*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.

(Я буду шалений, якщо це виграє одну битву)


1
ваш другий рядок насправді дорівнює нулю комірки шляхом додавання, а потім віднімайте один сім разів поспіль.
гордий haskeller

1
@proudhaskeller Ти маєш рацію ... Ось, що я отримую, намагаючись робити мозкові речі з маленьким сном. Щойно я спростив це замість того, щоб насправді розробити, як це зробити правильно.
Селлім

4

CropCircleBot

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

Цей бот використовує вдосконалені алгоритми, які передаються інопланетянами за допомогою кругів, які вони розміщують на землі. Це змінить людство і забезпечить величезний технологічний прогрес і навіть вирішить багато екологічних проблем.


Ви знаєте, що ніколи не повинні використовувати] [правда?
CalculatorFeline

Я ні, ви можете пояснити чому?
flawr

Коли ви залишаєте цикл, поточна комірка дорівнює 0. Потім ви пропускаєте наступний цикл, оскільки комірка вказівника все ще дорівнює 0.
CalculatorFeline

О, я завжди думав, що перевірка відбувається в кінці циклу?
недолік

Це також відбувається на початку. У деяких реалізаціях [нічого не робить, але це зовсім інша мова (newbiefuck на вікі esolang)
CalculatorFeline

4

BeatYouMate

А оскільки кожен повинен опублікувати бота, який буде бити першого бота, який він опублікував, ось бот, який укладає 5+:

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

4

CleverAndВизначено

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

Встановлює кілька невеликих пасток, потім перебігає на інший бік і намагається очистити все, що знаходиться вище чи нижче нуля. Не вдається ----.


+++раніше [-]справді розумно уникати простих пасток!
Інго Бюрк

Викинув виняток через неперевершений (, чи можу я ставитися до цього як до коментаря?
Шифр

@Cipher Я це виправлю, вибачте.
isaacg

4

MetaJSRandomBot

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

Ідея цього бота - зробити щось абсолютно випадкове, що все-таки є дійсним кодом js без зайвої непотрібності. Я написав наступний код ( посилання JSFiddle ) для його генерації. Давайте подивимося, наскільки це добре =)

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

Прусська рулетка

Російська рулетка зробила ставку зі своїм другом Пруссієм, і тепер його черга грати.

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

У вас є 2 декременти вказівника і лише 1 приріст у вашому головному циклі - це допоможе вам скокнути ваш власний кінець стрічки.
Комінтерн

2
Це все одно просто викинеться.
гордий haskeller

На початку у вас є плюс, а за ним - мінус. 2 витрачені цикли.
Вестон

4

Більший

Починається гонка озброєнь !!

І будує, і руйнує стіни висотою 16 18, що більше, ніж більшість конкурентів. Також є трохи логіки, щоб перемогти шахрая, захисників прапора, анти-генераторів та ботів, які припускають нетронутий прапор

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

Анотована версія

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

Частково серйозний бот. цей бот намагатиметься виграти до границі 100000 циклів. він піде на прапор ворога, поставивши на шляху кілька пасток, трохи зменшить його, повернеться назад і захистить прапор.

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

він припустить, що все, що більше 1 або менше -1, - це прапор, і коли він зустріне один, він повернеться назад. вона захищається, просто збільшуючись постійно. це передбачає, що більшість програм або використовуватимуть [], щоб перевірити, чи прапор став 0, і тому (+) * 100000 буде набагато швидше

Редагувати: не можна змусити його працювати на інтерпретатора BF Joust. я здаюсь можливо, ви повинні сказати мені, як покращити мій код.

Редагувати: тепер бот робить місце безпосередньо перед прапором 2, і після того, як прапор трохи зменшився, він шукає 2. Це означає, щоб скасувати сценарій, коли бот знайде клітинку 0, відмінну від тієї до цього прапор.


Здається, ваш бот вбиває себе на (досить рідкісній, я визнаю) стрічці довжиною 10, оскільки на початку є 10 '>'. Крім того, [<]це не така гарна ідея, оскільки вона повторює повернення назад, поки клітина під вашим покажчиком не дорівнює нулю , що є або однією з комірок перед вашим прапором, або просто самогубство, якщо ваш покажчик досягає прапора (оскільки ваш прапор сподіваємось, не нуль ).
Шифр

@Cipher Зауважте, що бот не ставить пастку на місці прямо перед прапором - моя ідея полягала в тому, щоб позначити це місце, щоб бот побудував там свою оборону. Чи є кращий спосіб? У bfjoust іноді ворог очищає пастки і тоді бот зупиняється раніше, ніж повинен.
гордий haskeller
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.