Цей виклик закінчився. Щоб побачити остаточні результати змагань, натисніть тут
У цьому виклику кожне подання - один бот. Кожен бот повинен мати функцію Javascript. Боти боротимуться за отримання найвищої загальної вартості золота. Золото можна вирощувати на фермах або заробляти від вбивства інших ботів, і воно використовується для покращення зцілення, нападу, охорони та ведення господарства.
Мета:
У кількох раундах, що містять до 1000 оборотів (закінчується, коли залишився лише один бот), переможцем є бот з найбільшою загальною вартістю (сума всього здобутого золота).
Виходить:
З кожним кроком кожен живий бот (> 0 HP) буде запущений один раз. Він може повернути хід, який може бути одним із наступних:
- Зцілення: відновлює HP
- Attack: видаляє HP з іншого бота
- Щит: захищає від пізніших атак
- Приголомшення: пропускає черговий черговий бот
- Ферма: Заробляє золото вартістю HP
- Оновлення: зробіть певні кроки краще
Усі боти повернуть свій хід до того, як будь-який буде виконаний, тому оглушення, загоєння, атака, щит тощо не впливатимуть на жодних ботів, що рухаються пізніше на цьому кроці. Наприклад, якщо Bot A приголомшує Bot B, а Bot B після Bot A у черговому порядку, Bot B все одно буде рухатися пізніше в тому ж повороті, і оглушення відбудеться на наступному кроці.
Боротьба, землеробство та оновлення:
Кожен бот має максимальну кількість 100 і присвоєний UID між 0 і 99. Цей UID змінюється після кожного раунду, і як боти ведуть облік один за одним.
Зцілення - це один із найпростіших кроків, додаючи кількість HP, що визначається її рівнем (починається з 5 HP). Бот не може вилікувати останні 100 к.с.
Атака бота за допомогою його 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)
- Боти повинні бути достатньо відмінними від будь-яких інших ботів, що їх можна обгрунтовано вважати окремими записами
- Зараз командування заборонено
- Контролер можна знайти тут
- Чат-кімната
Нова налагодження контролера:
Використовуючи файл gold-battle-log.js
, ви можете встановити значення debug
властивості бота в botData
0 (без реєстрації), 1 (переміщення журналу) або 2 (ходи журналу, hp, золото, рівні тощо)
Виклик закінчується о 17:00 UTC у п’ятницю, 9 серпня
[closed]
в кінці кінців, швидше за все, випадкові глядачі можуть пропустити читання мого виклику, оскільки вони будуть вважати, що це низька якість або поза темою.