Это испытание для короля холмов основано на игровом шоу Weakest Link . Для тех, кто не знаком с сериалом, суть этой проблемы связана с тем, за кого вы проголосовали :
- Если другие игроки умнее вас, у вас меньше шансов получить банк.
- Если другие игроки тупее, чем вы, то у вас меньше пота.
В начале каждого раунда Пот начинается с $ 0. Формируется группа из 9 игроков, и каждому игроку присваивается уникальный Интеллект от 1 до 9.
В начале каждого хода, Pot += Smartness
для каждого игрока все еще в раунде. Затем игроки голосуют за игрока, которого хотят удалить. Игрок с наибольшим количеством голосов удаляется. В случае ничьей умный игрок остается.
Когда в раунде остается только 2 игрока, они сражаются в битве умов. Вероятность выигрыша игрока есть Smartness/(Smartness+OpponentSmartness)
. Затем выигравший игрок получает весь банк.
Игрок, получивший наибольшее количество денег в конце игры, побеждает.
Ввод, вывод
Каждый ход вы будете получать текущий список противников. Вы будете иметь доступ к своей сообразительности и всей истории голосования всех игроков за раунд с помощью функций в классе Player.
В качестве результата вы должны вернуть одно целое число, представляющее игрока, за которого вы хотите проголосовать (представляющее их ум). Голосование для себя это разрешено (но не рекомендуется).
Раунды по 9 повторяются до тех пор, пока все игроки не сыграют не менее 1000 10000 раундов, и все игроки не сыграют за одинаковое количество раундов.
Вы можете найти контроллер здесь: https://github.com/nathanmerrill/WeakestLink
Чтобы создать игрока, вам нужно расширить класс Player и добавить игрока в класс PlayerFactory. Ваш класс должен следовать следующим правилам:
Общение или вмешательство в игру любого другого игрока (включая других игроков того же типа) строго запрещено.
Отражение и статические переменные (кроме констант) не допускаются.
Если вы хотите использовать случайность, я предоставил
getRandom()
функцию в классе Player. Используйте его, чтобы моделирование могло быть детерминированным.
Я предоставил много функций в классе Player для легкого доступа к данным. Вы можете найти их онлайн на Github . Ваш игрок будет создан каждый новый раунд. Допускаются «тупые / самоубийственные» игроки (но не игроки с одинаковой стратегией).
множество
377195 WeakestLink.Players.PrudentSniper
362413 WeakestLink.Players.Sniper
353082 WeakestLink.Players.VengefulSniper
347574 WeakestLink.Players.AntiExtremist
298006 WeakestLink.Players.BobPlayer
273867 WeakestLink.Players.MedianPlayer
247881 WeakestLink.Players.TheCult
240425 WeakestLink.Players.Leech
235480 WeakestLink.Players.SniperAide
223128 WeakestLink.Players.Guard
220760 WeakestLink.Players.Anarchist
216839 WeakestLink.Players.RevengePlayer
215099 WeakestLink.Players.IndependentVoter
213883 WeakestLink.Players.SniperKiller
210653 WeakestLink.Players.MaxPlayer
210262 WeakestLink.Players.Bandwagon
209956 WeakestLink.Players.MeanPlayer
208799 WeakestLink.Players.Coward
207686 WeakestLink.Players.Spy
204335 WeakestLink.Players.Hero
203957 WeakestLink.Players.MiddleMan
198535 WeakestLink.Players.MinPlayer
197589 WeakestLink.Players.FixatedPlayer
197478 WeakestLink.Players.HighOrLowNotSelf
181484 WeakestLink.Players.RandomPlayer
165160 WeakestLink.Players.BridgeBurner
источник
src\WeakestLink
я привыкjavac Game\*.java Players\*.java Main.java
компилировать иjava -cp .. WeakestLink.Main
запускать.Ответы:
снайпер
Общая идея состоит в том, чтобы держать одного из глупых игроков (то есть тех, кого мы с большей вероятностью победим в вбрасывании), чтобы набирать очки. После этого мы пытаемся удалить других игроков с низкой стоимостью, чтобы поднять банк. Но когда мы добираемся до умных игроков, мы выбираем удаление самых опасных в случае, если наш глупый игрок будет удален. Таким образом, если у нас нет кого-то, чтобы стрелять, мы должны найти кого-то, с кем у нас есть хотя бы шанс. Кроме того, поскольку мы всегда голосуем как с минимальным, так и с максимальным игроком, я ожидаю, что мы достаточно эффективно продвинемся.
источник
PrudentSniper
Снайпер , но с двумя особыми случаями. Во-первых, если осталось три бота, а PrudentSniper - самый умный, он будет голосовать за среднего бота вместо наименее умного. Это позволяет выиграть еще несколько разборок. Другое поведение состоит в том, что если за него стреляет самый умный бот (за него проголосовали или за аналогичного бота в прошлый раз), а наименее умный - нет, он будет голосовать за самого умного в самообороне.
источник
Культ
Участники культа имеют слегка эзотерическую схему голосования, с помощью которой они пытаются идентифицировать друг друга и голосовать как группа, используя только протокол голосования. Поскольку каждый член культа знает, как голосовать, любой, кто голосует по-разному, раскрывается как неучастник и в конечном итоге подвергается исключению.
Схема голосования с первого взгляда:
Код:
Последние мысли:
Культ теперь переключается на голосование за самых опасных игроков, когда для вбрасывания осталось только два или меньше члена культа. Я проверил это несколько раз
cult_cnt>1
иcult_cnt>2
условий и более поздние победами чаще.Тем не менее, это мера предосторожности, и культ на самом деле не предназначен для работы в качестве одинокого игрока, поэтому, поскольку количество новых игроков увеличивается, культ все равно должен проиграть.
источник
unusedPlayers.addAll(allPlayers);
в Game.java дублировалось около девяти раз, чтобы все игроки могли встречаться с разной кратностью (например, перетасовывать несколько колод карт) ... нет, конечно, это необъективный запрос, но Интересно посмотреть, насколько мощной может быть командная стратегия, если у них даже есть небольшой шанс собраться вместе.BridgeBurner
Не где-то, где я могу проверить это прямо сейчас, и это выглядело как действительно уродливый / тупой код, но это должно сработать.
Этот бот просто хочет, чтобы его ненавидели. Он голосует за того, кто проголосовал против него меньше всего . В случае ничьей он выбирает того, кто прошел дольше всех без голосования. В случае другой связи, он выбирает самых умных из них (предположительно, потому что они сделают худшего врага). Он не будет голосовать за себя, потому что никто не будет его ненавидеть, когда его нет рядом.
источник
-1
проголосовали. Но это должно быть исправлено сейчас.повальное увлечение
Следит за толпой при голосовании, если только он не является целью.
Я предполагаю, что это только сделает снайперов сильнее, следуя за ними, но также избегает попадания в цель культа и помощников-снайперов в несколько более эффективной манере. Это может быть также щит для снайперских убийц или помощь, если их больше. (Нужно тестировать с последними обновлениями).
Использование функций Java 8, потому что игра все равно нуждается в этом.
источник
RevengePlayer
Этот бот будет голосовать за того, кто голосовал за него больше всего раз, а тай-брейк был самым умным игроком. Теория заключается в том, что игрок, который голосовал за вас в прошлом, скорее всего, снова проголосует за вас.
источник
MeanPlayer
Не голосуйте ни за самых глупых, ни за умных игроков, и у него в руках пистолет (проскользнул мимо безопасности)
источник
AntiExtremist
Этот крайний социалист считает, что все люди должны быть одинаково умны. Он пытается убить тех, кто намного умнее или тупее, чем он. Он считает, что оба, но он предпочитает тупой в целом. Он одобряет глупых людей в начале и умных в конце, но это зависит от того, насколько экстремальны эти люди.
ПРИМЕЧАНИЕ. Согласно Линусу, большинство голосов будут голосовать так же, как и снайперы (525602: 1228).
источник
static Sniper S = new Sniper()
аstatic long agrees=0, disagrees=0;
. В вашем методе голосования я добавляю,S.setSmartness(getSmartness()); int sniper_answer=S.vote(currentOpponents);
который подсчитывает, как снайпер будет голосовать за вашу позицию, а затем помещает ваш ответ в переменную, чтобы подсчитать, согласен он или нет, прежде чем возвращать свой ответ. Как только игра закончится, вы можете распечатать согласие: disagress, который был 525602: 1228.шпион
Шпион зарезервирован. Он не любит стрелять для самых умных людей. Кроме того, он не любит ковыряться в беззащитных
четвертныхидиотах. Таким образом, он любит устранять самых близких ему по сообразительности.Вы только что получили удар в спину, mes amis . Ему все равно, если он победит. Ему просто нравится звук ножа в твоей спине, когда он успешно голосует против тебя.
источник
Math.abs(enemyIntel - selfIntel) < closestIntel
должно бытьMath.abs(enemyIntel - selfIntel) < Math.abs(closestIntel - selfIntel)
.MedianPlayer
Этот игрок пытается быть самым подлым (ну, медианой) оставшимся.
Он голосует за устранение самых умных и глупых противников (с небольшим уклоном в сторону голосования против самых умных), в зависимости от того, есть ли более или менее умнее / тупее, чем они сами.
рамки явно украдены у @Linus выше.
источник
трус
Просто не хочет, чтобы за него проголосовали, поэтому голосуйте за противника, наиболее похожего на игрока, за которого проголосовали в последнем туре, чтобы максимально увеличить шанс оказаться в команде-победителе.
Не очень хорошо сейчас, но может с таким же успехом бросить это в микс.
источник
герой
Отбрасывайте голоса тех, кто выбирает слабых ... или раздражает его.
источник
боб
Боб просто обычный парень, который думает, что он умнее, чем он есть на самом деле. Невозможно выиграть семейство снайперов, но большую часть времени я получаю топ-5 в моих симуляциях.
источник
FixatedPlayer
Выбирает случайную цель, затем голосует за них, пока они не исчезнут. Не буду голосовать за себя, хотя.
источник
Статистика
Это не вход в конкурс. Это просто способ получить полезную статистику игры. Эта статистика выводит процентную вероятность того, что конкретный игрок будет исключен в раунде.
Для этого добавьте следующие строки,
Round.java
чтобы верхняя часть файла выглядела так:Затем измените метод голосования, чтобы он выглядел так:
Пример вывода:
источник
MaxPlayer
Всезнайка. Предпочитает удалить кого-либо с высоким интеллектом (который может поэтому бросить вызов его непревзойденному интеллекту)
источник
охрана
Отбрасывает голоса тех, кто выбирает сильных ... или тех, кто его раздражает.
источник
пиявка
Полагается на других ботов, чтобы голосовать за самых умных и глупых парней .. вроде.
Он доволен тем, что оказался где-то посередине и в итоге разделил банк с победителем (так как он на самом деле очень приличный
парень-бот).источник
SniperKiller
Еще один ответ бесстыдно украден из кода Линуса . Этот убьет всех снайперов, а не защитит их. Если он знает, что снайперов не осталось, он будет действовать как сам снайпер.
источник
RandomPlayer
источник
MinPlayer
Элитарный. Предпочитает удалить кого-либо с низким интеллектом.
источник
VengefulSniper
Все началось с того, что, как мне показалось, называлось оригинально
StupidBuffering
(имя, которое я ненавидел бросать), а затем оказалось просто PrudentSniper, которому было все равно, если он был целью. Это также, казалось, было единственной причиной, по которой он не мог победить PrudentSniper, поэтому я немного подправил вещи, чтобы сделать его своим фокусом.Теперь, по сути, это снайпер, но если на него нацелится самый умный или самый тупой бот, то он нацелится на тот, кто наберет наибольшее количество голосов в последнем раунде. Если они оба получили одинаковое количество голосов и оба нацелены на него, он возвращается к нормальному поведению снайпера. В моих тестах это фактическое время от времени побеждает PrudentSniper.
источник
перекупщик
MiddleMan делает все возможное, чтобы максимизировать прибыль, сохраняя осторожный взгляд, что он не вырезан из игры. Он держит вокруг меньших участников, чтобы улучшить его шанс сделать это к следующему раунду (и оставить легкий конец). Он будет голосовать против кого-то умнее его, только если будет больше умных участников, чем меньших участников. Какой бы из двух групп он ни голосовал, он всегда голосует за самую низкую группу, чтобы сохранить рост банка.
PS надеюсь, что это скомпилируется, я не Java-парень.
Имел эту схему в виду, прежде чем читать другие записи. Затем я был удивлен, насколько близок (но критически отличается) Снайпер, поэтому я пошел дальше и использовал это как отправную точку, поскольку не знаю синтаксиса Java. Спасибо @Linus
источник
ApproximatePosition
Этот бот пытается стрелять примерно по отсутствующим значениям сообразительности, предполагая, что группа продолжит с тем же шаблоном, то есть будет нацелена на тот же тип цели. Он всегда голосует за самого умного из двух игроков, когда есть выбор.
Долгое время я не пользовался Java, и в настоящее время на работе, так что ... Не могу проверить это, надеюсь, что это не слишком глючит, будьте осторожны, пожалуйста :).
Кстати, он использует awt.Point только потому, что мне лень реализовывать кортеж n_n.
источник
emptyPosition[emptyPosition.length]=j;
всегда будет давать вам массив вне границ. Наконец, не уверен почему, но вы будете голосовать против игроков, которые не в раунде.emptyPosition[emptyPosition.length]
, это глупая ошибка, поскольку длина всегда равна единице за последний индекс ^^. Спасибо за изменения, я буду использовать эту новую версию, чтобы исправить это. Насчет троичного блока ... да, я чувствовал, что хотел бы его использовать, и, может быть, слишком привык писать для себя, не думаю, что читать было удобно. Делать исправления и обновлять их.SniperAide
Перед добавлением PrudentSniper я написал бота, чтобы помочь Sniper победить AntiExtremist и другие мошенники (я использую это слово с любовью). Бот, SniperAide, ищет игроков, которые голосуют как снайперы и голосуют так, как он думает, когда будут согласие. Если все игроки выглядят как снайперы, он голосует за максимума, защищая нижних снайперов (которые также переключатся на максимум в этой точке), даже если это он сам.
Код :
В настоящее время он не сильно помогает против PrudentSniper.
источник
HighOrLowNotSelf
Удаляет случайно низшего или самого высокого интеллекта игрока (но не самого себя).
источник
long
, notint
. Во-вторых,ops
не содержит себя. (Если вы хотите проголосовать за себя, вы должны явно включить его). Наконец, включенный if / else не является допустимым Java. Я исправил твой код и добавил его в githubанархист
Анархист не любит режимы.
Анархист попытается убить действующего президента.
Если анархист - президент, он решает злоупотребить своей властью и убивать бесполезных пагентов. Если только он не стал мишенью одного из его подчиненных, потому что вместо этого они должны были сгореть.
источник
IndependentVoter
Этот бот знает, что население в целом всегда ошибается! Так что он голосует за тех, кто набирает наименьшее количество голосов.
Код почти идентичен Solarwaron "Bandwagon", но логика конца перевернута.
источник