Окончательные результаты доступны
Введение
После моего предыдущего KOTH с тяжелыми темами ( фэнтезийная война , всемирная пандемия ...) я вернулся с новой беззаботной игрой. На этот раз вы столкнулись с ситуацией, похожей на настольную игру. Куча перевернутых монет находится в центре действительно большого стола, и вы полны решимости получить свою долю в луте!
глоссарий
Монеты : жетоны, которые можно перевернуть или раскрутить.
Безразлично : монеты, размещенные на столе, их ценность направлена вниз. Это состояние монет по умолчанию.
Перевернутый : монеты, размещенные на столе, с указанием их значения вверх.
Местный : Относится к вашей куче монет.
Глобальный : относится к куче монет в центре.
Принцип
В начале игры каждый игрок начинает игру с 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 глобально развернутый]
B
: положите обратно 2 монеты из своей стопки [Эффекты: -2 локальных не расклинили / +2 очка / +2 глобально развернутый]
C
: отложите 3 монеты из стопки [Эффекты: -3 локально развернуты / +3 балла / +3 глобальный развернутый]
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), либо исходные тексты для интерпретируемых языков. Поместите их в корневую папку проекта. Затем создайте новый класс Java в players
пакете (вы можете взять пример с уже существующими ботами). Этот класс должен быть реализован Player
для переопределения метода String getCmd()
. Возвращаемая строка - это команда оболочки для запуска ваших ботов. Например , вы можете сделать бот работу Ruby , с помощью этой команды: return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Наконец, добавьте бота в массив игроков в верхней части Game
класса.
правила
- Боты не должны быть написаны, чтобы побеждать или поддерживать определенных других ботов.
- Запись в файлы разрешена. Пожалуйста, напишите «yoursubmissionname.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 репутаций: Bird In The Hand от Мартина Бюттнера .
Спасибо всем за участие, увидимся в следующем КОТ ~