Обратите внимание: это испытание царя горы завершено. Это означает, что зеленая галочка, которая была присуждена C5H8NNaO4 за их запись Наблюдатель, не будет перемещена в новый ответ.
Вы по-прежнему можете отправлять новые записи, но могут быть задержки в новых турнирах, поскольку я больше не проверяю новые записи.
Введение
В этом испытании вы играете в аркадную игру под названием The Ultimate Samurai Showdown Ultimate Edition, специальная версия 2.0 X Alpha Omega Turbo (или просто Ultimate Samurai Showdown для краткости). Ваши оппоненты? Никто иной, как другие участники Programming Puzzles & Code Golf!
Как и следовало ожидать от аркадной игры PPCG, вы не играете в Ultimate Samurai Showdown напрямую, а скорее пишете программу, которая будет играть в эту игру для вас. Эта программа будет бороться с программами, представленными другими пользователями в поединках один на один. Самая опытная программа будет увенчана Ultimate Samurai of PPCG и получит зеленую галочку легенды.
Описание игры
В этом разделе описана механика игры.
Условие Победы
Матч состоит из двух самураев , которые сталкиваются друг против друга. Каждый самурай начинает каждый матч с 20 хитами и 1 честью . Самурай побеждает, если его противник мертв, а он все еще жив. Есть два способа, которыми самурай может умереть:
- Если хиты самурая будут снижены до 0, он умрет.
- Если самурай принесет свою честь ниже 0, он будет сбит богами за нечестную игру в поединке.
Уничтожение богов имеет более высокий приоритет по сравнению с уменьшением очков жизни до 0, поэтому в ситуации, когда один самурай имеет 0 очков здоровья, а другой - -1 честь, самурай с 0 очками здоровья выиграет. В ситуации, когда оба самурая имеют честь -1, они оба поражены богами, и игра становится ничьей.
Матч состоит из 500 ходов . Если все 500 ходов пройдены и матч не решен (ни один самурай не умер), богам становится скучно, и они сбивают обоих самураев, что приводит к ничьей.
действия
На каждом ходу самурай должен выполнять ровно одно из следующих действий:
W
Самурай должен ждать и не предпринимать никаких действий. Это заставляет его выглядеть круто, но не помогает ему победить своего противника. Это также действие по умолчанию.
B
Самурай должен почтительно поклониться своему противнику. Это радует богов и, таким образом, самурай получит 1 Честь. Честь жизненно важна для успеха вашего самурая, потому что Честь, по сути, является «ресурсом» для этой игры - все движется отдельно B
и W
может уменьшить Честь. Кроме того, если самурай получает 7 или более Чести, ему предоставляется право использовать Меч Богов . Последствия этого описаны ниже.
Однако, кланяясь своему противнику, вы остаетесь открытым, если ваш противник решает ударить вас своим мечом, поэтому будьте осторожны, когда решите поклониться.
G
Самурай должен войти в оборонительную позицию и защищаться от любых ударов мечом. Этот ход успешно заблокирует все удары мечом, даже те, что были сделаны с помощью Меча Богов .
Тем не менее, боги недовольны чрезмерно оборонительными самураями, поэтому этот ход потребует 1 Чести, если действия самурая в непосредственно предшествующем ходу также охраняли. Иначе Хонор не потребляет.
I
Самурай должен попытаться ударить своего противника быстрым извлечением своего меча из ножен. Если у самурая 7 очков чести или больше, он использует Меч Богов вместо своего обычного меча. Этот ход потребляет 1 Чести.
Быстрая ничья - это быстрый удар, который побьет медленные атаки сверху, однако он проиграет против парирования. Если удар успешен, он нанесет 1 урон или 2 урона Мечом Богов .
P
Самурай должен попытаться парировать любую входящую атаку, а затем начать собственную атаку. Если у самурая 7 очков чести или больше, он использует Меч Богов вместо своего обычного меча. Этот ход потребляет 1 Чести.
Парирование - хороший маневр против быстрых ударов, но оно будет подавлено медленными атаками сверху. Если удар успешен, он нанесет 1 урон или 2 урона Мечом Богов .
O
Самурай должен попытаться нанести удар по противнику с более медленной атакой сверху. Если у самурая 7 Чести или выше, он использует Меч Богов вместо своего обычного меча. Этот ход потребляет 1 честь.
Удар сверху может подавить парирование, но он проиграет от быстрых ударов. Если удар успешен, он нанесет 1 урон или 2 урона Мечом Богов .
Меч богов
Самурай с Честностью 7 или более получает способность использовать Меч Богов . Если его Честь будет ниже 7, способность использовать Меч богов будет отозвана у него. Меч Богов наносит 2 повреждения вместо 1.
Меч Богов не позволяет удар победить мечом удар , что он не будет обычно поражение. Например, парирование Меча Богов все равно проиграет при обычном верхнем ударе, а быстрое ничье Меча Богов не одолеет обычное быстрое ничье. На самом деле, так называемый Меч Богов на самом деле не настолько силен - возможно, это космическая шутка, которую играют боги ...
Таблица взаимодействия
Приведенный ниже фрагмент стека содержит таблицу, в которой явно перечислены все возможные результаты различных комбинаций действий, которые могут выполнять два самурая. Чтобы просмотреть его, нажмите «Показать фрагмент кода», затем нажмите «Запустить фрагмент кода».
Программа связи
Чтобы облегчить проведение турнира, была написана программа контроллера, которая сыграет роль «богов» - она хранит записи о чести и здоровье и, соответственно, поражает самураев. В этом разделе описывается, как ваша программа будет взаимодействовать с программой контроллера.
Описание входа
Программа контроллера будет вызывать вашу программу из командной строки следующим образом:
<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>
где:
<command>
это команда, необходимая для запуска вашей программы. Например, если ваша программа находится в файлеsuper_sentai.pl
, команда, вероятноperl super_sentai.pl
.<history>
это история ходов, которые вы сделали. Например, этоWWBP
будет означать , что вы дважды подождали, один раз поклонились и один раз парировали.<enemy_history>
история ходов вашего врага. Например,BBBI
это означает , что ваш враг трижды поклонился и выполнил одну быструю ничью.<your_health>
ваше текущее здоровье.<enemy_health>
это текущее здоровье врага.<your_honour>
ваша нынешняя честь<enemy_honour>
это настоящая честь врага.
Для первого хода, history
и enemy_history
будет пустым, поэтому ваша программа будет вызываться только с последними четырьмя аргументами, подобными этим:
<command> <your_health> <enemy_health> <your_honour> <enemy_honour>
Пожалуйста, будьте готовы к этому!
Проницательные читатели могут заметить, что четыре аргумента, обеспечивающие честь и здоровье обоих самураев, в некоторой степени излишни; Поскольку это идеальная информационная игра, честь и здоровье самурая можно определить, используя только историю.
Эти значения предоставлены для удобства, чтобы вам не приходилось анализировать аргументы истории. Это должно оказаться полезным для реализации простых стратегий, например, не атаковать, когда ваша Честь равна 0.
Описание выхода
Чтобы выбрать действие, ваша программа должна вывести один из W
, B
, G
, I
, P
, или O
на стандартный вывод, в зависимости от того, какие действия вы хотите сделать. Если ваша программа ничего не выводит в течение 1000 мс, она будет прервана, и ваша программа будет обрабатываться так, как если бы она выводила W
.
Если ваша программа выводит более одной буквы, будет рассматриваться только первая буква, поэтому вывод Parry
будет таким же, как и вывод P
.
Если вывод первой буквы вашей программы не соответствует ни одному из перечисленных выше параметров, по умолчанию он будет иметь значение W
.
Формат представления
Отправить программу в качестве ответа на этот пост. Вы можете подать несколько программ. Если вы отправляете несколько простых программ, я рекомендую отправлять их как один ответ; если вы отправляете несколько сложных программ, я рекомендую отправлять их как отдельные ответы. Как только я успешно добавлю вашу программу / программы в турнир, я сделаю коммит в репозиторий git с вашей записью (ссылка ниже).
Если у меня возникнут проблемы, из-за которых ваша программа не будет добавлена в турнир, я оставлю комментарий к вашей записи с указанием проблемы.
Пожалуйста, включите следующее в ваше представление:
- Удобное для чтения имя вашей программы для использования в табло. Здесь разрешены пробелы; Запятые и символы Юникода не являются.
- Язык, на котором написана ваша программа. Пожалуйста, не пишите на странных, труднодоступных языках, таких как TinyMUSH.
- Краткий обзор вашей программы. Это может быть описание того, как работает программа, или просто небольшой текст о вашей программе (если вы хотите быть полностью скрытным), или, возможно, и то, и другое.
- Команда / ы, необходимые для запуска вашей программы. Например, если вы пишете свою заявку на Java
example.java
, вы должны предоставить инструкции по компиляции, аjavac example.java
затем выполнить инструкцииjava example
. - Исходный код программы.
Чтобы помочь в отправке, я предоставляю шаблон отправки, который можно найти здесь . Шаблон заставляет представления выглядеть лучше. Я настоятельно рекомендую использовать его.
Я также приведу два примера записей. Несмотря на то, что примеры заявок будут участвовать в круговом турнире, их основная цель - уточнить форматы подачи и ввода / вывода для турнира, а не быть серьезными претендентами на звание Ultimate Samurai.
Структура турнира
В этом разделе описывается, как будет проходить турнир между участниками.
Программа управления
Управляющая программа написана на Python 2 и может быть найдена в репозитории Ultimate Samurai Showdown Github . Если вы хотите запустить его самостоятельно, инструкции по его запуску включены в файл README.md по ссылке. Однако только турниры, проводимые на моем компьютере, будут официальными, чтобы избежать различий в оборудовании, влияющих на результаты турниров.
Управляющая программа будет работать на ноутбуке под управлением Arch Linux. Он имеет процессор Intel Core i7 и 8 ГБ оперативной памяти. Я постараюсь, чтобы все записи работали на моем компьютере, но я был бы очень признателен, если бы вы избегали языков, к которым нет свободного доступа (как без денежных затрат).
Система баллов
Система начисления очков - круговой. Каждая программа сыграет восемь матчей против любой другой программы. Победа дает программе 1 очко, проигрыш без очков и ничью 0,5 очка. Программа с наибольшим количеством очков побеждает в игре. Если будет ничья, я буду дуэли двух лучших программ друг с другом, чтобы определить победителя.
Количество раз, когда каждая программа будет воспроизводить другую, может быть уменьшено с 8, если количество участников слишком велико. Я добавлю заметку здесь, если это произойдет.
Я буду запускать циклический перебор много раз, так как новые публикации публикуются, но это будет только самый последний циклический перебор.
Дисквалификация
Ваша программа может быть дисквалифицирована из турнира. Дисквалификация может произойти, если:
- Ваша программа не компилируется и не запускается;
- Ваша программа является стратегическим дубликатом другой программы (то есть реализует ту же стратегию, что и другая программа);
- Ваша программа пытается саботировать другие программы, изменяя код контроллера, код другой программы и т. Д .;
- Ваша программа пытается использовать ошибку в коде контроллера. Вместо того, чтобы использовать ошибки, вы должны вместо этого открыть проблему в репозитории git, оставить комментарий здесь или пинговать меня в чате.
Прошлые результаты
Подробные результаты всех турниров доступны на вики-странице .
Самый последний турнир был завершен 2015-07-17 07:20. Вот краткое изложение результатов:
The Observer: 209.0
Coward: 203.0
Monk: 173.0
Elephant Warrior: 157.0
Iniqy: 157.0
Agent 38: 144.0
Ninja: 138.0
Meiyo Senshi: 138.0
Kakashi: 136.0
Yoshimitsu: 131.0
Hermurai: 121.0
Warrior Princess: 120.0
Gargoyle: 119.5
The Honourable: 119.0
Hebi: 118.5
Predictor: 116.0
Whack-a-mole: 107.0
The Fool: 106.0
The Prophet: 105.0
Copy-san: 97.0
YAGMCSE: 80.0
The Waiter: 66.0
Swordsman: 43.0
Spork Holder: 32.5
Blessed Samurai: 27.5
Attacker: 27.0
The Terminator: 17.0
Master Yi: 16.0
источник
Ответы:
Монах (Ява)
Монах ценит честь и хвалит благословения богов. Будучи обученным терпению, он спокойно отправляет свои молитвы на небеса, пока не почувствует благосклонность Бога.
Наслаждаясь своей жизнью, он пытается защитить ее. Когда он теряет здоровье по определенной норме, он защищает себя как можно лучше.
В надежде на поддержку своих богов он случайным образом посылает семяизвержение [1] на небеса, в противном случае он борется как можно лучше.
Если его противник измотан из битвы, он заканчивает его, используя оставшуюся честь, чтобы дать ему быструю и безболезненную смерть.
Compile / Run
Ниндзя (Ява)
Ниндзя быстр и атакует еще быстрее. Он нападает сразу же после дружеского официального приветствия, еще больше сбивая с толку своего врага, кланяясь до и после каждой атаки.
Будучи благословенным, ниндзя продолжает это поведение, ожидая, когда его противник сделает свой первый ход (ы). Используя эту возможность, он выпускает серию взрывов, благословленных Богиней ниндзя, пока он не слишком измотан в битве. Используя свою оставшуюся честь, он прячется под листьями внизу, защищая себя от следующей атаки. Он выпрыгивает и нападает на своего врага сзади, прячась так же быстро.
Если он получает смертельную рану, он делает все возможное, чтобы взять с собой в живых своего противника - конечно, соблюдая минимум чести.
Какаши, Подражатель ниндзя (Java)
Какаши копирует движения своих оппонентов, случайным образом выбирая между двумя последними ходами оппонента. Если противник ждет, он кланяется - он также сохраняет свою честь.
Я бы хотел, чтобы Какаши был благословлен шаринганом ... Я подумал о том, чтобы прочитать cast.txt. Имитируйте каждый раунд своей истории против каждого противника там. Попытайтесь выяснить, против какого противника он сражается, сравнив историю смоделированных врагов с историей реальных врагов. Затем используйте эту информацию, чтобы предсказать следующий ход противника и выбрать лучшую противодействие из заранее определенного списка. Но я чувствую, что это может занять немного времени, так как у меня сейчас очень медленный интернет и нет навыков работы с Java
Наблюдатель, (node.js)
Наблюдатель кланяется, прежде чем попытаться предсказать следующий ход противника из его последних 5 ходов, выбирая лучшего аналога для предсказанного хода.
Редактировать: Спасибо @apsillers за совместное использование шаблона node.js !.
Редактировать: у меня был большой недостаток в наблюдателе, я на самом деле не знаю, что я думал вчера вечером. Кажется, он только посмотрел на последние два хода врага. Он удивительно хорошо, как это.
Его память теперь запрашивается для самой длинной (конечной) части истории врагов, которую он уже видел. Он содержит массив со всеми ходами, которые следовали за историей ходов. Один выбран случайным образом. Так что, если один ход следует чаще, он также с большей вероятностью будет выбран. Вроде как цепочки марковские.
Наблюдатель, теперь тоже охранник.
[1]: TIL: эякуляция имеет религиозное значение
источник
Мейо Сенши (Ява)
Родом из района Хайдзима, мало что известно о Мейо. Обычно они не участвуют в спортивных играх, но отправили туда воина, чтобы оценить своих соперников.
Тем не менее, они достойная группа, так что вы можете быть уверены, что он вскоре сообщит о своем присутствии богам. Как только он увидит достаточно своего противника, чтобы сообщить, он будет использовать полученные благословения, чтобы ударить своего противника.
Чтобы скомпилировать прогон, это стандартный способ Java:
источник
Spork Holder (Рубин)
Spork Holder кланяется в первый ход, а затем действует случайным образом. Это один из двух примеров записей.
Команда:
ruby spork-holder.rb
Официант (Баш)
Официант ждет только на каждом шагу. Это один из двух примеров записей.
Команда:
echo W
Там не требуется исходный код.
источник
Трус (Node.js)
BXBXBX
/BBB
шаблонов кланяться (или ударить вас) , когда вы кланяясь.GXGXGX
шаблоны, чтобы поклониться, когда вы охраняете.Если вы хотите написать представление Node.js , пожалуйста, не стесняйтесь использовать мой стандартный код; все, включая
decide
функцию, является полностью общей и бесплатной.источник
Ударить моль (R)
Наносит удар, когда враг может поклониться, иначе охранник.
Запустить с помощью
Rscript Whack-a-mole.R
.источник
Слон Воин (Ява)
Слон Воин из более старого, более естественного времени. Он много видел и все помнит. Он прославляет богов, пока исследует своего противника, а затем, как только он берет их в свое сердце, он разбирает их.
Компилировать:
javac ElephantWarrior.java
команда:
java ElephantWarrior
источник
args
.Королева Воинов (Юлия)
Это первый вызов King of the Hill, в котором я участвовал. Посмотрим, как это будет.
Принцесса-Воин отдает приоритет атакам и чести и прибегает к самосохранению, когда это необходимо. Она очень хочет и никогда не ждет. В стремлении остаться проворным, она также не использует атаку сверху.
Сохранить как
warrior-princess.jl
и запустить из командной строки следующим образом:Если у вас нет Джулии, вы можете скачать ее здесь . Чтобы избежать проблем, рекомендуется последняя стабильная версия (т.е. не версия для разработчиков).
источник
Горгулья (Ява)
Пытается использовать защитный ход без потери чести.
Так как это Java-запись:
источник
Мечник (C / Java)
Мечник кланяется в первый ход и всякий раз, когда ему не хватает чести. Затем он проверяет, не поклонился ли противник, не защищался или не ждал в предыдущем ходу. Если противник этого не сделал, есть большая вероятность, что он сделает одно из них в текущем ходу, и фехтовальщик случайно ударит противника. Если это не так, он защищается, если он не защищал предыдущий ход. Если он имел, он кланяется, чтобы получить честь.
C версия:
Установите GCC (компилятор) и сохраните код в файл с именем команды « Swordsman.c » для компиляции:
Исполняемый файл с именем " Мечник " будет создан. Запустить с помощью
Версия Java:
Установите javac (компилятор) и сохраните код в файле с именем « Swordsman.java » для компиляции команды:
Будет создан файл класса с именем « Swordsman.class ». Запустить с помощью
Атакующий (Java)
Атакующий не заботится ни о чем, кроме того, что он хочет, чтобы его противник умер. Он случайным образом наносит удар одному из атакующих движений и, если имеет низкую честь, кланяется.
Установите javac (компилятор) и сохраните код в файле с именем команды « Attacker.java » для компиляции:
Будет создан файл класса с именем « Attacker.class ». Запустить с помощью
Предиктор (C / Java)
Предиктор предсказывает движения врагов. В первом повороте он использует случайный ход. Кланяется, если его честь низка, наносит удар, если честь врага низка или поклонился в предыдущем ходу. Если предиктор не охранял предыдущий ход, то охраняет текущий ход. Иначе, делает тот же ход, что и противник в предыдущем ходу, при условии, что это не так
'W'
в этом случае Predictor не кланяется.C версия:
Установите GCC (компилятор) и сохраните код в файл с именем команды « Predictor.c » для компиляции:
Исполняемый файл с именем « Предиктор » будет создан. Запустить с помощью
Версия Java:
Установите javac (компилятор) и сохраните код в файл с именем команды « Predicator.java » для компиляции:
Будет создан файл класса с именем « Predicator.class ». Запустить с помощью
Не уверен, насколько эффективными будут эти боты, поскольку у меня нет интерпретатора python2 для его проверки.
источник
ArrayIndexOutOfBoundsException
на первом ходу, заставляя его ждать на первом ходу. Помимо этого он функционирует.segmentation fault (core dumped)
после 24 раундаМастер Йи (Питон)
Мастер-убийца получает большую поддержку в начале игры, наращивая его до тех пор, пока он не станет непобедимым. Пытается атаковать, когда они меньше всего этого ожидают.
Для запуска: Сохранить как
MasterYi.py
источник
Копия Сан (С)
Копирует каждый ход своего противника. Уверен, он гарантированно проиграет. Обобщение:
gcc copy-san.c
источник
Хеби (Ява)
Хэби следует по Пути Змеи.
Змея не нуждается в благословении богов.
Змея скользит своими ударами; как волны на пляже, то, что приходит, отступает назад, как оно пришло.
Змея никогда не ждет.
У Змеи нет чувства уместности, иначе это было бы написано на Python.
Инструкция по эксплуатации:
Код тела:
источник
Достопочтенный (Ява)
Достопочтенные ценности чести превыше всего. То есть его честь выше всех остальных. Если враг самурая имеет большую или равную честь, он кланяется. Никто не должен быть более благородным, чем он. В противном случае он делает случайный ход. Он никогда не охраняет дважды подряд - это было бы бесчестно!
Скомпилировать:
Источник:
источник
Благословенный Самурай (Питон)
Этот самурай пытается сохранить благосклонность богов как можно дольше. Он бросается за священным мечом, затем переключается между Охраной и Атакой одним из ударов, пополняя честь при необходимости. Если похоже, что он или его противник скоро упадут, он бросается на убийство. Он легко упадет противнику, который может отслеживать его паттерн, но его стратегия всегда атаковать с двумя уронами должна быть довольно эффективной.
Для запуска:
Сохранить как BlessedSamurai.py
источник
last
наself.last
который , кажется , чтобы решить эту проблему.Hermurai (C ++)
Восхищается своим противником и немного параноидален. Хочет знать, может ли он сделать то, что могут другие самураи, потому что он все еще не может поверить, что он самурай. Его нескончаемый сон стал реальностью до того, как он об этом узнал. Что может стоить ему головы ...
Иниги (C ++)
Удары как можно сильнее. Переходит в режим неудержимой атаки, когда он в опасности.
Оба написаны на C ++. Скомпилировать:
Для запуска в Linux:
./iniqy
Для запуска в Windows:
iniqy.exe
источник
Терминатор (рубин)
Терминатор не обращает внимания на собственное здоровье. Терминатор не имеет понятия о чести. Терминатор отправляется из будущего и просто намерен уничтожить своего противника. Он делает это, наблюдая за движениями своих противников, и ничего больше. Он анализирует ходы и вычисляет соответствующий ответ таким сложным образом, что никакая современная технология не может предсказать действия Терминатора. На самом деле, любому, кто живет в 2015 году, терминатор может показаться несколько случайным ...
источник
Агент 38 [1] (С)
Являясь продуктом обширных генетических манипуляций, Агент 38 обладает телосложением и остротой ума супер [2] -самураев и определенно превосходит всех своих беспомощных [нуждающихся в цитировании] дефектных [нуждающихся в цитировании] конкурентов.
[1] Абсолютно неуместное число [2] Гарантировано, что оно верно в 1% случаев
YAGMCSE
Методы Монте-Карло, кажется, демонстрируют достойную игру, так что вот еще один универсальный вход в симуляцию Монте-Карло!
В отличие от большинства других записей в этом конкурсе, эта запись использует большое количество симуляций случайных игр и, следовательно, требует использования флага -O3 для оптимальной производительности.
Скомпилируйте программу с помощью команды: gcc monte.c -o monte -O3 -std = c99
источник
GBWWWWW...
илиBWWWW
После моей неудачной попытки войти в Target Dummy, я представляю вам моего следующего бота ...
ScroogeBot - Python 2
Этот бот склонится, если у него будет одна честь. В противном случае он подбросит монету.
Если он приземлится на головы, он выполнит случайную атаку. Если он приземлится на хвосты, он будет либо кланяться, либо охранять.
Команда:
python scroogebot.py
источник
Ёсимицу (JS)
Попытки не получить охрану, проверив последние два хода, получат храбрость с большей честью. на основе шаблона сделаны апсиллеры
источник
Дурак (С)
Дурак предлагает довольно ошибочную стратегию, никогда не повторяя один и тот же ход дважды, если только его не принуждают из-за отсутствия чести. Его движения в значительной степени основаны на случайности, что затрудняет прогнозирование его действий. Его благосостояние - последнее, что у него на уме, так как его мысли сосредоточены только на кровопролитии и окончательной победе
Пророк (С)
Пророк использует знание предыдущих двух ходов своего противника, чтобы предсказать его следующий ход и обеспечивает быструю и смертельную контратаку. Также он занимается астрологией и прочим.
компиляция
Обе программы написаны на C и могут быть скомпилированы с
gcc
:Бег
* Никс
Windows
источник