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. ...
Respuestas:
GolfScript, 171 caracteres
La entrada debe proporcionarse en STDIN.
El resultado de los ejemplos dados anteriormente es ligeramente diferente. Verifiqué las respuestas a mano y creo que son correctas.
Ejemplo 1:
Ejemplo 2
Ejemplo 3
fuente
n+
el código.Ruby - 510 caracteres
Todo un mamut; pero es mi primer intento en un golf.
La entrada es por archivo especificado como argumento; Supongo que el archivo de entrada consta de un bloque rectangular de caracteres (incluidos los espacios finales incluidos) y que tiene una nueva línea final.
Esta versión hace un amplio uso de
catch-throw
para salir de bucles profundos; Posiblemente pueda mejorar las cosas con los bucles de verificación de límites.Código no ofuscado:
Editar
Ilmari Karonen señala en los comentarios de la pregunta que el algoritmo de visión dado no ve todos los cuadrados, incluso cuando no hay obstáculo. Aquí hay una demostración de eso, a (40,40) de distancia del jugador.
fuente
XqQ
. Dicho esto, su respuesta dada para 3 no coincide en absoluto con el caso de prueba, al menos tiene una línea adicional en la parte superior y solo un espacio entre elO
yl
.