Добро пожаловать в Code Bots 2!
Вы усвоили свой урок со времени последних ботов. Вы пытались найти больше способов разместить больше действий в меньшем количестве строк, и теперь у вас наконец есть это. Вы собираетесь создать управляемый событиями Code Bot.
Ваш бот должен состоять из 24 строк. Каждая строка соответствует одному из двух форматов:
Condition:Action
или же
Action
У вашего бота также достаточно памяти для хранения 5 целых чисел, названных A
через E
. Целое число может хранить значения от 0 до 23.
Каждый ход вы будете выполнять линию C
, если не выполняется одно из условий. Если это так, то C
будет содержать номер строки условия, которая является истинной, и тогда эта строка будет выполнена. В конце каждого хода C
будет увеличиваться.
Есть доступные условия:
Start
верно только на первом повороте. Вы должны иметь это в своем коде ровно один разBotAt(N)
истина, если в месте, указанном N, есть ботEquals(A,B)
истинно, если A равно B. Они могут быть разных типов, если так, они не будут равны.Modified(A)
Значение true, еслиA
было скопировано во время последнего хода.A
должно быть именем переменной, строкой или условиемAny(C1,C2,...)
верно, если выполняется любое из условийNone(C1,C2,...)
верно, если ни одно из условий не выполняетсяAll(C1,C2,...)
верно, если все условия выполняютсяNot(C)
верно, если C ложно.C
должно быть условие.
Переменные могут быть в одном из следующих форматов. Первые 9 являются числовыми и могут использоваться для любого случая, когда N используется на этой странице.
A
,B
,C
,D
,E
- Число от 0 до 23
This
вернет номер строки, в которой он находится в данный моментAdd(N1,N2,...)
вернет сумму всех значенийSub(N1,N2)
вернет N1 минус N2Mult(N1,N2,...)
вернет произведение всех значенийDiv(N1,N2)
вернет N1, деленное на N2Mod(N1,N2)
вернет N1 мод N2OVar(N)
примет имя переменной и вернет переменную противникаLine(N)
вернет N-ую строку в вашем кодеType(N)
вернет N-й тип строки в вашем коде (типы - это имена действий)Cond(N)
вернет условие на N-й строкеCondType(N)
вернет тип условия в N-й строке (типы - это имена условий)OLine(N)
вернет N-ую строку в коде вашего оппонентаOType(N)
вернет N-й тип строки в коде вашего оппонентаOCond(N)
вернет условие на N-й строкеOCondType(N)
вернет тип условия в N-й строке
A
и B
предназначены для вашего личного использования, C
используются для определения того, какую строку выполнять в вашем коде, и D
используются в качестве направления. Каждое значение D
относится к разным квадратам и парам направлений. E
выдает случайное значение каждый раз. D
и E
будет инициализирован случайным значением, в противном случае 0
.
Используемое направление будет [North,East,South,West][D%4]
. Ваш противник - бот в непосредственной близости от этого поля.
Вам доступны 4 действия:
Move
переместит вас на 1 клетку вперед вD
направлении th Если там есть бот, вы не будете двигаться.Copy(A,B)
скопирует переменнуюA
вB
.B
не может быть числовым значением, кроме имени переменной.A
иB
не может быть разных типов. Копирование строки не копирует условие.Flag
ничего не делает. Бот с наибольшим количеством флагов в вашем коде получит очко. Бот с наибольшим количеством очков выигрывает.If(C,L1,L2)
выполнит строку,L1
еслиC
true, иначе выполняетL2
.C
является условием, иL1
иL2
должно быть строки.
Большая картина
50 копий каждого бота будут размещены в мире. Ваша цель - собрать как можно больше ботов. За каждого бота, который имеет больше вашего типа флага, чем любой другой тип флага, вы получаете очко.
Боты будут размещены следующим образом:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
Будет проведено 10 игр, и очки будут усреднены по всем играм, определяя, кто является победителем.
Примечания стороны
Если применимо несколько условий, то Start
будет выполнено то, которое следует немедленно
Боты будут плотно упакованы, но вы не начнете соседствовать с другим ботом. (Технически это будет тот же формат, что и последние CodeBots)
Поскольку этот вызов не был размещен в «песочнице» (чтобы никто не получил преимущества), я оставляю за собой право изменить мелкие детали для справедливости или дополнительных возможностей. Также, если есть ошибка в бегуне CodeBots, я ее исправлю, даже если бот зависел от этой ошибки для ее успеха. Я стараюсь быть максимально справедливым .
Рекурсивные If
операторы не будут выполняться
Если ваш бот короче 24 строк, остальные строки будут заполнены Flag
Помните, когда копируете на свой C
, это C
увеличивается в конце вашего хода.
Интерпретатор CodeBots можно найти здесь . Он включает в себя файл .jar для легкого выполнения. Просто добавьте своего бота в папку с ботами
множество
- 893,9 Борг
- 1.3 LazyLioness
- 0,9 Защитник
- 0.5 Flagger
- 0.4 CliqueBot
- 0,4 Коварный
- 0.3 Атакующий
- 0,3 Гард
- 0.3 SingleTarget
- 0.2 FreezeBot
- 0,2 Страж
- 0,2 Драйвби
- 0.0 AntiInsidious
- 0.0 MoveBot
- 0.0 CliqueBorg
- 0.0 калькулятор
- 0.0 TestBot
- 0.0 подражатель
ОБНОВИТЬ
Строки кода теперь поворачиваются при просмотре кода вашего оппонента. Это означает, что линия 1 вашего оппонента может быть линией 14 (или любой другой линией). Бот будет иметь фиксированное смещение, которое будет смещать его линии по X
количеству при просмотре противником . C
Переменная противника также будет смещена на ту же X
сумму. X
не изменится в одной и той же игре, но изменится от игры к игре.
источник
Ответы:
Borg
Преобразует всех других ботов в клонов себя. Сопротивление бесполезно.
Изменить: Небольшое исправление для сброса A, если противник движется до того, как я закончу с ним. Кажется, не влияет на счет, но это заставляет меня чувствовать себя лучше.
Редактирование # 2: Добавлена более полная проверка, чтобы убедиться, что процесс клонирования завершен правильно (строка 3)
Редактирование # 3: Обновление для обработки новых случайных смещений. Трудность заключалась в том, что у новых клонов их код находился в случайных смещениях, что означает, что они не знают местоположение своих собственных строк. Это означает, что все ссылки на мои собственные строки должны быть относительными (к
This
). Номера линий противников все еще могут быть абсолютными, так как они в любом случае случайны.источник
Наблюдатель YouTube
Стрелять в луну
А остальное автоматически заполняется флагом.
источник
Калькулятор
Этот бот не понимает цели этого испытания, поэтому он решил подсчитать некоторые цифры для врага.
источник
OVar(D)
нетA
!CliqueBot
Узнает друзей по
B
значению, заполняет все остальные строки флагами. Также идет некоторая длина, чтобы сохранить целостность одного из его собственных флагов (эта часть симпатична, но, вероятно, не очень полезна).Редактировать: неудивительно, что, кажется, где-то здесь ошибка, судя по счету.Подозреваю, что строки индексируются 0, а мой код индексируется 1. Должен действительно проверить это раньше. Добавлен флаг в начале, чтобы поднять все на один.
источник
Защитник
источник
MoveBot
источник
Copy(23,C)
?нападающий
источник
BotAt(D):Copy(Line(X),OLine(E))
где строка X содержитEquals(1,1):Flag
... для удовольствияLine
копирует только действие, а не условие.Одиночная цель
Выследит вас и наполнит флагами!
источник
All
Условие требует)
коварный
Аналогичная идея с ботом с таким же именем в предыдущем конкурсе. Двигайтесь, пока я не нажму на другого бота, затем заморозьте его в цикле, перезаписывая его собственный код моими флагами. На этот раз зараженные боты перезаписывают случайные строки вместо последовательных, что делает процесс заражения немного менее эффективным, но намного быстрее.
источник
Line(4)
можно немного упростить.Add(OVar(C),0)
так же, какOVar(C)
и такAdd(This,Add(4,Mod(E,14)))
же, какAdd(This,4,Mod(E,14))
.Gard
Атакует любого робота рядом с ним.
источник
OCon
должно бытьOCond
Freeze Bot
Заманивает вас в ловушку. Уличает вашу собственную
A
переменную, затем наполняет вас флагами и переходит к следующей жертве.источник
Имитатор
Предсказывает, что вы будете делать, а затем делает это.
источник
OLine
или вLine
Line
вокруг2
, иAdd(D,1)
вместоD+1
Ленивая Львица
Первоначально просто «Львица», мое первое участие в конкурсе заработало название «ленивый», буквально ничего не делая, когда его вводили в симулятор.
На самом деле ее летаргия вызвана ошибкой (или, возможно, моим неправильным пониманием модели событий), когда условия в первых трех строках (простая проверка на четность, чтобы убедиться, что флаги не перезаписаны) иногда, необъяснимым образом оценивают
true
, блокируя leo в цикле lemniscate , Некоторые другие условия (особенно те, которые основаны на этомBotAt()
условии) также оцениваютtrue
время от времени, когда нет соседних ботов. Наконец,Move
иCopy
директивы явно игнорируются при переходе через симулятор. Так как мои цепочки условной логики несколько эпичны, в моем коде и в симуляторе достаточно места для ошибок . ;)В любом случае, я отправляю Lazy Lioness в качестве контрольного примера для диагностики ошибок или отладки на симуляторе, что, мы надеемся, приведет к появлению не слишком ленивой Lioness, которую я затем смогу смоделировать и усовершенствовать в качестве моей первой добросовестной отправки Bots v2 соревнование.
Ничего не делает
источник
Modified
условие вместо некоторых изEquals
Modified
условие является приглашением для бесконечного цикла. Если я не могу использовать проверку четности, я просто полностью уберу строки. Выясните что-нибудь еще полезное, чтобы вставить их. ;)страж
улучшение на
Gard
. Хиты соседних ботов с флагами на первых 8 строчках. (то есть все наиболее используемые)источник
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
CliqueBorg
Попытка объединить технологии CliqueBot и Borg для создания бота, который распознает свои копии, несмотря на смещение строки. Он также начинает процесс копирования с последней выполненной строки кода на противоположном боте, а не со строки 0, что с большей вероятностью заморозит его на месте, но также с большей вероятностью приведет к поврежденной копии (на самом деле я не уверен, что это даже работает, я не проверял, и это довольно сложно).
источник
Driveby
Последняя попытка до истечения срока.
источник