Пещерный человек сумасшедший. Другой пещерный человек взял палку, но палка была для меня. Пещерный Бой !
Описание
Пещерному человеку нужна острая палка, чтобы нанести удар другому пещерному человеку. Другие пещерные люди также пытаются нанести удар острой палкой. Пещерный человек может точить палку, тыкать палкой или блокировать палки.
Если пещерный человек ткнет другого пещерного человека острой палкой, другой пещерный человек убежит и я одержу победу. Но если другой пещерный человек ловко блокирует, когда я тыкаю, ничего не происходит, кроме моей палки, которая становится тупой, и мне нужно снова заострить.
Пещерный человек ленивый. Также пещерный человек тупой. Пещерный человек не знает, что делать, поэтому пещерному человеку нужна модная компьютерная программа техно, чтобы сказать пещерному человеку, что делать.
вход
Ввод вашей программы будет представлять собой историю событий, которые произошли, где S
обозначает повышение резкости (то есть пещерный человек оттачивал свою палку), P
обозначает удар, и B
обозначает блок. Входными данными будет история обеих сторон (вы и противник), поэтому ходы вашего и противника будут разделены запятой ( ,
).
Пример ввода:
SPB,SBB
Это означает, что игрок оттачивал свою палку, затем тыкал, затем блокировал, а противник оттачивал, затем блокировал, а затем снова блокировал.
Вы не получите никакой информации на первом ходу.
Выход
Вывод очень похож на ввод (потому что пещерный человек не очень умен). Ваша программа должна выводить S
резкость, P
для poke и B
для блока. Будет учитываться только первый символ вывода, а любой другой ввод будет рассматриваться как B
(блочная) команда.
S
: точитьПри обострении острота палки пещерного человека увеличивается на 1, и палка получает 1 дополнительный удар. Каждый удар уменьшает остроту палки на 1, а если резкость палки равна 0, слишком скучно для того, чтобы тыкать. Резкость начинается с 0. Если резкость достигает 5, палка - это меч! (Смотри ниже.)
Если противник тыкает, когда вы точите (и они имеют остроту> 0), противник побеждает!
P
: тыкатьКогда тыкаешь, резкость палки пещерного человека падает на 1, а ты тыкаешь своего противника! Если ваш противник обостряется, вы выигрываете! Если противник тыкает, ваша палка ударяет по палке противника, и они оба становятся более тусклыми (на 1 «единицу резкости»). Если противник блокирует, ничего не происходит, кроме того, что ваша палка становится более тупой.
Если тыкаешь, когда острота твоей палки 5 или больше, твоя палка становится мечом, и ты всегда выигрываешь! (Если только у вашего противника нет меча и он тоже выбрал
P
; в этом случае они оба становятся тупее и могут вернуться к палкам, если их острота упадет ниже 5.)Вы не можете тыкать с точностью до 0. Если вы делаете, ничего не произойдет.
B
: блокКогда вы блокируете, ничего не происходит, когда ваш противник пикает. Если ваш противник не тыкает, блок ничего не делает.
Блокировка не защищает от меча, даже если он у вас есть!
Правила и ограничения
Дополнительные правила:
- Ваша программа может читать и записывать файлы в своей собственной папке (без кражи!), Если вы хотите сохранить данные, но вы не можете получить доступ к чему-либо за ее пределами (а пещерные люди не имеют подключения к Интернету в пустыне).
- Важное примечание к файлам : если вы сохраняете файлы, не забудьте сохранить их в каталоге
players/YourBotsName/somefile.foo
! Текущий рабочий каталог для вашей программы не будет вашей программой!
- Важное примечание к файлам : если вы сохраняете файлы, не забудьте сохранить их в каталоге
- Пещерные люди справедливы: одна программа не может иметь код, специфичный для другой программы, и программы не могут помочь друг другу. (У вас может быть несколько программ, но они никак не могут взаимодействовать друг с другом.)
- Судья пещерного человека не терпелив. Если пещерный человек делает более 100 ходов каждый, чтобы определить победителя, судье становится скучно, и оба пещерных человека проигрывают.
Если ваша программа нарушает правило или не соответствует спецификации, программа дисквалифицируется, удаляется playerlist.txt
и все дуэли возобновляются с самого начала. Если ваша программа будет дисквалифицирована, лидер пещерного человека (я!) Прокомментирует пост вашей программы и объяснит почему. Если вы не нарушаете никаких правил, ваша программа будет добавлена в список лидеров. (Если вашей программы нет в списке лидеров, в вашем посте нет пояснительного комментария, и вы опубликовали свою программу раньше, чем «Последнее обновление», указанное ниже, сообщите об этом руководителю пещерного человека! Возможно, он забыл об этом.)
В ваш пост, пожалуйста, включите:
- Имя.
- Командная оболочка для запуска программы (напр.
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
И т.д.).- Примечание: вход будет добавлен в качестве аргумента командной строки.
- Пещерные люди используют Ubuntu 14.04, поэтому убедитесь, что ваш код работает (свободно) на нем.
- Номер версии, если ваш код работает по-разному на разных версиях выбранного вами языка.
- Ваш код (очевидно).
- Как скомпилировать код, если это необходимо.
Контроллер кода / тестирование, пример бота
Лидер пещерного человека написал контрольный код на C ++ и разместил его в репозитории Github . Вы можете запустить и протестировать свою программу там.
Очень, очень простая программа (1 строка!) Также размещена в ответах ниже .
Скоринг и таблица лидеров
Забить легко. Какой бы пещерный человек ни победил, он получает очко. Пещерный человек с наибольшим количеством очков после 3 поединков против каждого другого пещерного человека становится новым лидером пещерного человека!
150 Watson
147 SpeculativeSylwester
146 Gruntt
141 BashMagnon
126 ChargerMan
125 PrisonRules
124 ViceLeader
122 MultiMarkov
122 CaveDoctor
120 RegExMan
120 Hodor
117 FancyTechnoAlgorithm
116 Semipatient
113 Watcher
108 BobCaves
105 MinimaxMan
104 Oracle
102 MaybeMarkov
97 Nash
95 Sicillian
95 Feint
95 Basilisk
94 SharpMan
93 Darwin
91 Nigel
91 JavaMan
88 Entertainer
88 CarefulBot
85 CaveMonkey
84 SSBBP
82 SirPokealot
79 MasterPoker
77 Unpredictable
76 IllogicalCaveman
75 SharpenBlockPoke
75 HuddleWolfWithStick
72 WoodenShield
68 PokeBackBot
68 PatientBlacksmith
66 PatientWolf
58 MonteCarloMan
58 BlindFury
56 BinaryCaveman
55 PokeBot
55 CavekidBlocks
53 Swordmaster
53 Blocker
52 NakedEarlyNerd
52 ModestCaveman
50 LatePokeBot
40 Trickster
39 SwordLover
38 ForeignCaveman
36 Swordsmith *
28 Touche
27 WantASword
27 FoolMeOnce
24 PeriodicalCavemanCicada
11 Aichmophobic
(этот список лидеров был сгенерирован автоматически)
Игроки, помеченные *
какой-то ошибкой или исключением, в какой-то момент; эти игроки также имеют комментарии к своим сообщениям.
Игроки , которые не могли быть включены в тесты по какой - либо причине (эти игроки будут иметь комментарий на своих постах , объясняющих проблему): Monkey
, Elephant
, FacileFibonacci
, StudiousSylwester
.
Последнее обновление: 3 августа, 00:15 (UTC).
источник
Ответы:
Дарвин - С
Кому нужна стратегия? Пусть группа пещерных людей встретится, и пусть естественный отбор сделает все остальное!
Мы используем очень простую модель для примитивного мозга нашего пещерного человека: он не имеет памяти и учитывает только остроту его и его оппонента. Они используются в качестве переменных для двоичного полинома некоторого конечного порядка. Каждое действие (блок, резкость и тыкать) имеет связанный многочлен, результат которого определяет относительную вероятность выбора этого действия. Вот и все, что нужно сделать - начать с некоторых случайных коэффициентов и оптимизировать итеративно.
Бот:
Компиляция с:
gcc darwin.c -odarwin -w -O3
. Запуск с:./darwin <history>
.Бот считывает коэффициенты из файла, указанного
program
вplayers/Darwin
каталоге (в качестве второго аргумента командной строки можно указать другой файл). Эта программа, кажется, делает хорошо:Сохранить как
players/Darwin/program
.Ниже приведена программа, которая генерирует
program
файлы, которые могут использоваться ботом (не нужно компилировать, если вы используетеprogram
файл выше):Компиляция с:
gcc genprog.c -ogenprog -w -O3
. Запуск с:./genprog [output-filename]
.Уотсон
Что такое ДНК победившего пещерного человека? Возможно, у этого парня есть ответ:
Бежать с:
python Watson.py
Уотсон является продуктом генетического алгоритма. В отличие от Дарвина, генетическая база данных на этот раз является реальной программой, написанной на крошечном доменно-специфическом языке (здесь переведено на Python).
Простая последовательность бьет крупных игроков
Этот маленький парень делает удивительно (или, может быть, не так удивительно) хорошо, особенно против лидеров:
Бежать с:
python SSBBP.py
источник
players/Darwin
каталоге.undefined reference to `fmax'
. - Редактировать-- Неважно, мне действительно нужно-lm
.Непредсказуемый пещерный человек
Этот пещерный человек выбирает случайным образом каждый раунд, но я объяснил ему очень просто, что некоторые действия иногда не имеют смысла. Не стесняйтесь копировать этот код, если вы хотите выразить другую логику.
Это Ruby, сохраните его как unpredictable.rb и запустите
ruby unpredictable.rb
источник
no 'Block'
должно быть, если у моего противника есть меч.unless
дляno 'Block'
иno 'Poke
'заявления? (no 'Block' unless he.has_pointy_stick
)Пещерный Доктор - Луа
«Я проигрываю новым иностранцам, нокаутирую их изучать»
Когда вы увидели столько пациентов, сколько и пещерного доктора, вы начинаете по-настоящему понимать психику пещерного человека (или я так надеюсь). Игра пещерного доктора - чистая стратегия, он ждет ударов, которые он блокирует в попытке разоружить своего противника, но он не позволит этому противнику приблизиться к изготовлению меча. Он пытается предсказать, когда можно оттачивать, чтобы он не потерял преимущество.
Бежать с:
lua CaveDoctor.lua
источник
ForeignCaveman
ForeignCaveman понятия не имеет, что вы только что сказали. Он просто ... делает вещи.
javac ForeignCaveman.java
тогдаjava ForeignCaveman
источник
Вице-лидер
Дверная ручка ♦ является лидером. Мне хочется быть лидером! Следуйте супер интеллектуальной программе, чтобы стать лидером!
Компиляция:
javac ViceLeader.java
Run:java ViceLeader
.источник
if (enemySharpness <= 4 || mySharpness >= 5)
против==
?Может быть Марков 2.1
Я думаю, что он использует Цепи Маркова, чтобы предсказать, что будет делать другой пещерный человек, но я только кратко посмотрел на страницу Википедии о Цепях Маркова и решил, что в ней слишком много текста.
Он пытается остаться в живых в течение 30 раундов, а затем создает таблицу с текущими изменениями следующего состояния и реагирует на то, что, по его мнению, сделает другой пещерный человек.
Код содержит много ненужных операторов, но он работает довольно хорошо.
РЕДАКТИРОВАТЬ
Обнаружен недостаток в логике. Теперь он действительно что-то делает, когда у него есть меч.
$ python3 players/MaybeMarkov/MaybeMarkov.py
источник
PeriodicalCicadaCaveman
Этот довольно умный пещерный человек изучил некую ошибку и понял, что никто не может изменить свой образ жизни, чтобы воспользоваться преимуществом цикады.
Он прячет / блокирует большую часть своей жизни, но иногда тыкает. Конечно, он уязвим для Мечей и проводит целый цикл с не заостренной палкой, но заточил свою палку, когда она полностью тупая? Это именно то, что другие ожидают от этого ... не эта цикада
скомпилировать: mcs program.cs для запуска mono program.exe
Изменить: изменил резкость - код ... если я ткну, я выиграю, или моя палка станет тупее
Edit2: добавлено в предложении Бобса
Изменить: Изменено только тыкать, когда на 2 резкости, если палка когда-либо на нуле, другой парень может сделать меч.
источник
mcs program.cs
скомпилирует его,mono program
запустит, но вам нужно заменитьfoo.Dump();
s наSystem.Console.WriteLine(foo);
(или добавить метод расширенияpublic static void Dump(this string value) { System.Console.WriteLine(value); }
).mcs
создает<filename>.exe
, напримерprogram.cs
, станетprogram.exe
. Таким образом, команда запуска будетmono program.exe
. (У меня не было доступа к моно во время моего предыдущего комментария.)FancyTechnoAlgorithm
Необычный техно алгоритм для необычной техно компьютерной программы.
Пещерный человек продолжает проигрывать битву. Пещерный человек злится. Так что пещерный человек учится в компьютерной школе учиться делать алгоритм.
Программа Python 2. Бежать:
python fancytechnoalgorithm.py
источник
python StickSharpener.py
).Наблюдатель
Он наблюдает за движениями своего противника, всегда позволяя им показать свою руку, прежде чем он нанесет удар. Он особенно подготовлен для тех, кто пренебрегает мечом.
Имя файла:
watcher.py
Бежать:
python watcher.py
василиск
Стремится уничтожить тех, кто смотрит на него слишком внимательно. Последовательно побеждает наблюдателя, но, вероятно, будет хуже в целом.
Имя файла:
basilisk.py
Бежать:
python basilisk.py
Nash
Стремится сделать выбор своего противника неактуальным, выбирая каждый ход с вероятностью, которая учитывает его риски и выгоды
Это не совсем равновесие Нэша (у моего генератора стратегий есть некоторая нестабильность), но оно близко.
Ради любопытства ниже приведены оценки вероятности победы этого бота в каждом игровом состоянии:
Имя файла:
nash.py
Бежать:
python nash.py
Финт
Открывается быстрой атакой, чтобы проверить защиту противника.
Имя файла:
feint.py
Бежать:
python feint.py
LatePokeBot
Маленький брат PokeBot. Никогда не проявляет слабости, но пытается бороться, как его старший брат.
Имя файла:
latepokebot.py
Бежать:
python latepokebot.py
источник
:
по Василиску; Я исправил это для тебяPokeBot
Написано на Ruby.
Беги с
ruby pokebot.rb
.Этот бот не очень умный; это делает то, что обычный пещерный человек все равно будет делать сам.
источник
PatientWolf v2.0
Точит, если скучно, тыкает, если у врага будет меч на следующем ходу, или если враг скучен, блокирует иначе.
Бежать с
РЕДАКТИРОВАТЬ: спасибо @sylwester за указание на ошибку
источник
PatientWolf.pl SB,SP
делает,P
так как он думает, что у него острая палка.perl patientwolf.pl "SB,SP"
, Вы должны сделатьmy($me,$him) = split/,/ $ARGV[0];
иif( @ARGV ) {print "S";exit}
.Бинарный пещерный человек
Резкость, удар, повторение
Основываясь на идее, что блокировка предназначена для баб, этот пещерный человек чередует два оставшихся варианта.
Компилировать с
javac BinaryCaveman.java
Бежать с
java BinaryCaveman
РЕДАКТИРОВАТЬ: Приключения в строковых массивах ..... args.length () выдает ошибку. args.length всегда возвращает 1. args [0] .length () возвращает длину первой строки в массиве.
РЕДАКТИРОВАТЬ 2: Обновлено благодаря помощи от Doorknob, Brilliand и Sylwester. Спасибо, парни.
источник
P
илиS
делает наоборот. И если истории еще нет, он притворяется, что история будетP,
(что затем побуждает его сделать вS
первую очередь).args[0].length()
, нетargs.length
.CavekidBlocks
Плачущий и напуганный пещерный ребенок может выглядеть как легкая добыча. Не позволяйте его красивому лицу обмануть вас, потому что он знает, как блокировать.
Бежать с
python3 cavekidblocks.py
ChargerMan
Этот пещерный человек очень консервативный. Постараюсь зарядить свое оружие и атаковать только при необходимости.
Бежать с
python3 chargerman.py
обманщик
Трикстер не знает, как бороться, поэтому он пытается сбить с толку другого пещерного человека.
Бежать с
python3 trickster.py
К сожалению, после коммита acc74 Trickster больше не работает, как планировалось.
источник
Hodor
Ходор не очень агрессивен. Он любит оставаться в своем щите, если нет хорошей возможности нанести удар.
скомпилировать с:
javac Hodor.java
и запустить с:java Hodor
код:
Изменить: незначительное обновление кода
источник
SB,BB
. Когда другие пещерные люди плохо себя ведут в первый ход, Ходор тоже плохо себя ведет.Спекулятивный Сильвестр - Perl5
Спекулятивный Сильвестр хочет убить искателей мечей, взглянув на паттерны и ткнув, когда есть шанс, что противник будет обостряться и обостряться, когда противник, скорее всего, будет блокировать. Однако он этого не сделает, если есть вероятность, что он бы догадался, что сам отточится в следующем ходу, и мы еще более осторожны, когда решаем обострить.
Что касается, когда противник тупой, он пытается быть агрессивным, но в конечном счете начнет копить на меч, когда это кажется бесплодным.
Для запуска на Linux просто добавьте это в playerlist.txt:
Facile Fibonacci - схема R6RS
Помимо первого хода, Facile блокирует Фибоначчи, когда на терне есть число Фибоначчи (начиная с 0), и заполняет остаток
PPSS..
и изменяется, когда проходит 8, к бесконечной последовательности,PSS
чтобы выиграть мечом.Для запуска просто установите ikarus
apt-get install ikarus
и добавьте его в playerlist.txt:Studious Sylwester - Perl5
Студийный Сильвестр использует ту же тактику, что и Спекулятивный Сильвестр, но он также просматривает предыдущие игры, чтобы определить, где он мог сделать неправильный выбор.
Для запуска на Linux просто добавьте это в playerlist.txt
Прилежное редактирование
Я не могу воспроизвести проблемы, которые у вас возникли
$0
из-за отсутствия полного пути к скрипту perl, когда он запускается с perl. Я также вытащил ваши изменения и не вижу никаких изменений в CavemanDuels src. Это то же самое, что я выполнял более 20 раз без проблем, о которых вы сообщаете. Я начинаю опасаться, что вы могли бы использовать скрипт как скрипт bash вместо того, чтобы запускать его во время выполнения или в качестве аргумента для perl. Мне нужно больше информации, чтобы знать наверняка. В качестве теста я сделал это, и вы можете сделать то же самое, чтобы увидеть, если вы получите тот же результат:источник
$0
вызываетсяbash
из командной строки bash (что делает контроллер). Вы можете просто жестко закодироватьplayers/StudiousSylwester/foo.txt
.ikarus
и я добавил свои мысли$0
для Studious.мечей
Нужна острая палка. Если есть острая палка, ткните. Я не чувствую боли.
Сохранить как
swordsmith.f90
и компилировать сgfortran -o swordsmith swordsmith.f90
, выполнить , как и любой нормальный исполняемый файл:./swordsmith
.источник
PatientBlacksmith
Этот бот написан на R, используйте
Rscript PatientBlacksmith.R
для его запуска.Измеряет остроту вражеской клюшки: блоки остры, в противном случае требуется время для повышения резкости. Когда собственная резкость достигнет 5, ткните, пока резкость не исчезнет.
источник
Тюремные правила, Хаскелл
Пещерная женщина думает, что пещерный человек и другой пещерный человек должны говорить, делиться палкой. Но, эй, хо, если надо бороться, бороться с тюремными правилами. Найти босса и атаковать.
Вице-лидер Альфа Пещерный человек сейчас; тот, кто пещерный человек должен сражаться. Другие пещерные люди сражаются позже. Если мой пещерный человек проиграет, не волнуйтесь; он слишком волосатый в любом случае.
Написан на Haskell (зайдите в функциональное программирование!), Так что сохраните его как Prisonrules.hs , а затем скомпилируйте с:
И запустить как:
источник
Я называю его JavaMan
примечание: я не собираюсь играть в гольф в коде ... но если вы игрок в гольф, и пробелы / лишние линии заставляют ваши глаза кровоточить ... смело меняйте их
источник
Глубокие Мысли, C
Код пещерного человека. Пещерный человек думаю. Пещерный человек.
Я делаю тестирование. Больше мыслей лучше.
источник
Найджел
Найджел - терпеливый, оборонительный старый пещерный человек, который скорее будет тактичным, чем изо всех сил атакует.
Это скрипт PHP, позвоните с
php nigel.php
источник
Айхмофобия - Луа
Он будет иногда тыкать тебя, но только до тех пор, пока какая-нибудь палка не станет слишком острой. Когда это произойдет, он запаникует и свернется в позу плода.
Запустите это с:
lua aichmophobic.lua
источник
Боб Пещеры
Боб Кейвс - один из самых умных парней в своей пещере. Он научился считать одной рукой (другая занята удерживанием палки). Он знал об этой олимпиаде каменного века и хотел участвовать.
Его основная стратегия - блокировать и оттачивать свою палку, пока у него не появится хорошая острая палка, или у другого пещерного человека тоже есть острая палка. В этом случае Боб Кейвс пытается ткнуть его!
Скомпилировать
javac BobCaves.java
и запустить сjava BobCaves
Изменить: Боб теперь считает, когда есть какой-либо блок! (спасибо Мики Маусу ). Также он заострит свою палку, когда другая палка пещерного человека тупа.
Редактировать 2: Улучшен метод подсчета (еще раз спасибо Мики).
Изменить 3: сделать Боб немного более агрессивным.
источник
Gruntt
Грунт защищается. Грантт анализирует движения других пещерных людей, чтобы понять, как их пнуть. Затем он сует их прямо в глаза. Gruntt не хороший пещерный человек.
Скомпилировать
javac Gruntt.java
и запустить сjava Gruntt
источник
ArrayOutOfBoundsException
первый ход и иногда выдает несколько действий на других ходах.Это птица? Это самолет? Это RegExMan!
Он пытается проанализировать ваши супер-скучные последовательности с его особой первобытной мощью RegEx!
Написан на Python 2.7, работает с
python RegExMan.py [history]
источник
Sicillian
Но это так просто! Все, что мне нужно сделать, это божественное из того, что я знаю о другом пещерном человеке: он тот самый пещерный человек, который будет блокировать, обострять или тыкать? Теперь умный пещерный человек ткнет или заблокирует, потому что он будет знать, что только великий дурак будет точить и подвергать себя нападению. Я не большой дурак, поэтому я не могу четко обострить. Но другой пещерный человек должен знать, что я не великий дурак, и рассчитывал бы на это, поэтому я явно не могу тыкать или блокировать!
Бежать с:
Код:
источник
Баш-магнонное
Баш-магноны были крепко сложены и мощны. Тело в целом было тяжелым и крепким с сильной мускулатурой. Лоб был довольно прямым, а не наклонным, как у неандертальцев, и с небольшими бровями. Лицо было коротким и широким. Подбородок был видным. Объем мозга был около 1600 кубических сантиметров (98 кубических дюймов), что больше, чем в среднем для современного человека. Однако недавние исследования показывают, что физические размеры так называемого «Баш-Магнона» не достаточно отличаются от современных людей, чтобы оправдать отдельное обозначение.
У меня есть мозг, я помню.
Это исполняемый файл
./bash-magnon.sh
источник
PokeBackBot
Просто адаптировано из PokeBot:
Беги с
ruby pokebackbot.rb
.Это использует следующую простейшую стратегию и блокирует «терпеливо» на один раунд перед атакой.
источник
SPS
превзойдет любого бота, который начинается с (что кажется разумным), но пока PokeBot был единственным из них.Мастер меча
Написан на Python 3.4 (работает с Python 3.x)
Пытается получить меч как можно быстрее, но атакует, если у него есть шанс поразить его (острота> 0), и враг может нанести ему тоже вред (острота противника> 0).
Блокирует только если не имеет резкости и враг может атаковать.
Начните с:
(предполагается, что вы сохраните его как
swordmaster.py
)Быстрый и некрасивый код:
(Установите
dg
дляTrue
включения отладочных сообщений)источник
S
,P
,S
,P
...FoolMeOnce.py
Сохраните ходы каждого игрока для первого поединка, затем переиграйте точно такие же ходы. Если алгоритм противника неслучайный, мы можем предсказать тот же результат и нанести удар только тогда, когда мы знаем, что мы победим.
Написан на python 3, поэтому, скорее всего, вам придется использовать python3 FoolMeOnce.py. В первом раунде я не уверен, получим ли мы пустую строку или просто запятую, поэтому могут потребоваться некоторые настройки.
источник