Desafío
Escriba un programa / función que acepte una "imagen" y genere un laberinto de imágenes formado a partir de esa imagen.
Entrada
Su programa debe aceptar dos argumentos:
- Yo, la imagen para formar el laberinto
- S, un booleano que especifica si se muestra o no la solución al laberinto
Me dan de la siguiente forma:
.......
.#####.
.#####.
#######
.#####.
.#####.
.......
donde #
's son células que se incluirán en la ruta de la solución y .
' s son células que se excluirán. Puede intercambiar las .
's #
' y las nuevas líneas con cualquier carácter de su elección siempre que difieran entre sí. Alternativamente, puede aceptar un mapa de bits real de la imagen de entrada.
Salida
Su laberinto resultante debe estar en la siguiente forma:
###############
# #
# ### ####### #
# #.........# #
# #.#######.# #
# #.#.......# #
###.#.#########
....#.#........
#####.#.#######
# ...#..... #
# #.#######.# #
# #.........# #
# ####### ### #
# # # #
###############
donde #
denotan paredes, .
denotan porciones del camino que forman parte de la solución y los espacios son caminos excluidos de la solución. El .
's puede ser reemplazado por espacios si S es falso. Nuevamente, los caracteres pueden intercambiarse con otros caracteres de su elección o puede generar un mapa de bits real del laberinto con la solución resaltada.
Detalles adicionales
- Las rutas deben tener una celda de ancho (no puede tener un grupo gigante de espacio vacío como ruta)
- El laberinto no debe contener ningún bucle.
- El laberinto debe estar completamente conectado (todas las celdas deben ser accesibles desde la entrada / salida)
- El laberinto debe estar rodeado de paredes (a menos que sea una entrada / salida)
- La ruta de la solución no debe incluir callejones sin salida
- Debe haber exactamente 1 entrada y 1 salida para el laberinto
- La entrada y la salida deben estar alineadas con el borde de la cuadrícula y adyacentes a una celda incluida en la ruta de la solución.
- Puedes elegir dónde se colocan la entrada y la salida
- Puede suponer que se puede formar una ruta válida a partir de la imagen de entrada dada
(Añadido para aclaración) El siguiente diagrama muestra cómo se correlaciona la ruta de la solución con la imagen de entrada:
Input (I): | Output: | Corresponding Cells:
| | (@'s denote #'s from I)
| |
....... | ############### | ###############
.#####. | # # | # #
.#####. | # ### ####### # | # ### ####### #
####### | # #.........# # | # #@.@.@.@.@# #
.#####. | # #.#######.# # | # #.#######.# #
.#####. | # #.#.......# # | # #@#@.@.@.@# #
....... | ###.#.######### | ###.#.#########
| ....#.#........ | .@.@#@#@.@.@.@.
| #####.#.####### | #####.#.#######
| # ...#..... # | # @.@#@.@.@ #
| # #.#######.# # | # #.#######.# #
| # #.........# # | # #@.@.@.@.@# #
| # ####### ### # | # ####### ### #
| # # # # | # # # #
| ############### | ###############
| |
Casos de prueba
Ejemplo de regadera de Wikipedia :
Entrada:
..................
..................
.......####.......
......##..##......
.....##....##....#
.....#......#...##
.#############.##.
##..############..
#...###########...
#...##########....
#...##########....
#...##########....
#...##########....
....##########....
....##########....
....##########....
..................
..................
Salida (S = falso):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # # # # # # #
# # # ### ##### # ### ### # ### ### #
# # # # # # # # # # # # #
# ### # ##### ##### ### ##### # # ###
# # # # # # # # #
### ####### ### ### # ### ##### ### #
# # # # # # # # # # #
# ### ##### # ### ####### # # # # # #
# # # # # # # #
# # ##### ############# ### ### ### #
# # # # # # # # # #
# ### # ####### # ### ### # # ### # #
# # # # # # # # # #
# # # ### ######### # # ##### # #####
# # # # # # # # # # # #
# ##### # # ##### # ##### # # ### # #
# # # # # # # # # # #
# ### ### ### # ### # ##### ####### #
# # # # # # # # # #
# # # # ####### # ### # ##### # ### #
# # # # # # # # # # #
### # # # # # ############# # ### # #
# # # # # # # # # # #
##### # # ##### ####### # ### ##### #
# # # # # # # # #
##### # # # # ####### # ### #########
# # # # # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Salida (S = verdadero):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # #....... # # # # #
# # # ### #####.# ###.### # ### ### #
# # # # #...# # #...# # # # #
# ### # #####.##### ###.##### # # ###
# # # ...# # #... # # #..
### #######.### ### # ###.##### ###.#
# # #.# # # #.# # #...#
# ### #####.# ### #######.# # # #.# #
# #.......#.............#...# #...# #
# #.#####.#############.###.###.### #
#...# #.......#.....#...#.#...# # #
#.### # #######.#.###.###.#.#.### # #
#.# # # .......#...#.#...#...# #
#.# # ###.#########.#.#.##### # #####
#.# # #.#.......#.#...#...# # # #
#.##### #.#.#####.#.#####.#.# ### # #
#. #.#...#...#.#.....#.# # # #
#.### ###.###.#.###.#.#####.####### #
#. # # #.....#.#...#.#..... # #
#.# # # #######.#.###.#.##### # ### #
..# # # #...#...#.....#.....# # # #
### # # #.#.#.#############.# ### # #
# # # #.#...#.........#...# # # #
##### # #.#####.#######.#.### ##### #
# # #.#...#.......#.#...# #
##### # #.#.#.#######.#.###.#########
# # ...#.........#..... # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Ejemplo de mapa de bits (el mismo laberinto que el anterior):