CodeBots 2: Event-Driven Design

11

Добро пожаловать в Code Bots 2!

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

Ваш бот должен состоять из 24 строк. Каждая строка соответствует одному из двух форматов:

Condition:Action

или же

Action

У вашего бота также достаточно памяти для хранения 5 целых чисел, названных Aчерез E. Целое число может хранить значения от 0 до 23.

Каждый ход вы будете выполнять линию C, если не выполняется одно из условий. Если это так, то Cбудет содержать номер строки условия, которая является истинной, и тогда эта строка будет выполнена. В конце каждого хода Cбудет увеличиваться.

Есть доступные условия:

  1. Startверно только на первом повороте. Вы должны иметь это в своем коде ровно один раз
  2. BotAt(N) истина, если в месте, указанном N, есть бот
  3. Equals(A,B) истинно, если A равно B. Они могут быть разных типов, если так, они не будут равны.
  4. Modified(A)Значение true, если Aбыло скопировано во время последнего хода. Aдолжно быть именем переменной, строкой или условием
  5. Any(C1,C2,...) верно, если выполняется любое из условий
  6. None(C1,C2,...) верно, если ни одно из условий не выполняется
  7. All(C1,C2,...) верно, если все условия выполняются
  8. Not(C)верно, если C ложно. Cдолжно быть условие.

Переменные могут быть в одном из следующих форматов. Первые 9 являются числовыми и могут использоваться для любого случая, когда N используется на этой странице.

  1. A, B, C, D,E
  2. Число от 0 до 23
  3. This вернет номер строки, в которой он находится в данный момент
  4. Add(N1,N2,...) вернет сумму всех значений
  5. Sub(N1,N2) вернет N1 минус N2
  6. Mult(N1,N2,...) вернет произведение всех значений
  7. Div(N1,N2) вернет N1, деленное на N2
  8. Mod(N1,N2) вернет N1 мод N2
  9. OVar(N) примет имя переменной и вернет переменную противника
  10. Line(N) вернет N-ую строку в вашем коде
  11. Type(N) вернет N-й тип строки в вашем коде (типы - это имена действий)
  12. Cond(N) вернет условие на N-й строке
  13. CondType(N) вернет тип условия в N-й строке (типы - это имена условий)
  14. OLine(N) вернет N-ую строку в коде вашего оппонента
  15. OType(N) вернет N-й тип строки в коде вашего оппонента
  16. OCond(N) вернет условие на N-й строке
  17. OCondType(N) вернет тип условия в N-й строке

Aи Bпредназначены для вашего личного использования, Cиспользуются для определения того, какую строку выполнять в вашем коде, и Dиспользуются в качестве направления. Каждое значение Dотносится к разным квадратам и парам направлений. Eвыдает случайное значение каждый раз. Dи Eбудет инициализирован случайным значением, в противном случае 0.

Используемое направление будет [North,East,South,West][D%4]. Ваш противник - бот в непосредственной близости от этого поля.

Вам доступны 4 действия:

  1. Moveпереместит вас на 1 клетку вперед в Dнаправлении th Если там есть бот, вы не будете двигаться.
  2. Copy(A,B)скопирует переменную Aв B. Bне может быть числовым значением, кроме имени переменной. Aи Bне может быть разных типов. Копирование строки не копирует условие.
  3. Flagничего не делает. Бот с наибольшим количеством флагов в вашем коде получит очко. Бот с наибольшим количеством очков выигрывает.
  4. If(C,L1,L2)выполнит строку, L1если Ctrue, иначе выполняет 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 для легкого выполнения. Просто добавьте своего бота в папку с ботами

множество

  1. 893,9 Борг
  2. 1.3 LazyLioness
  3. 0,9 Защитник
  4. 0.5 Flagger
  5. 0.4 CliqueBot
  6. 0,4 Коварный
  7. 0.3 Атакующий
  8. 0,3 Гард
  9. 0.3 SingleTarget
  10. 0.2 FreezeBot
  11. 0,2 Страж
  12. 0,2 Драйвби
  13. 0.0 AntiInsidious
  14. 0.0 MoveBot
  15. 0.0 CliqueBorg
  16. 0.0 калькулятор
  17. 0.0 TestBot
  18. 0.0 подражатель

ОБНОВИТЬ

Строки кода теперь поворачиваются при просмотре кода вашего оппонента. Это означает, что линия 1 вашего оппонента может быть линией 14 (или любой другой линией). Бот будет иметь фиксированное смещение, которое будет смещать его линии по Xколичеству при просмотре противником . CПеременная противника также будет смещена на ту же Xсумму. Xне изменится в одной и той же игре, но изменится от игры к игре.

Натан Меррилл
источник
Натан: Можете ли вы проверить «Ленивую львицу», чтобы увидеть, являются ли ошибки, о которых я сообщил, законными (или я только на обед)? Нет спешки. Просто убедитесь, что вы знаете о представлении.
COTO
@COTO Извините, школы были сумасшедшими. Я постараюсь добраться до этого вечером.
Натан Меррилл
Условие «Все» можно сделать неявным для любого списка условий, разделенных запятыми. Это сделало бы чтение записей немного легче.
ccarton
Я думаю, что нашел вашу ошибку. Объекты FuctionParser используются в качестве ключей в HashMap, что означает, что вам нужен правильный метод equals. Это решает проблему с CliqueBot и, вероятно, с Lazy Lioness. Я отправил вам запрос на удаление.
ccarton
@ccarton HashMap только запоминает значения, он не используется для проверки равенства
Nathan Merrill

Ответы:

13

Borg

Преобразует всех других ботов в клонов себя. Сопротивление бесполезно.

Start:Copy(2,A)                               # Cloning will begin at line 2
All(Not(BotAt(D)),Not(Equals(2,A))):Copy(2,A) # Reset A if the opp left before we were done
Not(BotAt(D)):Move
All(Equals(Line(Sub(This,3)),OLine(0)),Equals(Line(Sub(This,2)),OLine(1)),Equals(Line(Sub(This,1)),OLine(2)),Equals(Line(This),OLine(3)),Equals(Line(Add(This,1)),OLine(4)),Equals(Line(Add(This,2)),OLine(5)),Equals(Line(Add(This,3)),OLine(6)),Equals(Line(Add(This,4)),OLine(7)),Equals(Line(Add(This,5)),OLine(8))):Copy(E,D) #  Check if cloning is complete
All(Equals(A,2),Not(Equals(OCond(1),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(1)) # Copy freeze cond to OLine(1) before cloning starts
All(Equals(A,2),Not(Equals(OLine(1),Line(Add(This,3))))):Copy(Line(Add(This,3)),OLine(1)) # Copy freeze line
Not(Equals(Cond(Add(Sub(This,6),A)),OCond(A))):Copy(Cond(Add(Sub(This,6),A)),OCond(A))    # Copy Cond(A) to OCond(A)
Not(Equals(Line(Add(Sub(This,7),A)),OLine(A))):Copy(Line(Add(Sub(This,7),A)),OLine(A))    # Copy Line(A) to OLine(A)
Equals(A,A):Copy(Add(A,1),A) # Increment A. It will wrap around all 24 lines before the completion check matches

Изменить: Небольшое исправление для сброса A, если противник движется до того, как я закончу с ним. Кажется, не влияет на счет, но это заставляет меня чувствовать себя лучше.

Редактирование # 2: Добавлена ​​более полная проверка, чтобы убедиться, что процесс клонирования завершен правильно (строка 3)

Редактирование # 3: Обновление для обработки новых случайных смещений. Трудность заключалась в том, что у новых клонов их код находился в случайных смещениях, что означает, что они не знают местоположение своих собственных строк. Это означает, что все ссылки на мои собственные строки должны быть относительными (к This). Номера линий противников все еще могут быть абсолютными, так как они в любом случае случайны.

ccarton
источник
Эй, мы можем поговорить об этом боте? chat.stackexchange.com/rooms/17128/…
Натан Меррилл
@ Натан, ты использовал последнюю версию этой записи в последнем прогоне?
ccarton
Я поражен тем, что этот бот способен так успешно заражать других ботов. Я хотел бы увидеть краткое изложение того, как это работает.
Спарр
@ccarton нет. Я не знал, что это было обновлено. Перезапуск.
Натан Меррилл
@Sparr Я добавил несколько комментариев. Надеюсь, что это облегчает следовать. Я думаю, что бот настолько эффективен из-за экспоненциального эффекта клонирования. Каждый бот, которого он заражает, уходит и заражает других. Кроме того, они, естественно, попытаются починить друг друга, когда получат урон.
ccarton
4

Наблюдатель YouTube

Стрелять в луну

Start:Flag

А остальное автоматически заполняется флагом.

Дэвид говорит восстановить Монику
источник
3

Калькулятор

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

Equals(Mod(OVar(E),5),0):Copy(Add(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),1):Copy(Sub(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),2):Copy(Mult(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),3):Copy(Div(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),4):Copy(Mod(OVar(A),OVar(B)),OVar(D))
Start:Move
CommonGuy
источник
Вы должны поместить результаты в OVar(D)нет A!
MegaTom
@MegaTom Done;)
CommonGuy
3

CliqueBot

Flag
Start: Copy(11,B)
Not(Equals(Line(20),Line(21))): If(Equals(Line(21),Line(22)),Line(7),Line(8))
Not(Equals(Line(21),Line(22))): If(Equals(Line(20),Line(21)),Line(9),Line(10))
All(BotAt(D),Not(Equals(11,OVar(B)))): If(Equals(Line(20),OLine(OVar(C))),Line(10),Line(11))
Any(BotAt(D),Equals(E,B)): Copy(Add(D,1),D)
Equals(1,1): Move
Copy(Line(21),Line(20))
Copy(Line(20),Line(21))
Copy(Line(21),Line(22))
If(Equals(Line(20),OLine(Sub(OVar(C),1))),Line(5),Line(12))
Copy(Line(20),OLine(OVar(C)))
Copy(Line(20),OLine(E))

Узнает друзей по Bзначению, заполняет все остальные строки флагами. Также идет некоторая длина, чтобы сохранить целостность одного из его собственных флагов (эта часть симпатична, но, вероятно, не очень полезна).

Редактировать: неудивительно, что, кажется, где-то здесь ошибка, судя по счету.

Подозреваю, что строки индексируются 0, а мой код индексируется 1. Должен действительно проверить это раньше. Добавлен флаг в начале, чтобы поднять все на один.

histocrat
источник
Я думаю, что нашел ошибку в контроллере. Я послал ему запрос на вытащить. Пока он не примет это, вы можете попробовать мою вилку, если хотите, и дайте мне знать, работает ли она для вас.
ccarton
Ошибка была исправлена ​​в последней версии.
Натан Меррилл
2

Защитник

Start:Copy(0,A)
Copy(0,B)
Flag
Flag
All(Modified(Line(2)),Equals(A,0)):Copy(1,A)
Copy(Line(3),Line(2))
Copy(0,A)
Copy(10,C)
All(Modified(Line(3)),Equals(B,0)):Copy(1,B)
Copy(Line(2),Line(3))
Copy(0,B)
BotAt(D):Copy(Line(2),OLine(E))
Натан Меррилл
источник
2

MoveBot

Start:Move
Copy(E,D)
Copy(-1,C)
Натан Меррилл
источник
Не должно ли это быть Copy(23,C)?
Шон Лэтэм
Отрицательные значения теперь разрешены.
Натан Меррилл
2

нападающий

Start:Move
BotAt(D):Copy(Line(Add(Mod(E,6),4)),OLine(E))
Any(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Move
None(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Copy(E,D)
Натан Меррилл
источник
BotAt(D):Copy(Line(X),OLine(E))где строка X содержит Equals(1,1):Flag... для удовольствия
seequ
@Sieg Lineкопирует только действие, а не условие.
MegaTom
Моя тактика подавления :(
seequ
2

Одиночная цель

Start:Move
All(BotAt(D),Not(Equals(OVar(D),D))): Copy(D,OVar(D))
BotAt(D):Copy(Line(E),OLine(E))
Equals(A,A):Move

Выследит вас и наполнит флагами!

MegaTom
источник
AllУсловие требует)
Натан Меррилл
2

коварный

Start:Flag           # comments -->                                                                                 # why move when we can fit another flag here?
Equals(E,0):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                  # 1/24 chance to turn left or right
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(Sub(OVar(C),1)))    # Copy the freeze condition
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(Add(This,4))))):Copy(Line(Add(This,4)),OLine(Sub(OVar(C),1)))    # Copy the flag-copying line
All(BotAt(D),Not(Equals(OLine(Add(OVar(C),0)),Line(Add(This,Add(4,Mod(E,14))))))):Copy(Line(Add(This,Add(4,Mod(E,14)))),OLine(Add(OVar(C),0))) # copy one of my flags to them
BotAt(D):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                     # turn left or right if we've infected our target
Equals(A,A):Move                                                                                                    # move if all else fails, also infection freeze condition
Copy(Line(Add(This,1)),Line(Add(This,Mod(E,22))))                                                                   # infection line 1
Flag                                                                                                                # first of many flags

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

Sparr
источник
Line(4)можно немного упростить. Add(OVar(C),0)так же, как OVar(C)и так Add(This,Add(4,Mod(E,14)))же, как Add(This,4,Mod(E,14)).
MegaTom
@MegaTom Я сделал первое ненужное добавление, чтобы выстроить логические части предыдущих строк. Второй был из-за незнания того, что Add может принимать несколько параметров. Спасибо
Спарр
1

Gard

Start: Move
BotAt(D):IF(Equals(Line(7),OLine(C)),Line(6),Line(5))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
Copy(Line(7),OLine(OVar(C)))
Copy(Cond(7),OCond(Sub(OVar(C),1)))

Атакует любого робота рядом с ним.

MegaTom
источник
Ваша последняя строка не может копировать из условия в строку.
Натан Меррилл
@NathanMerrill Я только что
исправил
OConдолжно бытьOCond
Натан Меррилл
1

Freeze Bot

Start:Move
All(BotAt(D),Not(Equals(OCond(1),Cond(5)))):Copy(Cond(5),OCond(1))
All(BotAt(D),Not(Equals(OLine(1),Line(6)))):Copy(Line(6),OLine(1))
All(BotAt(D),Equals(Mod(OVar(A),24),0)):Copy(Add(D,1),D)
BotAt(D):Copy(Line(20),OLine(OVar(A)))
Equals(A,A):Move
Copy(Add(A,1),A)

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

MegaTom
источник
Строка 3: Пожалуйста, замените D + 1 на Add (D, 1)
Nathan Merrill
Вы предполагаете, что Start находится на нулевой линии. Теперь все заинтересованы в том, чтобы поставить свой Старт на линию 2. Это приведет к глупой тенденции к эскалации / повторному представлению :(
Sparr
1

Имитатор

Start:Move
BotAt(D):If(OCond(0),OLine(0),Line(2))
If(OCond(1),OLine(1),Line(3))
If(OCond(2),OLine(2),Line(4))
If(OCond(3),OLine(3),Line(5))
If(OCond(4),OLine(4),Line(6))
If(OCond(5),OLine(5),OLine(OVar(C)))
Not(BotAt(D)):If(BotAt(Add(D,1)),Line(8),Line(0))
Copy(Add(D,1),D)

Предсказывает, что вы будете делать, а затем делает это.

MegaTom
источник
Пожалуйста, замените D + 1 на Add (D, 1)
Nathan Merrill
Кроме того, вы не можете передать команду в виде строки. Вы должны либо пройти в OLineили вLine
Nathan Меррилл
@NathanMerrill готов к работе! (По крайней мере, я так думаю)
MegaTom
Этот бот действительно доставил мой код из-за некоторых проблем, но это была моя вина, а не ваша. Есть несколько ошибок, пожалуйста, поставьте Lineвокруг 2, и Add(D,1)вместоD+1
Натан Меррилл
1

Ленивая Львица

Первоначально просто «Львица», мое первое участие в конкурсе заработало название «ленивый», буквально ничего не делая, когда его вводили в симулятор.

На самом деле ее летаргия вызвана ошибкой (или, возможно, моим неправильным пониманием модели событий), когда условия в первых трех строках (простая проверка на четность, чтобы убедиться, что флаги не перезаписаны) иногда, необъяснимым образом оценивают true, блокируя leo в цикле lemniscate , Некоторые другие условия (особенно те, которые основаны на этом BotAt()условии) также оценивают trueвремя от времени, когда нет соседних ботов. Наконец, Moveи Copyдирективы явно игнорируются при переходе через симулятор. Так как мои цепочки условной логики несколько эпичны, в моем коде и в симуляторе достаточно места для ошибок . ;)

В любом случае, я отправляю Lazy Lioness в качестве контрольного примера для диагностики ошибок или отладки на симуляторе, что, мы надеемся, приведет к появлению не слишком ленивой Lioness, которую я затем смогу смоделировать и усовершенствовать в качестве моей первой добросовестной отправки Bots v2 соревнование.

Ничего не делает

All(Not(Equals(Line(18),Line(21))),Equals(Line(21),Line(22))):Copy(Line(21),Line(18))
All(Not(Equals(Line(21),Line(22))),Equals(Line(22),Line(18))):Copy(Line(22),Line(21))
All(Not(Equals(Line(22),Line(18))),Equals(Line(18),Line(21))):Copy(Line(18),Line(22))
All(Any(BotAt(Add(D,1)),BotAt(Add(D,2)),BotAt(Add(D,3))),Not(BotAt(D))):Move
All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,1))),All(BotAt(Add(D,1)),BotAt(Add(D,2)))),Not(BotAt(Add(D,3)))):Copy(Add(D,3),D)
Any(All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,3))),All(BotAt(Add(D,2)),BotAt(Add(D,3)))),Not(BotAt(Add(D,1)))),All(BotAt(Add(D,1)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19))))):Copy(Add(D,1),D)
All(BotAt(Add(D,3)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19)))):Copy(Add(D,3),D)
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Not(Equals(OLine(2),Line(19)))):Copy(Cond(20),OCond(2))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(3),Line(18)))):Copy(Line(18),OLine(3))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(4),Line(21)))):Copy(Line(21),OLine(4))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(0),Cond(22)))):Copy(Cond(22),OCond(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(0),Line(17)))):Copy(Line(17),OLine(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(1),Cond(21)))):Copy(Cond(21),OCond(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(1),Line(20)))):Copy(Line(20),OLine(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(2),Line(19)))):Copy(Line(19),OLine(2))
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Equals(OLine(2),Line(19))):Copy(Add(D,A),D)
Equals(E,1):Copy(Add(A,2),A)
Any(Equals(E,4),Equals(E,8)):Copy(Add(D,E,A),D)
Not(Equals(A,A)):Flag
Not(Equals(A,A)):Copy(Line(3),OLine(E))
Equals(A,A):Move
Any(Equals(E,4),Equals(E,5),Equals(E,6),Equals(E,7),Equals(E,8),Equals(E,9)):Flag
Any(Equals(E,10),Equals(E,11),Equals(E,12),Equals(E,13)):Flag
Start:Copy(1,A)
COTO
источник
Я не вижу ошибки, но на всякий случай вы, вероятно, должны использовать Modifiedусловие вместо некоторых изEquals
MegaTom
cliqueBot, похоже, имеет ту же проблему. Я думаю, что это ошибка компилятора.
MegaTom
@MegaTom: Modifiedусловие является приглашением для бесконечного цикла. Если я не могу использовать проверку четности, я просто полностью уберу строки. Выясните что-нибудь еще полезное, чтобы вставить их. ;)
COTO
Я думаю, что нашел ошибку в контроллере. Я послал ему запрос на вытащить. Пока он не примет это, вы можете попробовать мою вилку, если хотите, и дайте мне знать, работает ли она для вас.
ccarton
1

страж

улучшение на Gard. Хиты соседних ботов с флагами на первых 8 строчках. (то есть все наиболее используемые)

flag
flag
Start:Copy(11,B)
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):If(Equals(OVar(D),Add(D,2)),Line(7),Line(8))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
copy(D,OVar(D))
copy(Line(Mod(E,2)),OLine(Mod(E,8)))
Not(Equals(Line(0),Line(1))):copy(Line(Add(9,Mod(E,16))),Line(Mod(E,2)))
MegaTom
источник
Я думаю, у вас есть неуместная скобка в строке 3. Первый Not не закрыт должным образом. Я думаю, что это должно бытьAll(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
ccarton
1

CliqueBorg

Flag
BotAt(D): Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1): Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start: Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))

Попытка объединить технологии CliqueBot и Borg для создания бота, который распознает свои копии, несмотря на смещение строки. Он также начинает процесс копирования с последней выполненной строки кода на противоположном боте, а не со строки 0, что с большей вероятностью заморозит его на месте, но также с большей вероятностью приведет к поврежденной копии (на самом деле я не уверен, что это даже работает, я не проверял, и это довольно сложно).

histocrat
источник
Пожалуйста , замените Plus с Add и минус с Sub
Натан Меррилл
1

Driveby

Последняя попытка до истечения срока.

Flag
Flag
BotAt(D):Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1):Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start:Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))
BotAt(D):Copy(Add(D,1),D)
Equals(1,1):Move
histocrat
источник