Эта проблема закончилась. Чтобы увидеть итоговые оценки участников, нажмите здесь
В этом задании каждая заявка представляет собой одного бота. Каждый бот должен быть функцией Javascript. Боты будут сражаться, чтобы получить наивысшую общую стоимость золота. Золото можно добывать на ферме или зарабатывать на убийстве других ботов, и оно используется для улучшения лечения, атаки, защиты и ведения сельского хозяйства.
Задача:
В течение нескольких раундов, содержащих до 1000 ходов (заканчивается, когда остается только один бот), бот с наибольшей общей стоимостью (сумма всего полученного золота) становится победителем.
Повороты:
В каждом ходу каждый живой бот (> 0 HP) запускается один раз. Он может вернуть ход, который может быть одним из следующих:
- Лечение: восстанавливает HP
- Атака: удаляет HP из другого бота
- Щит: защищает от последующих атак
- Оглушение: пропускает следующий ход другого бота
- Ферма: зарабатывает золото за счет HP
- Обновление: сделать определенные шаги лучше
Все боты вернут свой ход до того, как они будут выполнены, поэтому оглушение, лечение, атака, щит и т. Д. Не повлияют на ботов, движущихся позже в этом ходу. Например, если бот A оглушает бот B, а бот B следует за ботом A в порядке хода, бот B все равно будет двигаться позже в том же ходу, и оглушение произойдет в следующем ходу.
Бой, фермерство и модернизация:
Каждый бот имеет максимальный HP 100 и назначенный UID от 0 до 99. Этот UID меняется после каждого раунда, и как боты отслеживают друг друга.
Лечение - один из самых простых ходов, добавляющий количество HP, определяемое его уровнем (начинается с 5 HP). Бот не может лечить более 100 HP.
Атака бота по его UID - это еще один возможный ход с базовым уроном 5 HP на уровне 0. Боты также могут быть оглушены, пропуская свой следующий ход, который также использует UID.
Боты имеют дополнительный щит HP, который не имеет ограничений. Этот щит HP поглощает урон от прямых атак других ботов и добавляется защитой. На уровне 0 экранирование добавляет 5 щитовых HP.
Фермерство заработает 5 золотых на уровне 0, за 2 HP. Эти 2 HP не могут быть защищены. Единственное использование для золота (кроме выигрыша) - улучшать ходы. Исцеление, атака и защита имеют базовую стоимость 5 HP, а фарм начинается с 5 золота. Каждый из этих ходов имеет индивидуальные уровни, которые начинаются с 0. Эти формулы будут определять значение в HP или золоте хода, где L - уровень:
- Лечение:
L + 5
- Атакующий:
1.25L + 5
- Экранирование:
1.5L + 5
- Сельское хозяйство:
2L + 5
Стоимость улучшения любого хода одинакова для определенного уровня и определяется тем 2.5L² + 2.5L + 10
, где L - текущий уровень. Бот может использовать функцию cost(currentLevel)
в качестве ярлыка, чтобы определить это.
Боты начинают с 25 золотых, что позволяет им быстро улучшить либо два хода до уровня 1, либо один ход до уровня 2. Это начальное золото не засчитывается в общую стоимость ботов. Убив бота, вы получаете половину его общей стоимости в золоте, округленную в большую сторону, и если два бота убивают другого в одном ходу, они оба получают вознаграждение.
Ввод, вывод:
Для связи с контроллером возвращаемое значение функции используется для отправки информации о перемещении. Один из них должен быть возвращен:
- Лечение:
heal()
- Атака:
attack(uid)
- Щит:
shield()
- Оглушение:
stun(uid)
- Ферма:
farm()
- Обновить:
upgrade("heal" / "attack" / "shield" / "farm")
Чтобы пропустить поворот (ничего не делать), ничего не возвращать или возвращать ложное значение.
Чтобы получить номер текущего хода (начинается с 1), используйте turn()
.
Аргументы вашей функции будут включать информацию о вашем боте, UID других ботов и хранилище между поворотами. Первый аргумент является объектом со следующими свойствами: uid
, hp
, gold
, и shield
. Это копии текущей информации вашего бота. Существует также несомый объект levels
, с номерами уровня heal
, attack
, shield
и farm
.
Второй аргумент перетасованного массив всех других , чем ваша живых ботов, отформатированные как объект , содержащий свойства uid
, hp
(плюс щит), worth
и attack
(уровень атаки). Третий аргумент - пустой объект, который можно использовать для хранения между поворотами.
Пример ботов:
Этот бот будет фармить до тех пор, пока не сможет повысить свою атаку до уровня 5, а затем атаковать случайного бота каждый ход, пока он не умрет (или не победит). Не очень эффективно из-за отсутствия лечения / защиты.
function freeTestBotA(me, others, storage) {
if (me.levels.attack < 5) {
if (me.gold < cost(me.levels.attack))
return farm();
return upgrade("attack");
}
return attack(others[0].uid);
}
Этот бот имеет два режима: атакующий и оборонительный. Он будет либо оглушать случайного бота, либо лечить в режиме защиты, а также атаковать или защищать в режиме атаки. Он будет пытаться обновить свои атаки, когда это возможно.
function freeTestBotB(me, others, storage) {
if (me.gold >= cost(me.levels.attack))
return upgrade("attack");
if (me.hp < 50)
if (Math.random() < 0.5)
return stun(others[0].uid);
else
return heal();
else
if (Math.random() < 0.5)
return attack(others[0].uid);
else
return shield();
}
Правила:
- Стандартные лазейки запрещены
- Боты не могут читать, изменять или добавлять какие-либо переменные вне своей области, не могут пытаться обманывать и не могут вызывать какие-либо определенные контроллером или функции DOM
- Возвращаемое значение должно быть ложным, или один из вышеуказанных выходов функции
- Боты не должны быть предназначены для конкретного бота, но могут быть разработаны, чтобы использовать преимущества общих стратегий
- Боты не могут атаковать самих себя (обнаружено из-за комментария @Ness)
- Боты должны достаточно отличаться от любых других ботов, чтобы их можно было разумно считать отдельными записями
- Объединение в команду теперь не разрешено
- Контроллер можно найти здесь
- Chatroom
Отладка нового контроллера:
Используя файл gold-battle-log.js
, вы можете установить значение debug
свойства бота в botData
0 (без регистрации), 1 (перемещение журналов) или 2 (перемещение журналов, hp, золото, уровни и т. Д.)
Вызов заканчивается в 17:00 UTC в пятницу, 9 августа.
источник
[closed]
в конце, вероятно, заставит случайных зрителей пропустить чтение моего вызова, так как они предполагают, что это низкое качество или не по теме.Ответы:
незавершаемых
раздвоенный от неуязвимого .
Учитывая экспоненциальную стоимость улучшений, мы можем также улучшить фермерство, если мы не сможем улучшить лечение, что позволит боту более эффективно собирать золото.
источник
if
утверждение<=
- в настоящее время он никогда не излечится полностью.ThanosBot
Слишком много ботов, недостаточно золота, чтобы ходить. Этот бот предлагает решение.
Геноцид, да, но случайный, беспристрастный, справедливый по отношению к богатым и бедным.
Они называли его сумасшедшим.
ThanosBot хочет лучшего для сообщества ботов и готов идти до конца. В начале он улучшит свою атаку, фарм и лечение, чтобы более эффективно собирать ресурсы и побеждать в битвах. Постепенно он начнет нападать на людей случайным образом, собирая ресурсы для предстоящих сражений. Он будет продолжать улучшать свою армию, свое оружие и себя.
Как только 50% населения будет уничтожено, рожденные боты будут знать только полные животы и ясное небо, он уйдет на фермерскую жизнь и будет наблюдать за восходом солнца в благодарной вселенной. Он станет полностью пацифистом, только исцеляя себя овощными супами и занимаясь земледелием.
источник
Убить Стилера
Теперь не только ворует, но и ворует!
Этот бот не делает ничего, кроме фермы, и когда он замечает возможность, присоединяется к нанесению последнего удара по умирающему врагу и каким-то образом удается быть очень хорошим.
источник
Эквалайзер
Этот бот стремится восстановить мир в сообществе ботов. Он неустанно целится в ботов с самой высокой атакой, сдаваясь, только если лечение бота лучше, чем его собственная атака. Как только не останутся боты с лечением хуже, чем его атака, он уйдет в мирное сельское хозяйство.
источник
оптимист
Предполагается, что он сможет тратить 80% своего времени на мирное сельское хозяйство, поэтому он начинает с максимального развития сельского хозяйства и только после этого начинает обращать внимание на свои боевые навыки. Конечно, ничего не пойдет не так!
источник
Помощь в убийстве
Зачем обновлять значение атаки, если вы можете наносить урон и все еще получать полный кредит?
Еще раз вернемся к спекуляции с Kill Stealer. Мне удалось упростить несколько блоков кода, где операторы всегда были верны и возились с некоторыми числами, что приводило к огромным выигрышам по сравнению с оригиналом.
Я должен передать это @dzaima, чтобы понять, что ошеломляющий богатый противник, который, вероятно, будет вовлечен в помощь на терне до того, как произойдет убийство, довольно умен. Один из (очень) нескольких раз
Stun()
имеет положительный результат. Я снова смог улучшить эту идею: зная, что Kill Stealer будет использовать аналогичную логику, Kill Assist ищет «вторую лучшую» цель (с некоторым усмотрением) и вместо этого оглушает ее.Незначительное обновление, чтобы предотвратить ошеломление бот-о-умирать и предотвратить ошеломляющий бот-скорее всего, чтобы сделать убийство.
Пример результатов (усеченные топ-5 после 1000 игр)
источник
runGame(1) results: [...] captFarmer: 13768
Неуязвимый бот (v3)
источник
PatientStrategistBot
Я попытался написать бота, который начинает создавать и защищать по мере необходимости, а затем переключается на убийство других ценных ботов позже в игре.
В настоящее время это, кажется, не работает должным образом, так как либо убит бандой роботов-убийц в начале игры, либо застрял где-то в его наступательном режиме.
Все еще очень доволен тем, что это мой первый JS-код, так что ... (я украл фрагменты кода отсюда и там, потому что это было быстрее, чем поиск всего основного синтаксиса JS)
источник
Швейцария
Как следует из названия, этот бот является
нейтральным, восновном нейтральным (теперь он помогает убивать ботов, которые умрут), и только фермы и лечит, медленно наращивая свое золото (как Швейцария)источник
Бот, который обрабатывает, атакует, защищает и даже лечит, но никогда не оглушает
(Краткое название TBTFASAEHBNS , не путать с TBTPTGCBCBA )
Этот бот в основном:
Редактировать 1: Исправлена проблема и улучшены некоторые мелочи в боте, основанные на тестах с большим количеством игр.
Редактировать 2: Уменьшены обновления щита.
источник
SniperBot
Этот бот будет эффективен, только если кто-то начнет добавлять ботов, которые на самом деле регулярно атакуют. SmartFarmer - мое текущее оптимизированное решение
стервятники не нуждаются в нападении
источник
int
) в строке 2. ReferenceError: здоровье не определено.me.hp
?if(me.hp <30 && ...)
могли бы быть упрощены до первого пункта из-за необходимости абсурдного уровня исцеления, чтобы это имело значение (65 уровень)BullyDozerBot
Mashup BullyBot и некоторые другие биты. У Оптимиста был короткий и приятный оппортунистический кусок атаки, который я обнаружил (хотя другие боты делают аналогичные вычисления).
Вместо того, чтобы запугивать цель, оглушая их, она убивает их за их сладкую, сладкую добычу. Он также предназначается для самых слабых в стаде для запугивания, но он сдастся и просто пойдет на ферму, если HP самой слабой цели слишком высок.
источник
FizzBuzz
В основном оскорбительный бот. Чрезвычайно расстроен фактом, что он не может по-настоящему FizzBuzz, поэтому он просто гудит вместо этого. Когда это не Fizzing или Buzzing, он теряет силу у другого бота на 30 ходов, сдается и выбирает другого бота, если он не прогрессирует.
Выполняет чрезвычайно непоследовательно.Не берите в голову, обновленный контроллер, теперь, кажется, всегда в середине пакета.источник
bullyBot
Попробуйте онлайн!
Может не победить, но, безусловно, постарается сделать все возможное, чтобы убедиться, что его цель тоже не победит. BullyBot также работает на первом ходу, так что, если нет внешнего влияния, он побьет свою цель 5-0 или свяжет их 5-5.
источник
JustFarm
Я думал, что начну с простого.
источник
ScavengerBot (V2)
Понял, что это не было большой мусорщик раньше. Новая стратегия - ждать, пока он не сможет убить другого бота. Если никто не может быть убит, он сидит и строит щит.
источник
me.levels.attacl
?капризный
Стратегия Moody's по умолчанию состоит в том, чтобы на некоторое время улучшить фермерство и лечение, а затем убить других ботов в порядке убывания их стоимости. Однако, если он подвергнется нападению, он испугается и немного сосредоточится на лечении. Если он атакует и «терпит неудачу», потому что жертва лечила или защищала более эффективно, чем атака, она разозлится и уйдет, чтобы улучшить свои атакующие способности.
источник
разбойник
Первая попытка подкрепления учебного бота. На данный момент чисто оборонительный, чтобы сузить пространство поиска. Что-то вроде более умного побочного продукта FizzBuzz - он повторяет определенную серию из пяти действий снова и снова; пять действий - это то, что выбирает RL.
Но пока это в основном основано на перечислении - я просто сгенерировал все 3 ^ 5 = 243 перестановок серии из пяти защитных действий, которые повторялись снова и снова, и сохранял их средние оценки (разделенные на 200, чтобы получить средний выигрыш за пять ходов) более 100 итераций в
storage.prior
массиве. Затем, во время игры, он реализует эпсилон-жадный подход к обновлению этих списков очков, чтобы он был более ориентирован на будущее. (Также потому, что использование epsilon = 0.3 работало лучше, чем epsilon = 0.1, поэтому я просто сохранил его.)Это нормально, последовательно размещая между scavengerBot и Optimist. В настоящее время я провожу еще несколько занятий по реальным играм и ищу лучшие способы сформулировать стратегию, чтобы посмотреть, смогу ли я ее улучшить.
источник
Оппортунист
Этот заимствует немного из нескольких других (особенно ScavengerBot (V2) и Unkillable), так как у них были те же идеи, которые я имел в виду, но я обычно люблю стили округлости и мастерства на все руки больше, чем фокусируюсь только на одна или две вещи. Это, вероятно, будет означать, что я не выиграю, но это должно быть где-то посередине (что случается со мной в большинстве случаев во многих случаях).
Так он крадет сочные убийства; лечит, если необходимо; модернизирует ферму, атакует и лечит в этом порядке; и фермы в противном случае.
источник
others
ScaredBot
highest attack * (25% of bots)
, или он приближается к нижнему краюHP + shield
, то он экранирует< 50
, оно лечит.Идея состоит в том, чтобы остаться в живых как можно дольше и в противном случае попытаться получить золото безопасным и дешевым способом, чтобы иметь возможность апгрейда.
Приоритеты обновления, вероятно, должны быть изменены, а также условия при определении того, стоит ли защищать.
источник
SmartFarmer
Фермы, апгрейды, лечит, если здоровье слабое. Сельское хозяйство казалось подавленным, пока не прибыли действительно оскорбительные боты. Теперь мой бот погибает :-(
источник
Mort
Каждый ход сравнивает амортизированную прибыль от убийства каждого бота с доходом от фермерства и лечения и выбирает лучший вариант. На самом деле он должен использовать состояние, чтобы выяснить, сколько времени потребуется, чтобы убить бота, но сейчас он просто предполагает, что каждый бот лечит или защищает в среднем 5 пунктов за ход, за вычетом урона, наносимого другими ботами.
источник
Дружелюбный бот
others[0].hp
этоhp + shield
вместоhp
...источник
Бухгалтер
Этот практичный бот рассчитывает наиболее экономически выгодный ход, но ему нравится держать свой профиль атаки на низком уровне, чтобы избежать проблем со всеми ботами бдительности. Он не пытается помочь беззащитным или охотиться на них. Скорее он делает то, что ему помогает больше всего.
источник
reallyCommittedTurtle
Вот вещь Там стало действительно опасно. Сельское хозяйство вообще увеличивает вашу ценность, делая вас целью. Так что на самом деле не безопасно работать на ферме, пока вы не построите огромный щит и все насилие не утихнет. Тогда вы можете высунуть голову из раковины и начать заниматься сельским хозяйством. Или помощь в убийстве. Все, что платит лучше.
источник
блюститель
У меня может быть более одного представления, верно?
Вилка CampBot. Не защищает, вместо этого сосредотачиваясь на нападении. Показывает предпочтение атаковать игроков с более высокими характеристиками атаки, а не наносить удары случайным образом, как CampBot. Ориентирован на улучшение своего сельского хозяйства, а не лечения.
источник
let victim=potentialVictims[Math.floor(Math.random()*potentialVictims.length)]
Rando
Этот глупый парень выберет действия, основанные на равномерной случайности с некоторыми уклонами. Если случайно выбранное действие не сработает, оно перейдет к следующему выбору.
Поэтому в среднем он должен атаковать почти 2/9 времени и фармить почти 3/9 времени. Остальные имеют шанс 1/9, если он может улучшиться, или если лечение или защита того стоят и т. Д.
Он вряд ли будет хорошо выступать, но, по крайней мере, есть небольшой шанс, что он будет верховным. И в этом вся цель Рэндо. Ему просто нужно верить в себя! Все варианты выложены перед ним. Ему нужно только выбрать то, что нужно для той или иной ситуации.
(Я знаю, что по умолчанию нет необходимости, но я думаю, что это хорошая практика кодирования для надежного кода.)
источник
Убить бот
Простой бот, Kill Bot просто хочет убить своих врагов. Поскольку защита намного эффективнее лечения (особенно при выравнивании), Kill Bot просто пытается всегда быть непривлекательной целью, экранируя себя всякий раз, когда на него нападают. Kill Bot отлично справляется с ситуацией среди слабых, пацифистских ботов (вы можете почувствовать его презрение к ним).
источник
o.attack
это уровень атаки, а не ее уронFarmHeal Bot
Создана из анонимного бота JustFarm
источник
нерушимый
Модификация бота Draco18 с использованием щитов (более эффективна против других ботов)
источник