С учетом доски напишите самую короткую программу или функцию для отображения или возврата символов, которые видны игроку. Персонаж находится в поле зрения, если можно провести черту между ним и игроком, не пересекая персонажей, которые мешают зрению.
Входные данные:
@
представляет позицию игрока. На входе будет только один из них.- любой персонаж, который соответствует регулярному выражению,
[#A-Z]
блокирует зрение. - любой персонаж, который соответствует,
[ a-z]
позволяет зрение. - не будет недопустимых символов
- вам гарантирован прямоугольный ввод
Линии определены следующим образом:
- определить вектор, чтобы быть величиной и направлением
- направление одно из N, NE, E, SE, S, SW, W, NW
- величина - это количество символов в этом направлении для подсчета
- пусть начальный вектор называется d 1 ; второй вектор будет называться d 2
- один из d 1 или d 2 должен иметь величину
1
; другой может иметь любую величину - Направление d 1 должно быть смежным с направлением d 2 (например, N и NE)
Линия определена, чтобы быть всеми символами вдоль пути, отмеченного применением d 1 , затем d 2 , d 1 , d 2 ....
Линия выборки (задается с помощью .
s):
d 1 = (величина: 4, направление: E)
d 2 = (величина: 1, направление NE)
.....
.....
.....
@....
Выход:
- каждый видимый символ в правильной позиции,
.
заменяет пробел. - Место для каждого невидимого символа.
Пример ввода:
@
K
J
L
o
Соответствующий вывод:
@.........
....K.....
.J.....
..........
.. .L.....
.. . ....
... .. ...
... .. ..
... . .
.... ..
Пример ввода:
B###M# by
#Q # Zmpq
# # aaa
@ m #
# ##P#
# ####
# ####
#M ###
######
Соответствующий вывод:
.B #M
.# .. Z pq
.#.#.aaa..
@..m.#
#.##P#
.#
.#
M.
#
Пример ввода:
w
O l gg rT
QQL Ag #b
qqqqq XqQ
x V# f@aa
Y aaa
uU E l TaKK
e dd FF d opi
e d
Соответствующий вывод:
.......... .....
......... .....
O..l...gg..rT
...QQL......Ag..#b..
...qqqqq.........XqQ
#.f@aa......
Y........aaa.....
...uU..E..l.TaKK....
d..FF.d.op
.... .d. ...
Ответы:
GolfScript, 171 символов
Ввод должен быть предоставлен на STDIN.
Выходные данные для приведенных выше примеров немного отличаются. Я проверил ответы от руки и думаю, что они правильные.
Пример 1:
Пример 2:
Пример 3:
источник
n+
код.Рубин - 510 символов
Совсем мамонт; но это моя первая попытка в гольфе.
Ввод осуществляется с помощью файла, указанного в качестве аргумента; Я предполагаю, что входной файл состоит из прямоугольного блока символов (то есть, включая конечные пробелы) и содержит завершающий символ новой строки.
Эта версия широко используется
catch-throw
для выхода из глубоких петель; Вместо этого я могу улучшить положение с помощью проверенных границ.Необъяснимый код:
редактировать
Илмари Каронен отмечает в комментариях к вопросу, что данный алгоритм видения не видит все квадраты, даже когда нет препятствий. Вот демонстрация этого, до (40,40) от игрока.
источник
XqQ
. Тем не менее, ваш ответ на 3 не соответствует тестовому сценарию - в нем по крайней мере есть дополнительная строка вверху и только один пробел междуO
иl
.