блин, это действительно 4-й? Для всех вас, пожилых людей, основная проблема та же, но мы используем Java вместо собственного языка. Вот последние три проблемы CodeBot , если вы заинтересованы.
Цель CodeBots - сделать вашего бота максимально вирусным . Каждый бот несет флаг, и вам нужно убедиться, что ваш флаг есть везде .
API
Боты будут следовать стандартному «протоколу», и боты будут синхронно выполнять следующие шаги:
IPAddress selectMessageRecipient()
позволяет боту выбирать, кому он хочет отправить «дружеское» сообщение.Message sendMessage()
позволяет боту выбирать содержимое сообщения, которое он отправит.processMessage(IPAddress, Message)
вызывается для каждого сообщения, которое получает бот.FunctionType selectFunctionToBlock()
блокирует функцию от перезаписи для текущего хода. Смотрите шаг 7.IPAddress selectAttackTarget()
позволяет боту выбирать, кого он хочет DDOS. DDOS-атака считается успешной, если на одного бота одновременно нацелены 3 бота. Если атака успешна, то каждый из атакующих может выполнить шаги 6 и 7.readData(ReadonlyBot)
позволяет боту читать данные, хранящиеся на уязвимом боте.FunctionType selectFunctionToReplace()
это суть этой проблемы . Вам разрешено выбрать 1 функцию (из 8 перечисленных здесь), чтобы скопировать их с вашего бота на их бота. Тогда ваша функция будет вызываться вместо их . Если несколько ботов выбирают одну и ту же функцию, случайная будет успешной.String getFlag()
вызывается в конце игры и должен возвращать строку, уникальную для вашего представления. Ваша функция всегда должна возвращать одну и ту же строку. Представление с наибольшим количеством флагов в конце игры выигрывает.
Место хранения
У вас есть 3 формы хранения, адресная книга , журнал и переменные . Эти формы хранения являются локальными для бота, на котором выполняется ваша функция (поэтому, если ваша функция будет скопирована, содержимое каждого из этих объектов будет отличаться). Все эти объекты могут быть изменены или очищены вручную. Чтобы получить эти объекты, у вас есть получатель в вашем классе (например getLog()
).
В AddressBook хранится список IP-адресов , каждый из которых имеет AddressType , который позволяет классифицировать различные типы адресов. Адресная книга всегда будет содержать как минимум 1 адрес (если он очищен, будет добавлен случайный). Очистка адресной книги для получения нескольких IP-адресов не допускается.
В журнале хранится список всех предпринятых действий, а также данные о действии. Он также включает в себя историю всех успешных атак (хотя вы не знаете, какие функции они перезаписали)
Объект Variables позволяет хранить строковые переменные, прикрепленные к имени строки. При запуске игры переменные будут содержать одну переменную, ID
которая содержит случайно сгенерированный идентификатор, уникальный для вашего типа бота.
У вас также есть другие функции доступа:
int getTurnNumber()
возвращает целое число с текущим ходомbool functionsMatch(ReadonlyBot, FunctionType)
проверяет, соответствует ли функция ReadonlyBot вашейIPAddress personalAddress()
возвращает ваш IP-адрес
Как реализовать
- Вы можете получить код от Github
- Добавьте своего бота в
\bots
папку, а затем добавьте ссылку на своего бота вcontroller\CodeBotFactory.java
- Ваш бот должен расширяться
codebots.bot.CodeBot
илиcodebots.bots.DefaultCodeBot
- Вам нужна Java 8, если вы хотите запустить контроллер.
- Вы можете запустить код (если вы находитесь в
/src
папке), используяjavac codebots\*.java
для компиляции, а затемjava codebots.Main
для запуска. - Вы можете не иметь никаких непостоянные переменные - члены в своем классе
- Отражение не допускается.
- Формы общения между ботами (одного и того же или разных типов) вне перечисленных выше методов не допускаются.
- Допускаются глупые и / или суицидальные боты, но все боты должны быть функционально отличными от существующих записей.
- Если вы хотите случайности в своем боте, используйте
getRandom()
- Пожалуйста, постарайтесь, чтобы ваш код работал эффективно. Я потратил много времени на профилирование и быстрое создание контроллера.
множество
105.2501 Expelliarmus!
104.5803 Я помогаю!
104.2746 Кто я?
103.8529 Dumb Bot
103.2028 Replacer
102.7045 Chaos
102.4046 Hermit Bot
102.2849 Swarmer
100.5598 Случайный бот любит вас
99.966 Доверьтесь доверию!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 Просто ваш дружелюбный соседский робот доставки почты.
89,4645 ноль
источник
Ответы:
TrustBot
Если вы отправите ему сообщение, он сделает то, что он говорит. Если он читает бота, он скопирует адреса прямо в свою книгу. Он атакует ботов, которых адресная книга говорит атаковать.
источник
AmnesiaBot
Случайный бот, который внедряет других ботов с кодом потери памяти. Каждая функция начинается с кода для очистки журнала, адресной книги и переменных. Этот код заставит умных ботов терять память, пытаясь избавиться от логики.
источник
NullBot
Его флаг очень ... характерный ...
Это также предназначено для проверки контроллера и ограничения правила «тупые боты разрешены».
источник
null
это строка ;) Просто модная нить.RandomCodeBot
Обязательная случайная запись в KoTH
источник
DisarmerBot
DisarmerBot не слишком умен. Если он получит инструкции по атаке, он выберет случайного нападавшего, в противном случае он нападет на случайного игрока. Это просто отменяет их
selectFunctionToBlock
функцию, чтобы заблокироватьselectFunctionToBlock
.источник
MarkedBot
Отмечает себя в первом раунде и использует эту информацию в последующих раундах. Таким образом, если другой бот будет введен с кодом атаки, он будет неэффективным.
источник
SwarmBot
Этот бот с неназванным названием довольно сложный (и самый сложный из представленных на данный момент), но я попытался создать бот, который систематически заменяет все методы цели перед тем, как перейти к новой цели. Он пытается идентифицировать свои копии и обращаться с ними как с союзниками, периодически проверяя их, чтобы обеспечить целостность. Я не придумал лучшего имени.
Связывание с веткой github repo, так как длина этого бота составляет 340 строк.
https://github.com/Draco18s/CodeBots4/blob/master/src/codebots/bots/SwarmBot.java
Несколько интересных моментов:
Variables
и увеличивает каждый раунд. Это должно следовать правилу «нет непостоянных переменных».functionsMatch
методом. БезfunctionsMatch
этого невозможно было написать бота, который мог бы принимать осмысленные решения, поскольку он был слепым. Он мог читать свои целевые переменные и журналы, но ничего не знал о состоянии своей цели.Вероятно, все еще возможны некоторые улучшения, но я не вижу их. Строки 198-205, вероятно, снижают производительность, но до тех пор, пока класс IPAddress не разрешит восстановление адресов из сохраняемых в переменных, это необходимо (поскольку у ботов нет средств проверки адреса, любое хранение неверного адреса приводит к тому, что игра обернуть нулевую цель в ReadOnlyBot, бросая NPE).
Редактировать: Обновления 12/12/15
Изменение некоторых параметров
getTurnNumber()
логики позволило повысить производительность. Увеличение таргетинга на конечную игру с 5% до 10% стоило около 15 баллов, также увеличивая таргетинг на раннюю игру с 5% до 8%. В совокупности этот бот теперь может (почти) выживать даже при столкновении с AmnesiaaBot (достигнув 2-го с результатом 110, где HelperBot достигает 117).Даже с этими настройками он может стать неудачным, поэтому для 10 раундов его диапазон очков составляет примерно 170-185.
источник
new IPAddress
Вызов должен был «посмотреть из адресной книги» , как я сделал вreadData
. Я извлек этот поиск и зафиксировал строку 143.DefaultCodeBot
Пытается делать разумные вещи. (Переопределите этот класс, если вы не хотите реализовывать все функции)
источник
HelperBot
Бот-помощник не делает ничего, кроме как пытается распространить свой собственный флаг ... или, по крайней мере, тот флаг, который он в настоящее время находится в режиме ожидания ...
Если HelperBot предполагает, что любой собственный метод, который перезаписан (кроме
getFlag()
), будет перезаписан чем-то лучшим.источник
Хаос
Он освобождает все флаги от тирании блокирования.
источник
Заменитель
Эта запись заменяет все
selectFunctionToReplace
функции своей собственнойselectFunctionToReplace
функцией.источник
MailBot
Mailbot обрабатывает только сообщения. Не удается вывести свой собственный флаг в мир (средний балл ~ 50, немного выше, чем у nullbot ~ 45), но отправьте ему сообщение, и он перешлет ваш адрес кому-то еще.
Я решил сохранить детали, чтобы переслать весь текст сообщениями на нового бота (контент и флаг), а не только на IP-адрес отправителя, но это потребовало бы интенсивного использования переменных без какого-либо функционального усиления, особенно учитывая, что AmnesiaBot находится в игре.
источник
DumbBot
Тьфу, это кажется грязным. Это, вероятно, единственное, что превосходит AmnesiaBot. На самом деле, это просто специализированный RandomBot: он получает случайного бота в симуляции (через
getAddressBook().clear()
) и случайным образом заменяет либо функцию Block, либо функцию Flag. Вот и все. Выбрав только эти два, его коэффициент распространения флага выше, чем у AmnesiaBot или HelperBot, но лишь незначительно после 3000 раундов:Я немного возился с функцией замены, но в итоге эта версия оказалась наиболее успешной.
источник
Бот-отшельник
Он живет один и разговаривает только с собой. Если меньше людей узнают, кто он, то его будут меньше беспокоить. Если кто-то беспокоит его, он будет атаковать их, пока кто-то другой не побеспокоит его.
источник