Как мы узнали из IBM PC AT, YouTube (см. Видео) , Википедии (см. Статью) и Улицы Сезам:
Письмо H
является самой беспощадной буквой алфавита !
(Даже если на самом деле он состоит из двух элементов в кодовой странице 437. На самом деле, это даже БОЛЬШЕ беспощадно.)
Как инопланетяне в ... э-э ... инопланетянах , звери безжалостно преследуют всех, кто осмелится приблизиться к своим яйцам. Там нет рассуждений с ними. Вы должны раздавить их, если не погибнуть.
В этом сценарии мы предполагаем, что вы дошли до своей последней жизни, и вы встретили простых животных в местности без яиц (как на скриншоте Википедии). У вас нет цифровой клавиатуры, и вы можете двигаться только вверх / вниз / влево / вправо ... но звери, очевидно, имеют такую клавиатуру и могут перемещаться по диагонали в свой ход.
Ход движения Зверя среди его вариантов будет тот, который минимизирует расстояние от игрока. Если расстояния равны, то разрыв связи делается в пользу слева + вверх по сравнению справа + вниз, но вот матрица устранения неоднозначности, которая должна быть в явной форме ... наименьшее число для прерывания связи:
1 3 4
2 H 5
6 8 7
Зверь никогда не спит, но, к счастью, он немного медленнее, чем игрок. Они двигаются каждый второй ход (давая игроку преимущество, начиная чередование со второго хода). Они должны двигаться, если ход возможен, независимо от того, отводит ли он их от игрока.
Вы раздавите зверя, если вы двигаете поезд из подвижных стен, где он сидел в закрытой щели. Эти простые звери стоят 2 очка за голову.
вход
Пара целых чисел, указывающая размер карты в столбцах, а затем в строках.
Количество строк ввода, каждая из которых имеет размер столбца ... содержит либо сплошную стену (
#
), подвижную стену (~
), зверя (H
), игрока (O
) или просто пробел.Ввод будет U, D, L, R, указывающий на попытку игрока сделать ход ... или W, чтобы просто подождать. Обратите внимание, что попытка толкнуть подвижную стену, которая заблокирована, является законным вводом, это просто не приведет к каким-либо действиям.
Выход
aHHHH!
если звери убили игрока ... или ничего, если игрок выиграл без оставшихся зверейРезультат
(Примечание: для целей отладки и / или развлечения вы, вероятно, захотите выводить состояние на каждом шаге; но это слишком долго для публикации здесь.)
Разъяснения
Карты гарантированно ограничены сплошными стенами.
Порядок того, кто движется в очереди, имеет значение для результата. Таким образом: игрок всегда идет первым, затем звери получают порядок, основанный на их начальной позиции на карте, если вы перемещаетесь по экрану сверху вниз слева направо. (Зверь 1-й строки движется перед зверьком 2-й строки, и два зверя в одном ряду - это будет тот, чей номер столбца наименьший, который будет двигаться раньше другого)
По диагонали движущиеся звери могут перемещаться в любое открытое смежное диагональное пространство, независимо от того, требует ли оно сжатия между стенами.
Игрок может протолкнуть любое количество подвижных стен в линию при условии, что на другом конце есть место или зверь. Но попытка протолкнуть череду стен в Зверя, который не закреплен между стенами, рассматривает Зверя как стену и не позволяет двигаться.
Решение о движении Зверя во время хода зависит от местоположения игрока в начале хода. Его желаемая оптимизация «расстояния до игрока» - это расчет «по прямой линии». Любое приближение, которое дало бы тот же самый результат, который измерен от центра его квадрата до центра квадрата игрока, хорошо.
Если Зверь не может сделать то, что было бы его первым предпочтительным ходом в ход, потому что Зверь с более высоким приоритетом занял свое место, он выберет следующий лучший выбор, а не останется на месте (если ход все еще возможен).
Примеры случаев
Простое раздавить
вход
5 3
#####
#O~H#
#####
R
Выход
2
Матрица предпочтений -> Смерть
вход
5 5
#####
#O #
# ~ #
# H#
#####
WWDW
Выход
aHHHH!
0
Матрица предпочтений -> Победа
вход
5 5
#####
#O #
# ~ #
# H#
#####
WRD
Выход
2
В ожидании жнеца
вход
5 5
#####
#O #
# ~ #
# H#
#####
WWW
Выход
aHHHH!
0
Успешное поражение в сценарии Википедии
вход
40 23
########################################
#~ ~ ~~ ~ ~ ~~ ~ ~~ ~ ~ ~~ #
#~~ ~ ~~ ~ ~ ~~ ~ #
#~# ~~ ~~~~ ~ ~~~~ ~ ~~~ ~#
# ~ ~ ~ ~~ #~~ ~ #
#~~ ~~~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~~~ H ~ #~ #
# O~ ~ # ~~~ ~ ~ ~~ ~ ~ ~~ #
# ~ ~H~~ ~~ ~ # ~~ ~ #
# ~~ ~ ~~~ ~~ ~~~~ ~ ~#
#~ ~ ~~~ ~ ~ ~ ~ ~~ ~~#
# ~ # ~ ~~ ~~~ ~ ~ ~ # ~#
#~ ~ ~~ ~ ~ H ~~ ~~ ~ ~ ~~~ #
# ~ ~ ~ ~ ~ ~~~ ~ #
# ~~ ~ ~ ~~ ~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~ ~~ #
#~ ~ # ~~~~ ~ ~~~H # ~ #
# ~ ~ ~ ~ ~ ~~ ~ #
# ~ ~ #~ ~ ~~ ~ ~ ~#
# ~~ ~ ~ ~~ ~ ~ #
# ~~~ ~ ~~ ~ ~ ~ ~ #
# ~ ~ ~ ~~ ~ ~ ~ #
########################################
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
Выход
8
Карта предоставлена мной, перемещается и выводится @bobbel, подтверждается мной и @Allbeert.
Критерии победы
Я думаю, что это игра в гольф, поэтому я буду придерживаться правил гольфа, если люди не будут жаловаться.
Дополнительный кредит
Воспроизводимая реализация Unicode с двойными широкими символами, напоминающими изображение!
Ответы:
Perl 6: 741 символов, 758 байтов
Гольф версия находится внизу, так как это в основном льнуаз. Над ним моя предварительная версия для игры в гольф. Оба являются интерактивными (они будут читать столько команд из входного файла, сколько смогут, а затем перейдут к использованию STDIN для получения команд). Они стараются использовать оригинальные символы и цвета.
Использование как
perl6 beast.p6 beast-input
:Версия для гольфа:
Христос воскрес!
источник
Ява, 1843
Моя первая попытка решить эту загадку с помощью Java. Я знаю, что есть много улучшений, чтобы сделать его короче. Но, в конце концов, это работает на данный момент.
Чтобы попробовать это, вы должны создать класс
C
и вставить код.args[0]
(строго говоряa[0]
) для ввода. Метод печати карты не включен, так как он не нужен для вывода головоломки.Чтобы запустить его, попробуйте, например:
Вывод последнего большого сценария за ход до того, как зверь съест игрока:
Без пробелов: http://pastebin.com/raw.php?i=QhpxKcCT
Таким образом, путь игроков заканчивается после ходов
RRDDDRRRWW
, потому что во время последнегоW
удара зверь слева уйдет направо, чтобы съесть игрока.Еще один пример оригинальной большой карты, но с разными ходами:
http://pastebin.com/raw.php?i=nBWjC3PZ
Смотрите эту анимацию: http://youtu.be/0DIhEhjWd6s
И последний пример с оригинальной картой и различными ходами (согласно новым правилам движения зверя):
http://pastebin.com/raw.php?i=NNmgzx7U
Смотрите на YouTube: http://youtu.be/jXPzL88TU2A
источник
С -
1004984917Ааа, красота C. Следуя духу другого ответа, я попытался отформатировать и мой :)
Я предполагаю, что есть кое-какие улучшения здесь и там, но это было действительно весело писать и играть в гольф. Количество символов включает все необходимые пробелы и новые строки.
Я проверил это на всех примерах и еще нескольких, и похоже, что он работает правильно. Если кто-нибудь найдет ситуацию, в которой он не отвечает должным образом, пожалуйста, дайте мне знать.
Вход от stdin и выход для stdout. Там нет проверок на неправильный ввод. И это возвращает счет, если игрок съеден, или если игрок жив после того, как все движения выполнены (даже если вокруг все еще есть
H
).Безголовая версия:
источник
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
на большой карте вы получаете 6, а он - 8. Он сделал видео , вы, возможно, могли бы распечатать каждый шаг и найти любую аномалию ...