Ваша программа должна принимать многострочную строку, например так:
#############
# #
# p #
# #
#############
p
является игроком и #
является блоком.
Теперь под этим в терминале должна быть строка ввода, гласящая:
How do you want to move?
Если игрок печатает, l
он должен идти влево, когда нет блока, иначе, когда есть блок, он не может пройти и, конечно, не двигается, теперь выход в терминале должен быть обновлен ( и предыдущий вывод очищен / перезаписан):
#############
# #
# p #
# #
#############
Он может печатать l
слева, r
справа, u
вверх и d
вниз.
Ввод всегда будет многострочным, но не всегда будет дополняться пробелами в идеальный прямоугольник. Кроме того, хэши могут находиться в любом месте строки и не всегда будут связаны друг с другом. Например:
## ##
# #
## p
#
это действительное подземелье. (обратите внимание на отсутствие пробелов в каждой строке)
Если игрок выходит за пределы строки, он не должен отображаться. Но если он вернется позже, он должен появиться снова.
И границы «за пределами» строки являются length(longest_line)
по number_of_lines
прямоугольнику, так что даже если одна строка не дополняется пробелами справа, что место не рассматривается вне границ. Пример использования более ранней темницы:
## ##
# #p
##
#
Во второй строке не было пробела, где сейчас p, но это не имеет значения.
Наконец, ваша программа должна зацикливаться на вечность, принимая ввод.
Контрольные примеры
Тестовый пример 1:
####
# p#
#
####
How do you want to move?
d
####
# #
# p
####
Контрольный пример 2:
####
p#
#
####
How do you want to move?
l
####
p #
#
####
How do you want to move?
d
####
#
p #
####
How do you want to move?
l
####
#
p #
####
How do you want to move?
l
####
#
#
####
How do you want to move?
r
####
#
p #
####
Конечно, они не завершены. Ваш код должен зацикливаться вечно и очищать экран между каждым выходом .
Ваш вывод может запрашивать ввод как How do you want to move?\n<input>
или How do you want to move?<input>
(т.е. вам не нужно вводить пустую строку), и вам не нужна пустая строка между последней строкой подземелья и подсказкой. (однако они не могут быть на одной линии)
Стандартные лазейки запрещены! Это код-гольф, поэтому выигрывает самый короткий код в байтах!
l
,r
,u
, илиd
) может быть что угодно, а не только «Как вы хотите переместить»? Это на самом деле не влияет на ответы, кроме гольфистости.Ответы:
MATLAB,
268247246 байтНаверное, неконкурентоспособен, но это было весело. Гольф версия:
Читаемая версия:
Эти
try
блоки , чтобы предотвратить функцию от аварии на вне границ ошибок. Я уверен, что двое из них излишни, но я не могу сыграть вничью лучше, чем это.Стоит отметить, что MATLAB расширит массив вниз и вправо, но игрок исчезнет при переходе в «неизведанную» область в первый раз. Например, если вы переместитесь за пределы текущих границ подземелья на одну позицию справа, вы исчезнете, но в следующий ход MATLAB расширит массив, включив в него новый столбец (или строку, если вы двигаетесь вниз).
'#'==d(y,x)
сохраняет байт по сравнению сd(y,x)=='#'
, так как вам не нужно пространство междуif
и'#'
источник
Coffee-скрипт: 580 байт
Я выжал все, что мог из этого конкретного алгоритма и моего усталого мозга. Мне нужен выходной.
источник