Кодовые боты
Я ненавижу частные и защищенные переменные. Я просто хочу получить доступ ко всему и всему!
Если вы похожи на меня, то этот вызов для вас!
Написать бота, который работает вместе в гармонии с другими ботами, заставляет других ботов делать то, что вы хотите. Вы программист, и вы знаете, как все должно работать. Ваша задача - конвертировать как можно больше других ботов на ваши пути.
Код
У вас будет 24 строки кода для написания вашего бота. Каждый ход, каждый бот будет выполнять 1 строку последовательно.
Каждый бот хранит 5 переменных A
через E
. A
и B
предназначены для личного использования, C
сохраняет следующую строку для выполнения, D
сохраняет текущее направление и E
является случайным числом. Переменные начинаются с 0, за исключением случая D
, который начинается со случайного значения. Все переменные хранят только 0-23. Числа, большие или меньшие, будут модулироваться на 24.
В этом посте я буду использовать оппонента как соседнего бота, с которым вы сталкиваетесь
Каждая строка должна содержать одну из следующих 5 команд:
Flag
ничего не делает. Кроме того, как ты выигралMove
перемещает вашего бота вD
направлении th Если бот уже занимает место, никакого движения не произойдетCopy Var1 Var2
копирует содержимое Var1 в Var2If Condition Line1 Line2
Если условие истинно, выполняется строка 1, иначе строка 2Block Var1
блокирует следующую запись в переменную
Переменная может использоваться следующим образом:
#Var
будет использовать переменную в качестве номера строки. Если значение A
равно 17, Copy #8 #A
содержимое строки 8 будет скопировано в строку 17.
*Var
Будет использоваться переменная вашего оппонента. Copy 5 *C
установит C
переменную противника, чтобы 5
Var+Var
добавить две переменные. Copy D+1 D
повернет бота вправо
Когда D
используется как направление, [North, East, South, West][D%4]
будет использоваться
Эти модификаторы могут быть Copy *#*C #9
объединены в цепочку: скопирует следующую строку, которую ваш оппонент выполнит в ваш собственный код в строке 9. **D
Обратимся к D
переменной оппонента .
Состояние будет оцениваться следующим образом:
- Если
Var
:- Если Var это
A
черезC
, он возвращает истину , если Var отличен от нуля, иначе ложь. - Если Var есть
D
, он вернет true, если есть бот вD
направлении th, иначе false - Если Var
E
, он вернет true, если E нечетно, иначе false - Если Var это строка, она вернет true, если это строка Flag.
- Если Var это
- Если
Var1=Var2
:- Возвращает true, если оба значения
A-E
равны и равны - Возвращает true, если оба являются строками, а тип линии равен
- Возвращает true, если оба значения
- Если
Var1==Var2
:- Возвращает true, если оба значения
A-E
равны и равны - Возвращает true, если оба являются строками и идентичны (флаги разных ботов не будут равны)
- Возвращает true, если оба значения
50 ботов каждого типа будут размещены в тороидальном мире по следующей схеме:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
..B...B...B...B.
После каждой игры в 5000 ходов будут подсчитываться флаги на каждом боте. Вы получаете очко, если у бота больше вашего флага, чем у любого другого типа флага. Если в случае галстука между N
ботами, очки не начисляются.
Будет 10 игр, и в конце будут накапливаться очки.
Примечания стороны
Комментарии в конце строки разрешены и обозначены //
Попытка сделать что-то, что не имеет смысла, например, добавление в строку, ничего не даст
Попытка сделать что-то на несуществующем боте ничего не даст
Бесконечная рекурсия по If
завещанию заканчивается без выполнения строки
If
не меняет значение C
А Block
не истекает, пока кто-нибудь не попытается написать в него
Несколько переменных и строк могут быть заблокированы одновременно
Block
Многократное повторение переменной будет блокировать несколько раз, пока второй оператор блока находится в строке кода, отличной от вашей первой
Пробелы допускаются только между аргументами (и после команды)
Если бот короче, чем 24 строки, Flag будет остальные строки.
Пример программы
Copy 2 C //Skip to the If line
Flag //Where I'm storing my flag
Move //Move in the D'th direction
If D #5 #2 //If there's a bot, copy code, otherwise, move!
Copy #1 *#E //Copy my flag onto a random spot in my bot's code
Copy 2 C //Skip back to the If line
Программа будет запускаться моим контроллером Python здесь .
Контроллер Java здесь. Он быстрый и выглядит намного лучше, чем Python.
Табло:
- 6837 $ Копия
- 3355 Локхид
- 1695 MindControl
- 967 византийский
- 959 AttackOrElse
- 743 Кадмиллион
- 367 Грипп
- 251 TheCommonCold
- 226 Волхв
- 137 HideBlockAttack
- 129 RowBot
- 123 FastMoveCloneDodge
- 112 FastForwardClone
- 96 QuickFreeze
- 71 Ремонт и защита
- 96 SuperFreeze
- 93 RovingVirus
- 80 ForwardClone
- 77 FreezeTag
- 68 Палимпсесте
- 62 BlockFreezeAttack
- 51 RushAttackDodge
- 46 Блокатор
- 40 TurretMaker
- 37 Copycat
- 37 Камикадзе
- 35 FlagInjector
- 33 RandomCopier
- 31 Коварный
- 29 HappyAsAClam
- 25 нановирус
- 21 Nullifier
- 19 нановирис
- 17 BoringCopybot
- 16 Movebot
- 14 Flagbot
- 13 нейтрализатор
- 12 Рак
- 9 DNAbot
- 9 Паразит
- 8 MetaInsidious
- 8 Ребрендинг
- 8 AdaptiveBot
- 8 Воспроизводящий Бот
- 8 KungFuBot
- 5 QuickFreezerbot
- 4 Атакующий
источник
Ответы:
Flagbot
Зачем делать что-либо, когда другие боты будут достаточно хороши, чтобы дать мне свой код?
источник
Freeze Tag
Ловите противника в петле, наполняйте его флагами, переходите к следующему противнику.
источник
Copy C+23 C
Это должна быть самая злая строка кода xD.Or would that not count as your flags?
, Потому что, если они не считаются вашими собственными флагами, это определенно не хорошее решениепаразит
Зачем убивать других ботов? Этот бот просматривает код противника и заменяет только флаги.
источник
$ Копировать
Этот бот использует те же приемы, что и Lockheed от COTO, поэтому я буду бесстыдно брать и улучшать.
Это использует
C
уязвимость, чтобы сломать блоки и даже полностью изменить нейтрализатор. Это также написано в абсолютах из-за этого. Я думаю, что это может сломаться, еслиC
сдвиг будет восстановлен, но пока сдвиг постоянен, его можно переписать для борьбы с ним.По какой-то причине отсутствие петли в конце сделало этого бота супер хорошим.
источник
C
значениями. Таким образом, блок может быть сложен при вызове изIf
оператора, который используется здесь. $ Copy разбивает блоки (например, моллюск), выполняяCopy
одну и ту же строку снова и снова до успешного завершения, что дает ему преимущество перед Lockheed.Lockheed
Мое третье (и, вероятно, последнее) подчинение этой конкретной войне ботов: Реактор Локхид, или сокращенно "Локхид".
Особая благодарность выражается @Wasmoo, который поделился своим открытием: «Многократная блокировка переменной будет блокироваться многократно, если второй оператор block находится в строке кода, отличной от вашей первой». просто неправда "подвиг. Я широко использую его.
Также спасибо Натану Мэриллу за организацию соревнований и публикацию симулятора. Симулятор совершенно бесценен при настройке ботов. Я бы не поверил, если бы не смоделировал это своими глазами, но добавление или удаление самой концептуально незначительной функции бота может означать разницу между большим успехом и полным провалом. Я разрываюсь относительно того, хорошо это или нет.
источник
If
указание на эту строку не будет неудачным), вы блокируете одно и то же значение (одна строка может блокировать строки 1-24 с возрастающей переменной), и блок еще не был освобожден (кто-то пытался изменить эту переменную)C
,<block target>
) еще не действует». То есть строка, в которой находится оператор блока, не имеет отношения к укладке, за исключением того, что если блок выполняется непосредственно,C
= адрес инструкции блока.Атака Или Остальное
Видя, что защитные роботы, такие как византийцы, преуспевают, я решил создать защитного робота.
Это имеет два набора шаблонов, в зависимости от того, присутствует враг или нет.
он чередуется между копированием своего флага и копированием кода, что заставит врага скопировать этот флаг (слабый репликатор)он копирует свой флагДальнейшее тестирование показало несколько важных концепций:
A+7
Показанный будет более эффективным, чем любой другой прирост (+200 к следующему лучшему)Графическое наблюдение за симуляцией через пользовательский интерфейс Java очень помогло. Спасибо! Ниже приведен новый и улучшенный код. Я не думаю, что могу сделать что-нибудь еще.
источник
C
что заблокировало его. Поскольку у этого бота есть вращающийся блок на основеC
, он будет накапливать несколько блоков в каждой из своих команд. Это делает этого бота более оборонительным.If
строку в список, вводяC
переменную, которая его вызвала. Таким образом, с 1 блоком и 9 If, которые выполняют оператор Block, бот может получить до 10 блоков для каждой строки (по крайней мере, за 24 * 10 * 10 ходов). Возможно, OP неправильно передал симуляцию.Роу Бот
Будет двигаться, пока не найдет робота.
Установите этого робота в том же направлении, что и он сам.
Затем скопируйте свой код в робота.
Это должен составить ряд роботов "Row Bot". :)
источник
If
заявления должны быть написаны заглавными буквами. Во-вторых, не должно быть пробелов с обеих сторон=
, какD=*D
.Супер заморозка
Этот бот пытается заморозить бота перед ним, пока он не сработает, затем записывает несколько флагов в случайные строки, а после 8 ходов вращается и переходит к другому противнику.
источник
византийский
Бот с высокой степенью защиты, который устанавливает несколько блоков по своим флагам и наиболее чувствительным инструкциям, включая метаблоки (то есть блоки по инструкциям критических блоков).
Он также постоянно движется непредсказуемым образом и устанавливает флаги в многочисленных местах противников с максимальной отдачей.
Не уверен, как это будет работать, так как я не могу имитировать. Но мы дадим ему шанс. ;)
отказ
Я написал это до того, как PhiNotPi любезно сообщил, что условная логика бесплатна. Тем не менее, я решил оставить это, так как никогда не может быть слишком много ботов.
источник
Cadmyllion
«Я только что вошел в бот в королевской битве», - говорю я. «Он движется каждые несколько ходов, чтобы предотвратить атаки медленных ботов».
"Что вы подразумеваете под более медленными ботами?" PhiNotPi спрашивает.
«Застрявшие боты оценивают длинные цепочки условной логики», - отвечаю я.
«Операторы« If », которые перенаправляют на другие операторы, включая другие операторы« if », выполняются в один и тот же ход», - говорит PhiNotPi.
"Сладкие убитые правила сборки кода!" Я плачу. "Кто придумал эту идею?"
... и, таким образом, история о том, как появился Кадмиллион.
Cadmyllion: бот, который успешно использует сюрреалистическую способность оценивать бесконечное количество условных выражений в одной инструкции ... делая практически все, что делает, условно.
Код
источник
Мета Коварный
Этот бот зависает, а затем конвертирует противников в менее эффективные версии Sparr Insidious , которые, в свою очередь, превратят противников в ботов, которые раздают мне спам-флаги. Вероятно, это самый сложный бот, который я написал, и поэтому я ожидаю, что он будет работать ужасно, не было места для блокировки и только один флаг в коде. Превращение бота в коварного клона также занимает слишком много времени.
Самой большой проблемой было написание кода для коварных клонов таким образом, чтобы он работал независимо от своего положения в боте. Замораживание удаляется, когда я вставляю второй-последний код точно в том месте, где находится замораживание, это как раз вовремя запускает противника.
источник
Ремонт и защита
Этот бот восстанавливает свой собственный код, защищая недавно отремонтированные линии.
Объяснение:
Начальное значение
A
is0
, а строки пронумерованы 0-23. ЕслиIf
оператор выполнен и имеет значение false, он снова пытается выполнить ту же строку. Контроллер не позволяет боту выполнить одну и ту же строку дважды, поэтому ход заканчивается иC
увеличивается до1
.Следующая строка
Copy #A #A+8
фактически выполняется независимо от значенияIf
оператора. Разница в том, что он выполняется дважды, если верно, и один раз, если ложно. Если строка#A+8
заблокирована (что в конечном итоге происходит), то выполнение ее дважды с фактическим копированием при ее выполнении только один раз разблокирует ее. Затем вновь скопированная строка блокируется, чтобы сохранить ее.источник
A
? Не так ли0
? Если так, то ваша первая строка сравнивает строку 0 со строкой 16, но, как я понял из примера с ботом OP, первая строка - строка 1, не так ли? Кроме того, все еще в первой строке,#C
относится к этой самой строке, значит ли это, что еслиIf
выражение возвращает false, вы застряли в бесконечном цикле?нейтрализатор
Этот бот заставляет свою жертву переписывать всю свою программу, делая ее равной 0 очков. Как только вирус на месте, он движется дальше. Это выжженная земля к победе.
Сравнение
*#*C==#7
, похоже, не корректирует смещение противника правильно, но бот в итоге движется дальше.источник
Copy C+1 C
это все, что нужно, чтобы пропустить одну строку.Copy 23 C
туда вместо этого вернуться к первой строке.коварный
Вдохновленный @Cruncher, этот бот заражает других ботов небольшим блоком кода, заполняя другого бота флагами этого бота. Эти боты тогда сидят уток для дальнейшей атаки, но они будут в основном заполнены моими флагами, когда они будут повторно заражены кем-то еще.
Изменить: спасибо @PhiNotPi за помощь в гольф, @overactor за советы по эффективности
источник
Счастлив как моллюск
Это упражнение в блокировке. Он работал замечательно хорошо, пока не
$Copy
пришел.Моллюск имеет 22 блочные команды. Поскольку
A
смещается каждый цикл, они будут ссылаться на разные строки каждый раз через цикл. Это позволяет каждой команде складывать блоки на каждой другой строке, максимально до 22 блоков на строку. Таким образом, чтобы сломать полностью бронированный моллюск, нужно было бы написать в строку 22 раза.Например,
#10
каждый раз через цикл будут защищены следующие строки:#10
защищен линией 7 (7+0+3
= 10)#10
защищена линией 0 (0+7+3
= 10)#10
защищена линией 17 (17+14+3
= 34 = 10)#10
защищенная линией 10 (10+21+3
= 34 = 10)Таким образом, после строки 10 цикла 3
#10
блокировалось 4 раза, требуя 4 записи#10
для разрыва блоков, а 5-й - для перезаписи строки.Обратите внимание, что блоки имеют ключевое
C
значение по их значению и не будут складываться, если защищенная строка уже была заблокирована тем жеC
значением. Таким образом, после установки 22 блоков для каждой строки блоки больше не будут складываться.источник
MindControl
Я думаю, никогда не поздно?
MindControl исходит из моей идеи, что на копирование всей моей программы противнику потребуется значительное время, в течение которого мой бот уязвим для атак с других направлений. Так почему бы не заставить оппонента скопировать мою программу, пока я сканирую врагов?
Как только он находит врага, MindControl немедленно замораживает врага, чтобы предотвратить побег. Затем он загружает загрузчик противнику и позволяет жертве загрузить саму программу MindControl. Загрузчик использует тот факт, что несколько ботов использует
B
и будет зацикливаться, пока не загрузит все 24 строки. Когда загрузчик перезаписывает#19
сCopy 16 C
наCopy 23 C
, это означает, что жертва загрузила все строки и продолжит саму перезагрузку.Первые версии моего бота не включают в себя блоки. И это было настолько уязвимо, что почти любое изменение наносит ущерб. Поэтому я решил добавить блоки на основе $ Copy от Wasmoo (на основе Lockheed от COTO). Недостатком, который я обнаружил, является то, что оригиналу трудно исправить ошибки в копиях. Но это далеко не увечье, и счет значительно увеличился, поэтому я сохранил блоки.
ОБНОВЛЕНИЕ
Я улучшил загрузчик, чтобы продолжать попытки загрузки до успешного переписывания, чтобы обойти блоки. Это означает, что для загрузки загрузчика требуется еще один ход, но после этого изменения мой счет удвоился! Не могу поспорить с числами.
Еще одно обновление. Как вы могли заметить, MindControl решает, атаковать ли цель, сравнивая случайную линию между собой и ее целью. Если они совпадают, MindControl просто предполагает, что цель уже заражена, и оставляет ее в покое. (Примечание: раньше я использовал статическую линию для сравнения, но это дает много ложных срабатываний и негативов) Оказывается, это дает много ложных срабатываний. Поэтому я решил использовать
==
и сделать некоторые незначительные изменения , какC+23
в23+C
. Программа функционально идентична, но отличается в глазах==
. Теперь, когда в MindControl нет строки, идентичной любой строке в любом другом боте, он на 100% поразит любого нетронутого бота. Опять же, оценка значительно увеличилась.Снова улучшен загрузчик. Теперь он работает по более короткой петле. (что, кажется, имеет большую корреляцию с моим счетом)
Улучшенный загрузчик еще раз. Использует оригинальный код бота, чтобы он загружался быстрее. Также добавлены 2 случайных блока, которые, кажется, улучшают счет
источник
нападающий
источник
Movebot
Как и Flagbot, но передвигайтесь, принимая подарки кода, чтобы идти со всеми нашими флагами.
источник
Воспроизводящий бот
Этот бот пытается заморозить своего противника, а затем скопировать весь код в этот бот, прежде чем перезапустить другой бот. Это также должно работать (в основном), если противник использует блокировку, хотя это делает все это еще медленнее, чем уже есть.
источник
волхв
Волхв - это простая попытка самораспространяющегося вируса. Он пытается скопировать себя в программы других ботов. (Отредактировано, чтобы удалить отрицательные числа, исправить условие, обрезать линии.)
источник
for (int i = 1; i < 25; i++)
.. .DNAbot
Этот бот восстанавливает свой собственный код во время движения и атаки.
источник
блокатор
источник
обезьяна
источник
Быстрый морозильник
Пытается скопировать флаги в строке, которые будут выполнены рядом с его противником, перемещается, если нет врага для атаки.
источник
Блокировать, заморозить, атаковать
Блокирует все 24 строки, затем зацикливается 24 раза, двигаясь или атакуя, затем повторяется. Атака включает в себя попытку заморозить противника, затем скопировать четыре флага в случайные места, затем повернуть.
источник
Скрыть, заблокировать, атаковать
Этот бот основан на Block Freeze Attack. Я изменил расположение некоторых
If
операторов, чтобы сделать их более компактными, что позволило мне установить больше флагов. Я также убегал в начале игры, чтобы выиграть время для блокировки.источник
Ровинг Вирус
Этот бот бродит, пока не находит врага, затем замораживает их, заменяет весь их код своим собственным, размораживает их, затем снова бродит.
источник
Простуда
Это заразит вас практически сразу, и вы будете распространять его вокруг. основываясь на паразите PhiNotPi , простуда почти сразу же проверяет, может ли он скопировать свой флаг на ваш. Блокирует случайное значение, если не может. Немного двигается, если нет противника.
источник
грипп
Это тесно связано с простудой (которая была основана на моем паразите) с немного увеличенной скоростью.
источник
Ребрендинг
Этот бот пытается случайным образом найти флаги у вражеских ботов и заменить их дружественными флагами, отворачиваясь после обнаружения успеха. Вдохновлен раком бота.
источник