CodeBots 2: Дизайн, керований подіями


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)вірно, якщо це 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напрямку. Якщо там є бот, ти не рухатимешся.
  2. Copy(A,B)скопіює змінну Aв B. Bне може бути числовим значенням, за винятком імені змінної. Aі Bне може бути різного типу. Копіювання рядка не копіює умову.
  3. Flagнічого не робить. Бот з найбільшою кількістю прапорів у вашому коді отримає бал. Перемагає бот з найбільшою кількістю очок.
  4. If(C,L1,L2)буде виконувати рядок, L1якщо Cце правда, інше виконує 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 Ледачий левиця
  3. 0,9 захисника
  4. 0,5 Флаггер
  5. 0,4 CliqueBot
  6. 0,4 Підступно
  7. 0,3 Нападник
  8. 0,3 Гард
  9. 0,3 SingleTarget
  10. 0,2 FreezeBot
  11. 0,2 Sentinel
  12. 0,2 Драйбі
  13. 0,0 Протизалежний
  14. 0,0 MoveBot
  15. 0,0 CliqueBorg
  16. 0,0 Калькулятор
  17. 0,0 Тест
  18. 0,0 Імітатор

ОНОВЛЕННЯ

Рядки коду тепер обертаються під час перегляду коду опонента. Це означає, що у вашому противнику рядком 1 може бути рядок 14 (або будь-який інший рядок). Бот матиме фіксований зсув, який компенсує його рядки за Xкількістю, коли його переглядає противник . CЗмінна супротивника також буде компенсована на стільки ж X. Xне зміниться в межах однієї гри, але зміниться від гри до гри.


Натан: Чи можете ви перевірити "Ледачу левицю", щоб побачити, чи помилки, про які я повідомляв, є законними (або якщо я просто виходжу на обід)? Без поспіху. Просто переконайтеся, що ви знаєте про подання.
COTO

@COTO Вибачте, школи збожеволіли. Я спробую дійти до цього сьогодні ввечері.
Натан Меррілл

Умова "Усі" може бути неявною для будь-якого списку умов, розділених комами. Це полегшить читання записів.
ccarton

Думаю, я знайшов твою помилку. Об'єкти FuctionParser використовуються як ключі в HashMap, що означає, що вам потрібен правильний метод рівняння. Це виправляє проблему з CliqueBot та, ймовірно, також Ледачою левицею. Я надіслав вам запит на тягнення.
ccarton

@ccarton, HashMap запам'ятовує лише ті значення, які не використовуються для перевірки рівності
Nathan Merrill

Відповіді:


13

Борг

Перетворює всі інші боти в самі клони. Опір даремний.

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). Номери ліній опонента все ще можуть бути абсолютними, оскільки вони так чи інакше є випадковими.


Гей, ми можемо поговорити про цього бота? chat.stackexchange.com/rooms/17128/…
Натан Мерріл

@Nathan, ти використовував останню версію цього запису в останньому запуску?
ccarton

Я вражений, що цей бот здатний так успішно заразити інших ботів. Мені б хотілося побачити, як це працює.
Спарр

@ccarton немає. Я не розумів, що це оновлено. Похитування.
Натан Меррілл

@Sparr Я додав кілька коментарів. Сподіваюсь, що це полегшує наслідування. Я думаю, що бот настільки ефективний через експоненціальний ефект клонування. Кожен бот, який він заражає, згасає та заражає інших. Крім того, вони, природно, намагатимуться відновити один одного, коли нанесуть шкоду.
ccarton


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

ви повинні ставити результати OVar(D)не A!
MegaTom

@MegaTom Готово;)
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-індексований. Справді слід було це перевірити раніше. Додано прапор на початку, щоб підбити все одне.


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

Зловмисник

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

Буде шукати вас і наповнить прапорами!


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

Схожа ідея на бота під тим же ім’ям у попередньому конкурсі. Переміщуйтеся, поки я не натисну іншого бота, а потім заморожую його в цикл, переписуючи власний код своїми прапорами. Цього разу заражені боти замінюють випадкові лінії замість послідовних рядків, що робить процес зараження трохи менш ефективним, але набагато швидшим.


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

Гард

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)))

Нападає будь-якого робота поруч.


Ваш останній рядок не може скопіювати з умови на рядок.
Натан Меррілл

@NathanMerrill Я тільки що це виправляв ...
MegaTom

OConпотрібно бутиOCond
Натан Меррілл

1

Заморозити бот

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змінну, потім заповнює вас прапорами та переходить до наступної жертви.


Рядок 3: Будь ласка, замініть D + 1 на Add (D, 1)
Nathan Merrill

Ви припускаєте, що "Пуск" знаходиться на нульовому рядку Тепер усіх заохочують ставити свій Старт на лінію 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)

Пророкує, що ви зробили б, тоді це робить.


Замініть D + 1 на Add (D, 1)
Nathan Merrill

Крім того, ви не можете передавати команду як рядок. Ви повинні або пройти в OLineабо вLine
Nathan Меррілл

@NathanMerrill готовий до роботи! (Принаймні, я думаю, що це так)
MegaTom

Цей бот дійсно поставив мій код через деякі проблеми, але я був з моєї вини, а не з вашої. Є кілька помилок, будь ласка , поставити Lineнавколо 2, а Add(D,1)замістьD+1
Натан Меррілл

1

Ледача левиця

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

Її млявість насправді пов’язана з помилкою (або, можливо, моїм непорозумінням подієвою моделлю), де умови в перших трьох рядках (проста перевірка паритету для забезпечення того, щоб прапори не перезаписуються) періодично, незрозуміло оцінюють true, фіксуючи Лео в циклі лемініскату . Кілька інших умов (особливо тих, які покладаються на цю BotAt()умову) також оцінюють trueу моменти, коли немає сусідніх ботів. Нарешті, Moveі Copyдирективи чітко ігноруються під час переходу через тренажер. Оскільки мої умовні логічні ланцюги дещо епічні, в моєму коді та в тренажері є багато місця для помилок . ;)

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

Я не можу бачити помилку, але на всякий випадок, якщо ви, ймовірно, використовуєте 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)))

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


Будь ласка, замініть Плюс на "Додати" та "Мінус" на "Суб
Натан Меррілл"

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.