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

РЕДАКТИРОВАТЬ 6 : журналы отбрасываются из-за чрезвычайного размера и времени выполнения. Вы можете создать их самостоятельно, раскомментировав строки в RunThisTournament.py.

EDIT5 : Реализована обработка сокращений в контроллере, больше нет времени выполнения. У этого есть побочный эффект, что числа и круглые скобки больше не рассматриваются как комментарии. Вы по-прежнему можете использовать их, если хотите предоставить аннотированную версию, но было бы очень полезно, если бы была и некомментированная версия вашего кода , поэтому мне не нужно удалять комментарии вручную. Спасибо!

EDIT4 : изменил название, потому что турнир был удален из горячих сетевых вопросов. Спасибо @Geobits за указание на это!

EDIT3 : Удаленные комментарии в программах bf, из-за неожиданного результата, должны быть исправлены сейчас. Если у кого-то есть проблемы с удалением его комментариев, пожалуйста, сообщите.

РЕДАКТИРОВАТЬ 2 : Так как это вызвало тайное время выполнения на моем довольно медленном компьютере, я сократил предел тайм-аута с 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, а все остальные ячейки обнуляются. Цель вашего бота - обнулить флаг противника в течение 2 последовательных циклов, прежде чем он обнулит ваш собственный флаг.

Каждый бот начинается со своего собственного флага, который является ячейкой [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. Если ваш терминал не поддерживает escape-последовательности 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
Я нашел веб-страницу BF Jousting, которая может запускать и визуализировать состязания по биться .
PhiNotPi

4
Спасибо за размещение этого KOTH, Cipher. Должно быть много работы с таким количеством заявок.
AndoDaan

3
Я бы хотел поблагодарить всех за участие ^^
Cipher

Ответы:


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 : Эй, смотри, я сделал это снова!

Редактировать 3 : После некоторой борьбы с дурацкой ошибкой разбора в Arena.py, я наконец-то получил еще одно улучшение в ~ Это то, что я имею в виду под «временем стать серьезным», вы знаете. <3


Кажется, Локе нужно немного подстроиться :-) Люблю твой язык. Была ли ошибка в Arena.py, что у вас были пробелы между )и *или между *и числом?
Сильвестр

@Sylwester Гораздо хуже. Циклы идут туда, куда им не следует: github.com/redevined/brainfuck/pull/6
Лимия Алуйсия,

Поздравляю с # 1. Вероятность выигрыша 92,5% будет непростой.
Сильвестр

Молодец, но разве это не стенография? Вложенные циклы эффективно 21 факториал = 5 * 10 ^ 19. Другими словами, это фактически невозможно расширить в базовый мозговой трах.
Уэстон

1
@ Weston Да. И большинство программ на самой развитой BF Joust Hill ( codu.org/eso/bfjoust/in_egobot - взгляните на smartlock, например) еще хуже. Это не особенно большое дело, так как это своего рода краткий смысл. Это делает стратегии, которые были бы нежизнеспособными в противном случае из-за большой длины, жизнеспособной. :)
Lymia Aluysia

43

Устройство маскировки бот

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

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

4
Очень умно, пришлось настроить моего бота, чтобы учесть это.
Moop

2
Это один из самых умных здесь, на мой взгляд.
Almo

+ F для первого клоака. Я не заметил этого раньше после того, как сделал Ràn, но это похожая идея, другое применение.
Сильвестр

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 С таким большим количеством нордических богов, которые поддерживают меня, случайные размеры арены, кажется, в мою пользу :-)
Сильвестр

13

EvoBot 1

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

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

Я использовал другие записи в конкурсе, чтобы измерить пригодность разных кандидатов.

Так как это была моя первая попытка evobot, я начал с простого шаблона:

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

Черт, твои последние изменения улучшают коэффициент выигрыша Альтернатора против Джеронимо с ~ 60% до ~ 90%. Приятно.
Инго Бюрк

да, я двигался 18 раз, когда я сделал (> +> -) * 9, так что это упало бы с ленты. Глупая ошибка.
Moop

Даже защита Geronimo путем попеременного добавления / вычитания к нулю ячейки не меняет мою норму выигрыша. Альтернатор может выйти победителем - он использует несколько цилиндров, чтобы установить довольно трудную для взлома ловушку.
Инго Бюрк

Эй, поправьте меня, если я ошибаюсь, но разве этот бот не сойдет автоматически с доски, если доска длинная 10? Он перемещается на 10 квадратов, прежде чем пытаться установить что-либо на ноль.
Восстановить Монику

11

Итак, кто-то еще здесь использует генетический алгоритм, чтобы попытаться сделать программы здесь. Ну ... давным-давно, я написал BF Joust evolver для продолжающегося холма в канале IRC. Я решил дать этому повод для этого конкурса ~

И ... в отличие от другого человека с эволвером, мой эволвер может на самом деле изменить больше программы, чем количество повторений. :)

НестДарвин (Поколение 309)

Это лучший результат, который до сих пор достиг мой эволюционер. Я не уверен, насколько вложенная структура помогает в этом случае, но такие структуры были тем, что должен делать эволюционер. Ожидаемое выступление на горе 27.08.2014 года составляет 474 балла. (Рассчитывается путем запуска битвы на всех 21 длинах ленты и умножения на 10/21. Обратите внимание, что это не нормализовано для факта, что на этом холме есть одна дополнительная программа)

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

РЕДАКТИРОВАТЬ : Изменен список программ, которые я хочу войти в этот холм. Побежал в течение ночи. :)


РЕДАКТИРОВАТЬ 2 : я пошел и вручную проанализировал выход evolver. Несмотря на то, что 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

@ Сильвестр Вроде? Мое внутреннее представление использует (плохо продуманную) систему активации генов, которая должна позволять ей развиваться надстройкой (и на самом деле это не так). Я не могу вернуть окончательную программу и восстановить внутреннее представление, но я могу поместить инструкции в один ген и позволить ему продолжать развиваться (сколь бы это ни помогло).
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

Pacifist Bot

Мой бот верит, что насилие никогда не ответит, и постарается избежать боя любой ценой.

(.)*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 и сделают вашего бота немного медленнее, чем необходимо. Если точки являются преднамеренными, поправьте меня!
шифр

О, верно.
Они

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 ячеек. На более длинных лентах это убийца. Модернизация Lightfoot Plodder еще немного сейчас ...
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 (с Омелой)

Это, конечно, смертельный бот, и он убивает не только красивую Burly Balder a омелой, но и почти каждый раз побеждает против других ботов. Это комбинированный средний и быстрый порыв. Мой тест дает мне 567 баллов

Скомпилированный файл BFJ для битвы , источник генератора Racket 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, так как он не хочет уменьшать значение ниже нуля, если это ловушка, но для каждой приманки после того, как мы покачиваемся в [-8,8] перед увеличением на 120 и 27 шагов, прежде чем продолжить движение к следующей соте.

Режим медленной скорости был удален, так как он не влиял на счет с текущим холмом, и это делает моего бота немного меньше (но не намного).


3
Теперь мы начинаем видеть безумие. Мне это нравится.
Sp3000

@ Sp3000 YandereBotv2 был причиной, по которой мне нужно было придумать что-то новое, помимо увеличения значений приманок и свинга. У него был более высокий процентиль выигрыша против херда, чем у всех ботов в прошлом раунде, так что вам просто не повезло с размерами арены.
Сильвестр

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

Вздох . Мне нужно, чтобы мой HLL для BF Joust работал лучше, чтобы у моего эволюционера снова был шанс. Поздравляем # 1 ~
Lymia Aluysia

@LymiaAluysia Спасибо. Я был больше удивлен Бальдером. Я рассчитываю на новые версии NestDarwin, YandereBot и Mickey :-)
Sylwester

8

Джеронимо

Это даже более оскорбительно, чем бот BestOffense Кейна, так как он не создает никакой защиты. Стратегия здесь такова: другие будут стараться быть умными, но чтобы быть умными, нужны циклы. Так что давайте просто перейдем к той части, в которой мы знаем, что враг находится, и очистим все, что мы найдем.

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

Кажется, выигрывает большинство матчей против примерных ботов ОП и бота Кейна.


7

SternBot

Настоящий полусерьезный бот теперь, когда все началось. Решение проблемы симуляции некоторых из этих ботов.

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

1
SternBot дает мне проблемы с проверкой четности :(
Sp3000

7

DoNothingBot

Лучшая защита (...) - невежество.

.

Это ничего не делает.

РЕДАКТИРОВАТЬ: Wow, я был удивлен, увидев, что он сделал лучшую работу, чем более чем на 20% всех ботов =) (Это означает, что он использует превосходную стратегию или ....?)


2
Некоторые другие боты совершают самоубийство на небольших аренах. например. Игрок идет прямо в 20-ю ячейку, и в играх с 10 по 19 он проигрывает, даже противDoNothingBot
Сильвестр

2
Просто из любопытства я пропустил это через свой тестер (проигрывает все ленты) с другими записями. Вот стена позора ... +1
Коминтерн

Хаха, спасибо, что поделились - я ожидал, что там может быть один или два черных овца, но я не ожидал, что он «побеждает» так много ботов =)
flawr

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

Backtracker

Стратегия обратного приманки. Начните укладывать приманки спереди назад, чтобы никто не пропустил остальные, пока я их строю.

Если размер доски меньше 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

Lightfoot Plodder - отредактированный

Основанный на Plodder , этот быстрый бегемот способен быстро « перематывать » вперед через последовательные нули , пока не достигнет чего-то отличного от нуля (в этот момент он начинает дойти, как и ожидалось).

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

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

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

Хорошее "удобное" изменение размера там :)
Lily Chung

@IstvanChung Очень удобно. ;) Больше бы меня слишком сильно тормозило, теряя очки для нескольких других ботов. Если бы ты сделал Bigger больше, я не думаю, что буду пытаться идти в ногу.
DLosc

Ну, я немного увеличил размер, чтобы посмотреть, как он работает. Я думаю, что Bigger мог бы сделать еще больший размер, но у него нет времени, чтобы тщательно его протестировать. Удачи!
Лили Чунг

Люблю меры против ботов Cloacking и тот факт, что это на самом деле похоже на программирование BF :)
Sylwester

5

Неохотный Ран 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 Может, мы могли бы помочь тебе с твоими проблемами с питоном?
шифр

@ Спасибо за шифр, я открыл вопрос на github github.com/redevined/brainfuck/issues/2
Уэстон,

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

4

Азартный игрок

Это тесно связано с моим ботом Geronimo. Но там, где Geronimo играет наверняка, Gambler старается быть быстрее, делая то, что у него получается лучше всего - азартные игры: он идет в 20-ю ячейку и начинает отсчет с нуля.

Это означает, что он может легко проиграть только потому, что арена не такая большая. Но если это так, это может быть несколько циклов, которые имеют значение.

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

Интересный факт: я действительно рассматривает возможность выхода кучу ботов , которые все похожи , (>)*X(>[-])*Yгде X in 9..29и Y = 30 - X. Но я думаю, что ввести двадцать ботов было бы слишком много :) Или даже сорок, если бы у меня было две версии: одна с нулем [+]и одна с ней [-].


Разве число, например 13 или 14, не даст вам лучший процент выигрыша, чем 20?
Moop

Да, может быть. Я просто хочу для середины. Интересно, что если я просто пойду налево, а не направо, мои шансы на победу значительно упадут. Ожидал бы обратного.
Инго Бюрк

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

4

Dumbot

Удивительно глупый бот, который просто портит окружающую среду и надеется, что боты, с которыми он сражается, сорвутся с ленты.

(+)*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 Вы правы ... Это то, что я получаю за попытку делать вещи Brainfuck с небольшим сном. Просто упростили вместо того, чтобы на самом деле решить, как это сделать правильно.
Sellyme

4

CropCircleBot

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

Этот бот использует продвинутые алгоритмы, которые были переданы инопланетянами через круги на полях, которые они установили на земле. Это изменит человечество, обеспечит огромный технический прогресс и даже решит многие экологические проблемы.


Вы знаете, что вы никогда не должны использовать] [, верно?
CalculatorFeline

Я не могу объяснить, почему?
flawr

Когда вы выходите из цикла, текущая ячейка равна 0. Затем вы пропускаете следующий цикл, потому что ячейка у указателя по-прежнему равна 0.
CalculatorFeline

О, я всегда думал, что проверка происходит в конце цикла?
flawr

Это также происходит в начале. В некоторых реализациях [ничего не делает, но это совершенно другой язык (newbiefuck на esolang wiki)
CalculatorFeline

4

BeatYouMate

И поскольку каждый должен опубликовать бота, который побьет первого бота, которого они разместят, вот бот-укладчик с 5 приманками:

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

4

CleverAndDetermined

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

Устанавливает несколько маленьких ловушек, затем перебирается на другую сторону и пытается очистить все, выше или ниже нуля. Сбой на ----.


+++раньше [-]действительно умно, чтобы избежать простых ловушек!
Инго Бюрк,

Выкинул исключение из-за непревзойденного (, могу ли я рассматривать это как комментарий?
шифр

@ Шифр ​​Я исправлю это, извини.
Исаак

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 Обратите внимание, что бот не ставит ловушку прямо перед флагом - моя идея заключалась в том, чтобы пометить это место, чтобы бот построил там свою защиту. Есть ли способ лучше? Иногда, когда противник расчищает ловушки, бот останавливается раньше, чем должен.
гордый haskeller
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.