У всех ботов на боевой арене внезапно началось головокружение, и никто не может объяснить, почему. Но кого это волнует, пока они все еще могут сражаться - хотя 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, - это когда он достаточно быстр, чтобы достичь флага противника до того, как его противник собрал большие приманки.