Остаточні результати доступні
Вступ
Після моєї попередньої КОТИ з важкими темами ( фентезійна війна , пандемія у всьому світі ...) я повернувся до нової легкої гри. Цього разу ви стикаєтесь із ситуацією "настільна гра". Купа перевернутих монет розміщена в центрі дійсно великого столу, і ви вирішили отримати свою частку награбованого!
Глосарій
Монети : жетони, які можна перевернути або розвернути.
Розвернутий : монети розміщені на столі, їх значення спрямоване вниз. Це стан монет за замовчуванням.
Перевернутий : монети розміщені на столі, їх значення вказує вгору.
Місцевий : посилається на вашу купу монет.
Глобальний : посилається на купу монет у центрі.
Принцип
На початку гри кожен гравець починає з 0 очок та 0 монет (перевернутий або розвернутий). Гра покрокова. Під час своєї черги гравці можуть здійснити до 3 дій, взаємодіючи або з купою монет у центрі столу, власною купою монет, або з іншими гравцями.
Порядок гри визначається випадковим чином на початку гри. Порядок гравців у списку аргументів представляє поворот повороту, і він переходить зліва направо в цьому списку. "Далі" та "Попередній" посилаються відповідно на "праворуч у цьому списку" та "зліва в цьому списку" з циклом, якщо ви останній із будь-якої сторони.
Гра триває 50 раундів, або доки в центрі повороту гравця не буде 0 монет (це означає, що ви закінчите свої 3 дії, навіть якщо купу буде порожньою після вашої першої дії, і ви зможете покласти назад монети, щоб гра триває). Початкова кількість глобальних монет визначається випадковим чином за цією формулою:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
За кожну дію ви отримаєте очки (або змусите втратити частину), і наприкінці гри кожна ваша монета буде додана до ваших очок ( -1 за розвернутий, +2 за перевернутий ). Виграє гравець з найвищим балом.
Контролер надає вам введення через аргументи команд, і ваша програма повинна виводити через stdout.
Синтаксис
Вхідні дані
Щоразу, коли ваша програма викликається, вона отримуватиме аргументи у такому форматі:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
Круги 1-індексовані.
Приклад введення
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Тут ви бачите, що це 6-й раунд, і ви граєте 2. У центральній купі 52 монети. У вас 12 очок, 1 перевернута монета та 0 незавернута монета. Бали можуть бути негативними.
Вихідні дані
Ви повинні вивести три символи (ні пробілу, ні роздільника), кожен з яких відповідає одній дії, яку ви зробите в цьому рубежі. Порядок символів визначає порядок дій. Ви можете виводити одні й ті самі дії кілька разів. Якщо монети не буде достатньо для завершення вашої дії, вона використовуватиме максимум наявних монет і нараховує бали лише за використані монети.
N: Нічого не робіть
1: візьміть 1 монету з центральної купи [Ефекти: +1 місцевий розгорнутий / -1 бал / -1 глобальний розгорнутий]
2 : Візьміть 2 монети з центральної палі [Ефекти: +2 місцеві розгорнуті / -2 бали / -2 глобальний розгорнутий]
3 : Візьміть 3 монети з центральної купи [Ефекти: +3 місцеві розгорнуті / -3 бали / -3 глобальні розгорнуті]
A : Покладіть назад 1 монету зі своєї сторони [Ефекти: -1 місцева розгорнута / +1 точка / +1 глобальний розгорнутий]
B : Покладіть назад 2 монети зі своєї сторони [Ефекти: -2 місцеві розгорнуті / +2 бали / +2 глобальні розгорнуті]
C : Покладіть назад 3 монети зі своєї сторони [Ефекти: -3 місцеві розгорнуті / +3 бали / +3 global unlipped]
X : Видаліть 1 монету зі своєї купи[Ефекти: -1 локальний розгорнутий / 0 балів]
Y : Видаліть 2 монети зі своєї сторони [Ефекти: -2 локальних розгорнутих / 0 балів]
Z : Видаліть 3 монети зі своєї сторони [Ефекти: -3 місцевих незавернутих / 0 балів]
R : Оберніть монети до попереднього гравця [Ефекти: -1 бал за отриманий неперевершений, +2 бали за отриманий перевернутий / стосується всіх гравців]
T : Повернути монети до наступного гравця [Ефекти: -1 бал за отриманий неперевернутий, +2 бали за отриманий перевернутий / застосовується до всі гравці]
F : Переверніть 1 монету [Ефекти: -1 локальний розвернутий / +1 місцевий перевернутий / +2 бали]
U : Відкрийте 1 монету [Ефекти: +1 локальний розвернутий / -1 місцевий перевернутий / -2 бали]
Приклад виведення
2FF : Бере дві монети і гортає дві монети, забиваючи -2 + 2 + 2 = 2 points
Якщо ваш вихід невірний, контролер припустить NNN.
Контролер
Ви можете знайти контролер на GitHub . Він також містить два зразки, написані на Java. Щоб запустити його, перегляньте проект та відкрийте його у вашій Java IDE. Точка входу в mainметод класу Game. Потрібна Java 8.
Щоб додати ботів, спочатку вам потрібна або компільована версія для Java (файли .class), або джерела для інтерпретованих мов. Розмістіть їх у кореневій папці проекту. Потім створіть новий playersпакет Java в пакеті (ви можете взяти приклад для вже наявних ботів). Цей клас повинен реалізовувати Playerдля зміни способу String getCmd(). Рядок, що повернувся - це команда оболонки для запуску ваших ботів. Наприклад , ви можете зробити бот роботу Ruby , з допомогою цієї команди: return "C:\Ruby\bin\ruby.exe MyBot.rb";. Нарешті, додайте бота в масив гравців у верхній частині Gameкласу.
Правила
- Ботів не слід писати, щоб бити або підтримувати конкретних інших ботів.
- Запис у файли дозволяється. Будь ласка, напишіть на "tvojeubmissionname.txt", папка буде видалена перед початком гри. Інші зовнішні ресурси заборонені.
- На ваше подання є 1 секунда для відповіді.
- Укажіть команди для складання та запуску подань.
Мови, що підтримуються
Я спробую підтримати кожну мову, але вона повинна бути доступна в Інтернеті безкоштовно. Будь ласка, надайте інструкції щодо встановлення, якщо ви не використовуєте "основну" мову.
На даний момент я можу запускати: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Кінцеві результати
Це результати 100 ігор (бали додаються):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Індивідуальні результати ігор доступні тут: http://pasted.co/63f1e924 (зі стартовими монетами та кількістю раундів на гру).
Переможець присуджує щедру з 50 репутацій: « Птах у руці » Мартіна Бюттнера .
Дякую всім за участь, до наступної КОТИ ~