Entonces, aquí hay un mapa de, digamos, un calabozo ...
##########
# #####
# #####
##########
##########
##########
##########
#### ##
#### ##
##########
Digamos que el héroe está en la Sala A (arriba a la izquierda) y su objetivo (¿un príncipe en apuros?) Está en la Sala B (abajo a la derecha). Nuestro mapa no permite que el héroe avance hacia su objetivo.
Necesitamos agregar un pasaje ...
##########
# #####
# #####
####.#####
####.#####
####.#####
####.#####
#### ##
#### ##
##########
Ahí, mucho mejor!
Reglas
- Un programa o función que acepta un mapa de mazmorra (compuesto de hashes y espacios, con filas separadas por nuevos caracteres de línea).
- Producirá un mapa con puntos agregados para denotar pasajes en todos los espacios que están en una ruta directa entre los caracteres del espacio.
- No cambiará la longitud de la línea o el número de líneas.
- Los pasajes están todos en línea directa de espacios a espacios.
- Los pasajes no pueden doblar esquinas
- No estarán entre espacios y el borde del mapa.
- Usa cualquier idioma.
- Intente realizar la conversión en la menor cantidad de bytes.
- Si no se pueden dibujar pasillos, devuelva el mapa, sin cambios.
- El mapa siempre debe tener hash alrededor de todos los bordes (no es necesario que maneje espacios en el borde)
- Los mapas de entrada son siempre rectangulares, cada fila debe tener el mismo ancho.
Casos de prueba
#### ####
# # => # #
# # # #
#### ####
########## ##########
# ##### # #####
# ##### # #####
########## ####.#####
########## => ####.#####
########## ####.#####
########## ####.#####
#### ## #### ##
#### ## #### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ##########
########## => ##########
########## ##########
########## ##########
###### ## ###### ##
###### ## ###### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ####.#####
########## => ####.#####
#### ### #### ###
########## ######.###
###### ## ###### ##
###### ## ###### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ##..######
########## => ##..######
########## ##..######
########## ##..######
## ####### ## .######
## ###### ## ######
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## #.########
########## => #.########
########## #.########
####### # #.##### #
####### # #.##### #
# ##### # # ..... #
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## #.########
##### ### => #.### ###
##### ### #.### ###
####### # #.##### #
####### # #.##### #
# ##### # # ..... #
########## ##########
########## ##########
## # ## #
########## ##......##
########## ##......##
########## => ##......##
########## ##......##
########## ##......##
########## ##......##
# ## # ##
########## ##########
########## ##########
#### #### #### ####
####### ## ####..# ##
###### ### ####.. ###
# ### ## # => # ... .. #
# ## ### # # .. ... #
### ###### ### ..####
## ####### ## #..####
#### #### #### ####
########## ##########
#
y.
?Respuestas:
Jalea , 17 bytes
Pruébalo en línea!
Tricky -1 gracias a user202729 .
Explicación:
fuente
Perl 5
-p0
, 56 bytesPruébalo en línea!
fuente
APL + WIN, 87 bytes
Solicitudes de matriz de caracteres:
fuente
Haskell ,
209165162 bytes.Pruébalo en línea!
No es la forma más eficiente de hacerlo en Haskell, estoy seguro.
Tiene demasiados paréntesis para mi gusto, pero ya no estoy seguro de cómo eliminarlos.fuente
$
(se(k(take 2 c))
convierte(k$take 2 c)
). También puede usar en!!0
lugar dehead
en algunos casos.(k(take 2 c))
que solo pueda eliminar los paréntesis externos, no son necesarios. Pero en el caso dedrop(length(head d))
que aún pueda usar el$
, reemplazándolo condrop(length$head d)
(e inclusodrop(length$d!!0)
).k
lugar de++
puede reducir considerablemente la última línea.k[' '<$k(take 2 c),'.'<$d!!0,drop(length$d!!0)$f$k$d]
.f b|(e:g:d@(h:_:_))<-group b=k[' '<$e++g,'.'<$h,drop(length h)$f$k d]|1>0=' '<$b
, esto utiliza una coincidencia de patrones para hacer gran parte del trabajo pesado que se estaba haciendo antes.Python 2 ,
173148 bytesPruébalo en línea!
fuente
Retina 0.8.2 , 95 bytes
Pruébalo en línea! Explicación:
Esto busca
#
signos que están por encima de los espacios o.
sy los convierte en puntos hasta que no quede ninguno. El lookbehind encuentra la#
columna 's y luego el lookahead salta a la siguiente línea y atómicamente a la misma columna de abajo para que el espacio o.
solo pueda coincidir si está exactamente debajo del#
.Esto busca
.
s que no están debajo de espacios o.
sy los convierte de nuevo en#
s hasta que no quede ninguno. El lookahead encuentra la.
columna de s y luego el lookbehind salta a la línea anterior y atómicamente a la misma columna de arriba de la misma manera, de modo que el espacio o.
solo puede coincidir si está exactamente por encima de#
. Se utiliza una mirada hacia atrás negativa para que esto también funcione para.
s en la fila superior.(Observe el espacio final en ambas líneas) Esto simplemente busca todas las ejecuciones de caracteres que no sean espacios en blanco entre espacios y asegura que todos sean
.
s.fuente
Ruby , 104 bytes
Pruébalo en línea!
Bueno, no es genial, pero al menos es complicado. Estoy seguro de que se puede mejorar.
fuente
Stax , 19 bytes
Ejecutar y depurarlo
fuente
JavaScript (Node.js) ,
205193190186181175172 bytesPruébalo en línea!
Comentado
fuente