Dado un tablero, escriba el programa o la función más corta para mostrar o devolver qué personajes están a la vista del jugador. Un personaje está a la vista si es posible dibujar una línea entre él y el jugador, sin cruzar ningún personaje que bloquee la visión.
Entrada:
@representa la posición del jugador. Solo habrá uno de estos en la entrada.- cualquier personaje que coincida con la expresión regular
[#A-Z]bloquea la visión. - cualquier personaje que coincida
[ a-z]permite la visión. - no habrá caracteres inválidos
- tiene garantizada una entrada rectangular
Las líneas se definen de la siguiente manera:
- definir vector para ser una magnitud y una dirección
- una dirección es una de N, NE, E, SE, S, SW, W, NW
- una magnitud es cuántos caracteres a lo largo de esa dirección para contar
- dejemos que el vector inicial se llame d 1 ; el segundo vector se llamará d 2
- uno de d 1 o d 2 debe tener una magnitud de
1; el otro puede tener cualquier magnitud - La dirección de d 1 debe ser adyacente a la dirección de d 2 (p. ej .: N y NE)
Una línea se define como todos los caracteres a lo largo de la ruta marcada aplicando d 1 , luego d 2 , d 1 , d 2 ...
Línea de muestra (dada por la .s):
d 1 = (magnitud: 4, dirección: E)
d 2 = (magnitud: 1, dirección NE)
.....
.....
.....
@....
Salida:
- cada personaje visible en la posición correcta,
.sustituye al espacio. - Espacio para cada personaje no visible.
Entrada de muestra:
@
K
J
L
o
Salida correspondiente:
@.........
....K.....
.J.....
..........
.. .L.....
.. . ....
... .. ...
... .. ..
... . .
.... ..
Entrada de muestra:
B###M# by
#Q # Zmpq
# # aaa
@ m #
# ##P#
# ####
# ####
#M ###
######
Salida correspondiente:
.B #M
.# .. Z pq
.#.#.aaa..
@..m.#
#.##P#
.#
.#
M.
#
Entrada de muestra:
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
Salida correspondiente:
.......... .....
......... .....
O..l...gg..rT
...QQL......Ag..#b..
...qqqqq.........XqQ
#.f@aa......
Y........aaa.....
...uU..E..l.TaKK....
d..FF.d.op
.... .d. ...