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!!0lugar deheaden 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)).klugar 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