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