У майбутньому, коли подорож у часі (скорочено - TT) буде загальним, кидання монет стане серйозним спортом. Щоб підготуватися до майбутнього, ми створюємо конкурс програм, де подорож у часі дійсно відбуватиметься з точки зору публікацій.
Змагання є королем у стилі короля пагорба, що складається з підкидання монет між класами Java.
Правила поєднання монети
- Є два гравці та 100 турів.
- У кожному раунді кидається монета і за результатом один з гравців набирає 1 бал. Кожен гравець має 50% шансів набрати очко.
- Після жеребкування обидва гравці мають шанс контролювати час, потягнувши важелі.
- Якщо ви потягнете синій важіль (зворотний стопор), жоден TT не можливий до раунду, коли важіль був використаний або будь-який попередній раунд. Спроба TT пройти в ці раунди не дасть ефекту.
- Якщо ви тягнете червоний важіль (ревертер), ви намагаєтеся повернути час назад до колишнього раунду. Якщо це вдалося , пам'ять суперника буде повернуто до пам'яті перед обраним раундом, а результати монети монети, починаючи з обраного раунду, також будуть видалені . Єдиним можливим знаком для опонента щодо TT буде кількість невикористаних важелів, які не будуть повернені назад.
- У кожного гравця є 5 синіх та 20 червоних невикористаних важелів на початку матчу. Ці важелі не впливають на ТТ.
- Якщо в кінці 100-го раунду не трапляється жодної TT, гра закінчується, і виграє гравець з більшим балом.
Деталі
- Раунти мають індексацію на основі 1 (форма 1 до 100).
- Перед раундом
x
вам надається кількість доступних синіх та червоних важелів, викидання монети до поворотуx
(включно) та пам’ять про ваш (останній)x-1
раунд. - Потягнення синього важеля в круглі
x
зупиняє будь-які TT, які мають місце призначення в раундіx
або раніше (він блокує TT, якщо він трапляється і в тому ж точному раунді). - Повернення до раунду
x
означає, що наступний раунд буде круглимx
. - Якщо обидва гравці вирішать повернути в кінці раунду, час повертається до попереднього пункту призначення, який не блокується. Гравець, який намагався повернутися до цього часу, збереже пам'ять.
Технічні деталі
- Вам слід написати клас Java, що реалізує наданий інтерфейс Bot.
- Додайте свого бота до проекту.
- Додайте
Bot
до файлу екземпляр свого BotController.java
. - Ваш клас не повинен зберігати інформацію між дзвінками . (У більшості випадків наявність лише
final
змінних поза функціями задовольняє цю вимогу.) - Ви можете надати інформацію контролеру в
memory
полі повернутогоAction
об'єкта. Це буде повернуто вам у наступній черзі, якщо жодного TT не відбулося. Якщо TT трапиться, ви отримаєте відповідну попередню пам'ять. - Ви можете використовувати
totalScore()
методGame
класу, щоб отримати оцінку рядка історії.
Протокол
На кожному кроці ваш
takeTurn(...)
метод викликається з 5 аргументів:- кількість невикористаних синіх важелів
- кількість невикористаних червоних важелів
- історія метання монети - рядок, що складається з 1-х та 0-х, що позначають ваші виграші та програші в попередніх раундах. Перший символ відповідає першому підкиданню монети. (У першому раунді буде довжина рядка
1
.) - рядок, ваша збережена пам'ять з попереднього раунду
- індекс цього раунду на основі 1
На кожному кроці ваш метод повертає
Action
об'єкт, що міститьціле число в
move
полі, що описує вашу дію:0
за жодних дій-1
витягнути синій важіль і перекрити ТТ, який проходить цей раунд- додатне ціле число
x
, не більше поточного раунду, витягнути червоний важіль і спробувати повернути назад до круговогоx
- Недійсні цілі числа трактуються як
0
.
рядок, що містить вашу пам'ять з цього раунду, яку ви хочете зберегти. Зауважте, що зберігання пам'яті не є вирішальною частиною завдання . Ви можете робити хороші записи, не зберігаючи корисних даних у рядку. На першому раунді рядок буде порожнім рядком.
Ваш метод повинен у середньому займати не більше 10 мс за раунд.
- Регулярне недотримання строку призводить до дискваліфікації.
Оцінка балів
- Якщо виграти матч, ви отримуєте 2 очки, а нічия отримує 1 бал для обох гравців. Втрата не заробляє балів.
- Оцінка бота - це загальна кількість набраних ним балів.
- Кількість зіграних матчів між кожною парою учасників конкурсу залежатиме від кількості заявок та їх швидкості.
Два простих приклади ботів розміщені як відповіді.
Контролер і перша пара Ботів доступні тут .
Результати тестів з ботами, поданими до 3 листопада:
Загальна кількість балів:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(Контролер базується на контролері виклику Cat Catcher . Дякую за те, що @flawr надає його як базу для цього.)
Бонус: приємний 6-хвилинний фільм за аналогічною концепцією.
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
Що "проходить через раунд"?