Противостояние 4-х человек
Описание
Вы как-то оказались в четырехстороннем противостоянии. Заряженное ружье лежит в ваших руках, а некоторые гранаты зацеплены за ваш ремень.
Цель состоит в том, чтобы иметь больше здоровья в конце противостояния. Противостояние заканчивается, когда максимум один человек имеет положительное количество здоровья.
У каждого игрока есть 5
здоровье, и он умирает, когда его здоровье падает до / ниже 0
. Ход игрока умирает - это последний ход, когда игрок может получить урон.
Если в конце противостояния есть живой игрок, этот игрок выигрывает. В противном случае выигрывает игрок с наименьшим отрицательным здоровьем.
действия
Стреляй : сделай выстрел в кого-нибудь.
2
урон при стрельбе по живому врагу0
урон, если застрелить мертвого врагаhealth_at_start_of_turn+2
повреждение при стрельбе в себя (Обратите внимание, что это оставит вас на-2
здоровье.)- Если один враг стреляет в вас в тот же ход, когда вы стреляете в себя, вы прекратите противостояние с -4 ед. Здоровья (вы по-прежнему получаете урон от других игроков в тот ход, когда убиваете себя).
- Ваше действие в следующем ходу будет проигнорировано (и предполагается, что будет
Nothing
).
Dodge : попытаться увернуться от единственного выстрела противника.
Приготовьтесь : отцепите гранату и приготовьтесь бросить ее.
- У вас есть только три хода, чтобы бросить его, прежде чем вас взорвут (
6
урон себе,3
урон всем живым врагам) - Умереть с не брошенной гранатой равносильно тому, чтобы не бросать гранату в течение трех ходов.
- У вас есть только три хода, чтобы бросить его, прежде чем вас взорвут (
Бросьте : бросьте гранату в сторону кого-то и надейтесь на лучшее.
- Цель получает
8
урон, если жива - Все остальные (включая вас) получают
3
урон, если они живы
- Цель получает
Ничего : постой на ходу и смотри, как все умирают.
вход
Ваша программа будет передана следующая информация:
- Здоровье каждого игрока
Список действий, предпринятых этим игроком с момента начала противостояния. Ниже приведен формат информации, передаваемой на игрока:
[Health],[Action 1],[Action 2],[Action 3],...
Действия будут предоставлены в формате, указанном в разделе « Вывод ».
Вы получите 4 такие строки, разделенные пробелом и переданные в качестве одного аргумента. Порядок этих строк:
[Player Info] [Opponent 1 Info] [Opponent 2 Info] [Opponent 3 Info]
Строки передаются как второй аргумент. Первый аргумент содержит целое число, которое однозначно идентифицирует вводимое противостояние. Противостояние между одним и тем же набором игроков гарантированно не будет одновременным. Тем не менее, несколько противостояний будут происходить одновременно.
Например:
$./Player.bash 5 "3,S2,N 5,P,N 3,S0,N -2,S3,N"
В настоящее время у игрока и второго противника 3 здоровья, у первого противника 5 единиц здоровья, а у третьего противника -2 здоровья, и он мертв.
На первом повороте:
- Игрок 1 выстрелил враг 2
- Враг 1 подготовил гранату
- Враг 2 выстрелил игрок
- Враг 3 застрелился
На втором повороте:
- Все игроки ничего не сделали. (Игрок и враг 2 не могут ничего сделать, так как они стреляли в предыдущем ходу. Враг 3 мертв: он сделает
Nothing
для остальной части противостояния.)
Второй аргумент в начале противостояния является: 5 5 5 5
.
Выход
Команда должна быть выведена в указанном ниже формате. Неверный вывод интерпретируется как «Ничего». За командой, требующей цели, должно следовать целое число ( 0-3
с 0
представлением игрока и 1-3
представлением врагов 1-3).
S[target]
: Стреляет [цель].D[target]
Пытается увернуться [цель].P
: Подготовить гранату.T[target]
: Бросить гранату в [цель].N
: Ничего не делать.
Команда , которая нуждается в цели, но подается цель не между 0
и 3
или не подается целью полностью будет предполагаться целями 0
(игрок).
счет
В конце каждого противостояния игроки получают очки, рассчитанные по следующей формуле:
35 + health at end of standoff
В том случае, когда игрок заканчивает противостояние с негативным последствиями для здоровья, они будут получать балл ниже 35 . Следующие очки также начисляются в качестве бонуса:
- Больше всего здоровья: +4 балла
- На втором месте здоровье: +2 балла
- Третье место по здоровью: +1 балл.
В случае ничьей предоставляется меньший бонус (если два человека имеют наибольшее количество здоровья, оба получают +2; если есть 3 человека с наибольшим количеством здоровья, +1, и если все заканчиваются одинаково, +0).
Окончательный результат определяется путем расчета среднего значения всех индивидуальных показателей.
Правила / Подробнее
- Порядок событий в очереди:
- Все игроки делают свои действия.
- Игроки, у которых 0 или меньше здоровья, умирают.
- Не брошенные гранаты, которые должны взорваться, взорвутся (игроки, которые только что умерли, все еще получают травмы, так как это еще ход, в котором они погибли)
- Нет сотрудничества между записями.
- Три * противостояния будут происходить между каждым набором из 4 игроков. (Порядок игроков может меняться с каждым противостоянием).
- Записи, занимающие чрезмерное количество памяти на диске, будут дисквалифицированы.
- Чтение или изменение файлов, отличных от вашей записи, приведет к дисквалификации вашей записи.
- Грузовик, которым управляет пьяница, обгонит всех живых игроков после
50th
хода, если в конце хода противостояние еще не закончилось50th
.- Этот грузовик наносит 20 урона всем живым игрокам.
- Противостояние происходит быстро. Программы отключаются через 1 секунду.
- Ваша программа будет вызываться каждый ход, даже после вашей смерти.
- Вы можете читать или записывать файлы только в свой каталог (если ваша запись называется JohnDoe, вы можете сохранять файлы в каталоге Players / JohnDoe /); однако это НЕ будет текущим каталогом во время работы вашего скрипта.
- Противоборство будет происходить на компьютере под управлением Arch Linux (выпуск 2014.08.01).
Контроллер доступен на GitHub .
Пожалуйста, включите в свой пост следующее:
- Имя для вашего бота
- Команда оболочки для запуска бота (напр.
java Doe.java
) Ввод будет передаваться через командную строку как один аргумент (java Doe.java 5 "-2,S0 -2,S1 -2,S2 5,N"
) - Код вашего бота
- Как должен быть скомпилирован бот (если применимо)
- Язык (и версия, если применимо, особенно для python)
* Контроллер занимает слишком много времени для шести.
Табло
Observer 43.280570409982
MuhammadAli 43.134861217214
Osama 43.031983702572
LateBoomer 42.560275019099
SimpleShooter 42.412885154062
LessSimpleShooter 42.3772
Neo 42.3738
Scared 42.3678
Richochet 42.3263
Equivocator 42.2833
TwentyFourthsAndAHalfCentury 42.2640
Darwin 42.1584
HanSolo 42.1025
Coward 42.0458
ManipulativeBastard 41.8948
Sadist 41.7232
Aggressor 41.7058
CourageTheDog 41.5629
Grenadier 40.9889
Bomberman 40.8840
Spock 40.8713
Sniper 40.6346
DONTNUKEMEBRO 39.8151
PriorityTargets 39.6126
Hippolyta 39.2480
EmoCowboy 39.2069
Zaenille 39.1971
AntiGrenadier 39.1919
PoliticallyCorrectGunman 39.1689
InputAnalyzer 39.1517
Rule0Bot 39.1000
BiasedOne 39.0664
Pacifist 39.0481
StraightShooter 39.0292
Ninja 38.7801
MAD 38.2543
Monkey 37.7089
Label1Goto1 36.2131
Generated: 2014/08/22 03:56:13.470264860 UTC
Логи: на GitHub
источник
Ответы:
наблюдатель
Этот парень анализирует своих врагов. Цель - выжить, пока не останется только один «агрессивный» противник, а затем убить его в эпическом противостоянии.
Компиляция:
javac Observer.java
Выполнить:java Observer arg0 arg1
источник
!player.contains("S" + id)
это необходимое условие в функции isAggressive? Самоубийственный игрок все равно будет мертвгренадер
Оружие переоценено. А истинное противостояние Шотландского выглядит следующим образом :
Хотя это кажется тривиальным, это, вероятно, не страшная стратегия. Так как пушки и граната оба имеют два-оборот цикл, это, безусловно , более эффективный 1 путь к повреждению сделки.
Конечно, если все три соперника стреляют в меня в первом раунде, это не хорошо. Но не так много было бы.
Компилировать / запускать стандартным способом Java:
1 бессмысленная сноска
источник
Правило Азимова № 0 Бот - Питон
Довольно прямо, он нападет на первого игрока, которого он увидит с гранатой, чтобы защитить большинство людей. Если никто не представляет угрозы для большинства людей, он ничего не сделает.
Запустите это как:
источник
Хан Соло - Питон
Хан выстрелил первым. В этом случае он будет стрелять первым, выбрав ближайшую цель в живых.
Запустите это как:
Примечание : это первое, что я написал в Python, поэтому, если вы видите какие-либо плохие практики, специфичные для Python, пожалуйста, дайте мне знать.
источник
is_alive
EmoCowboy
Зачем ждать смерти? Просто убей себя сейчас. Надеемся, что остальные дураки раздувают друг друга до значения намного меньше -2.
Оценка будет обычно -2. Иногда -4, если люди решают застрелить меня. В редких случаях это означает, что это должно побить несколько текущих представлений.
питон
РЕДАКТИРОВАТЬ: Это не шутка, и именно поэтому эти эмо эмоции не одобряются. Это законная стратегия. Быть живым смертельно!
источник
пацифист
Он настоящий крутой парень, только что столкнулся с не той толпой.
Запустите как
runghc pacifist.hs
, но вы можете скомпилировать его с -O3, если проблема в эффективности.источник
-O3
делает чертовски разницу.runghc
стороне. На самом деле это в 10 раз медленнее на моем компьютере с Linux.Обезьяна - Питон (Первая запись!)
Обезьяна видит обезьяна делает. Повторит точно последнее действие, предпринятое случайным игроком.
Можно запустить так: «python monkey.py args» Никаких дополнительных шагов не требуется.
источник
-1
напрямую.argv[2]
получить историю игроков.Simple Shooter - Perl (исправлена ошибка)
Этот бот стреляет в противника с наибольшим количеством здоровья. Это очень простая стратегия, но я думаю, что у нее есть неплохие шансы на успех.
Вот как запустить его, используя пример ввода:
источник
Спок, в Python 3.x
Этот код больше похож на эксперимент (следовательно, назван в честь Спока, потому что ... он вулкан, и они довольно хороши в подобных вещах), но, тем не менее, было забавно строить его. Основными причинами всего этого кода являются предположения, которые хорошее, логичное существо, как Спок, сделало бы, если учитывать правила игры:
Цель этой игры состоит в том, чтобы максимизировать счет, который будет сделан всеми, кто просто стоит на месте, что невозможно из-за грузовика.
То, как Спок играет в остальной части игры, можно выразить его знаменитой цитатой: « Потребности многих перевешивают потребности немногих ». Другими словами, Спок должен убедиться, что нанесен наименьший ущерб, убивая тех, кто это делает. Как он это делает:
Причина в том, что, нацеливая на самых слабых игроков, мы уничтожаем источники урона. Причина, по которой стоят гранаты, заключается в том, что они взрываются независимо и наносят меньший урон, если их не бросить.
И вот этот бот работает. Я не проводил тщательного тестирования на предмет ошибок ввода (поэтому, пожалуйста, предупредите меня, если что-то пойдет не так), но я уверен, что я справился с большинством изломов. Я основал небольшую часть кода от бота HanSolo, но по большей части это запутанная путаница кода. Наслаждаться.
Запустите это как:
2014-08-12 - Незначительное исправление, касающееся обнаружения гранат.
2014-08-14 - Незначительное исправление, касающееся эндшпиля, спасибо isaacg за то, что он указывал на него раньше
источник
Traceback (most recent call last):
File "./players/Spock/Spock.py", line 87, in <module>: Endgame(current_turn)
File "./players/Spock/Spock.py", line 79, in Endgame: if IsTarget(player, target_health):
File "./players/Spock/Spock.py", line 4, in IsTarget: return int(player[1].split(",")[0]) < target_health
TypeError: unorderable types: int() < str()
player[1][1]
должно бытьint(player[1][1])
.Политически Правильный Стрелок
Очень политкорректно, поскольку ничего не дискриминирует. Таким образом, это не очень умно.
Это ... не имеет значения, какие аргументы передаются ему, как.
python politicallycorrectgunman.py
источник
random.choice(array)
?Стрелок прямо
Он обученная часть кавалерии и говорит на многих языках, но, будучи тупым, Стрелок может видеть только одного врага перед ним. Будучи лошадью, он не понимает, что нужно ждать между выстрелами.
Perl, Python 2/3, Ruby: эта лошадь действительно является полиготной записью.
Ответ, в который вложено немного больше размышлений (и некоторой функциональной парадигмы), см. В двадцать четвертом с половиной столетии .
источник
Anti-гренадер
Гранаты плохие. Очень плохо. Так что, если кто-то готовит один, лучше всего застрелить их. В противном случае, мы просто будем тусоваться.
источник
Рикошет - Perl
Простые стратегии, кажется, достойно справляются с этой задачей, так что вот еще один. Стреляет случайный живой игрок. Он имеет дополнительную возможность совершать самоубийство в конце, чтобы избежать грузовика.
Беги так:
источник
агрессор
Тянет в первом раунде, бросает противника с самым высоким уровнем здоровья во втором раунде, после этого стреляет в противника с самым высоким уровнем здоровья.
Запустите это как ./agg ID "5 5 5 5".
источник
Ниндзя
Просто уклоняется случайным образом, пытаясь избежать удара.
беги как
Аргументы не нужны, но могут быть добавлены без вопроса.
источник
Название : PriorityTargets
Командная оболочка : ruby PriorityTargets.rb 5 [game_state]
Язык : Ruby V2.1.2
Описание : PriorityTargets пытается найти общие стили игры. Затем он решает, основываясь на этих стилях игры, кого он хочет атаковать и какое оружие использовать.
Примечание : подача First Code Golf! Гораздо больше, чем другие представления, потому что я немного с ума сошел.
источник
Трус - Perl
Действует очень трусливо. Когда он чувствует себя здоровым, он выбирает врага, который не чувствует этого, и стреляет в него. Бонусные очки для тех врагов, которые стреляли в последний ход (потому что они, как известно, делают
Nothing
этот ход и поэтому абсолютно беззащитны). Когда он чувствует себя не очень хорошо, он бежит в укрытие, чтобы спрятать свою шкуру, иногда стреляя в кого-то.Довольно стандартный Perl-код; сохраните его в каком-то файле и запустите
perl file argument argument [...]
. Я проверил синтаксис, и все было в порядке, поэтому я надеюсь, что с этим проблем не возникнет.E: исключен потенциал деления на 0 ошибок.
источник
Bomberman
Бот написан на R, командная строка должна быть такой:
Rscript Bomberman.R arg0 arg1
я понял после того, как начал писать этого бота, что Geobits уже сделал гренадер, но я думаю, что мой значительно отличается, в том, что он проверяет, что его здоровье выше 3, прежде чем подготовить гранату, бросает его в последний стрелок первым и самый здоровый второй, и если его здоровье ниже 3, он уклонится от опасного игрока (ни мертвого, ни стрелка в последнем раунде), ни застрелит одного из оставшихся игроков.
редактировать
Кажется, существует некоторая проблема связи между этим ботом и вашим контроллером, так как все журналы, которые я просматривал, показывали, что мой бот только выводил данные
N
. Итак, вот тот же бот, но переписанный на Python, в надежде, что если у этого также будут проблемы со связью, кто-то увидит его.Быть призванным с
python Bomberman.py arg0 arg1
.источник
Нео
Уклоняйтесь от живого игрока, который не стрелял в последний ход. Если все живые стреляли в последний ход, стреляйте в случайного живого игрока. Самоубийство, когда видишь фары.
Я не ожидаю многого от этого парня против гранатометов, но против стрелков это может сработать довольно хорошо. Посмотрим.
источник
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.charAt(String.java:658)
at Neo.main(Neo.java:17)
Двадцать четвертый с половиной века
Этот вход в Python уклоняется и уклоняется, пока не останутся только пассивные игроки или один агрессивный игрок, затем начнет стрелять. Он надеется, что проходящий марсианин позаботится о гренадерах и пьяных водителях грузовиков.
Если я не сделал что-то не так, это функциональный Python. Это, конечно, не похоже на тот Python, который я написал до того, как Хаскелл и друзья нашли меня, и я не думаю, что что-то мутировал на месте. Но если вы знаете лучше, пожалуйста, скажите мне.
Беги как:
источник
Напугана
Это представление боится всех. Но это особенно пугает некоторых людей. Так что он выясняет, кто самый опасный, и стреляет в них. Если несколько врагов выглядят наиболее опасными, они стреляют случайным образом.
Это python (2 или 3, тот же результат в любом из.) Сохранить как
scared.py
, запустить сpython3 scared.py
источник
Манипулятивный ублюдок - Питон
Готовит и бросает гранаты. Если он думает, что нет времени или слишком мало врагов, он стреляет. Если он один, он пытается перехитрить другого парня.
источник
Осама
Я пробовал это в течение дня или около того, теперь пришло время опубликовать и посмотреть, как другие эволюционировали за это время.
Скомпилируйте с
ghc -O2 osama.hs
, затем запустите используя./players/Osama/osama
.источник
Снайпер - Луа
В первый ход он стреляет в случайного человека, затем в него стреляют все игроки, которых он может убить (2 или 1 здоровье). Если ни одна из этих работ не будет выполнена, он попытается застрелить игрока, который выстрелил последним, в противном случае он будет стрелять случайным игроком. Бежать с
lua Sniper.lua
источник
lua Sniper.lua 3 "5,S1 3,D3 5,N 5,P"
. Возможно, вам придется проверить свойarg
индекс.lua: ./players/Sniper/Sniper.lua:38: attempt to compare nil with number
./players/Sniper/Sniper.lua:38: in main chunk
[C]: in ?
Дарвин
Выживание наиболее приспособленных означает, что наименее здоровые должны умереть.
обоснование
Глядя на пакет результатов со вторника (12-го), можно выделить три отдельные группы: выжившие; эффективно самоубийственный; и хуже, чем бесполезно. Выжившие делятся простыми стратегиями стрельбы. Хотя пара других ботов ( Спок , Трус ) будут нацеливаться на наименее здорового врага, они также усложняют свои стратегии другими действиями. Этот не делает. Как и в Simple Shooter , у него есть четкое определение цели, и он неуклонно ее придерживается. Будет интересно посмотреть, как это вписывается в результаты.
Это урезанная, слегка измененная версия моего раннего двадцать четвертого с половиной века , и она разделяет свой призыв:
источник
Zaenille - C
Приоритеты:
Компилировать с
gcc <filename.c>
.Беги с
./a.out <parameters>
.источник
InputAnalyzer
Ключ игры, такой как это, состоит в том, чтобы проанализировать, как все ваши противники играют, чтобы ответить соответственно. Мой бот сделает это, используя сложные алгоритмы, которые приведут к тому, что мои оппоненты превратятся в мое преимущество, дающее решительную победу!
Редактировать: я сейчас
Скомпилируйте бота с помощью следующей команды (необходимо иметь ghc)
Команда Shell для запуска должна быть следующей
Примечание. Я тестировал Windows, поэтому, если у вас возникнут проблемы с компиляцией / запуском, сообщите об этом в комментарии, и я сделаю все возможное, чтобы найти правильную команду.
источник
Собака по кличке Кураж
Первое - стрелять в плохих парней на месте. Затем случайно уклоняйтесь, пока кто-нибудь не приготовит гранату. Затем, когда все стреляют в него, приготовь мою собственную гранату и брось ее в любого. Но отвлекающий человек.
Редактировать: теперь реализовано так, как я и думал. До этого счет был: 35,9
Обновлено: иногда стреляет вместо уклонения
couragethedog.py
Беги как
источник
MAD - Java
Бот MAD доверяет силе запугивания посредством взаимного гарантированного уничтожения . Всякий раз, когда у него нет готовой гранаты, он готовит ее. Затем он уклоняется от возможных стрелков, пока кто-нибудь не попытается нанести ему урон, или его граната вот-вот взорвется. С момента, когда на него нападают, он бросает гранаты в того, кто пытался нанести ему больший урон в этом матче. Если его граната вот-вот взорвется, он бомбит ведущего игрока. MAD не против того, чтобы выстрелить в кого-то, когда нечего увернуться или бросить в него гранату, а его граната еще годна хотя бы на один ход.
Этот бот, скорее всего, будет работать плохо, но идея все равно мне понравилась. MAD, вероятно, преуспел бы в области с более умными ботами, которые регистрируют поведение других ботов, и с большим количеством совпадений, запускаемых между 4 ботами.
источник
java MAD 43 "5 5 5 5"
кажется, ничего не выводит.Садист
питон
Его приоритет - причинять боль и уронить гранаты. Он тянет первый поворот. Он любит убивать, когда ты не можешь атаковать. Он играет с SSS (одиночными простыми стрелками), уклоняясь и вытягивая, чтобы продлить господство. Он даже выбирает напасть на тех, кто первым ничего не сделал.
Поскольку он использует гранаты, он (и все остальные) обычно не выживет во втором или третьем раунде. Если он будет в паре с другим гренадером, все умрут. Это означает, что я не рассчитываю на победу, но я написал это для изучения Python (никогда не использовал его раньше, и я пытаюсь познакомиться с кучей новых языков). Есть несколько других, «тянуть первых», так что, если вы чувствуете, что это слишком симулярно, дайте мне знать. Другие, кажется, не хотят тянуть и затем увернуться.
источник
raw_input
это сработает.sys.argv[2]
кажется, что консенсус для записей Python. Вы также можете найти применение дляpop
, что позволит вам сконцентрироватьсяthisisme=player[0];player.remove(player[0])
на более простомthisisme=player.pop(0)
.raw_input
извлекает изSTDIN
, но история игрока передается в вашу программу в качестве аргумента командной строки, поэтому вам нужноsys.argv
. Ради тестирования вы можете просто установить его вручную с помощьюsys.argv = ["sadist.py", "0", "5 5 5 5"]
. Тогда вы сможете позвонитьplayer=sys.argv[2].split()
. Если импортsys
действительно невозможен, для тестирования вы можете даже удалить точку и вызвать массивsysargv
. Пока все остальное работает и вы возвращаетесь кsys.argv
своему представлению, все должно быть хорошо.