Desafio
Escreva um programa / função que aceite uma "imagem" e produza um labirinto de figuras formado a partir dessa imagem.
Entrada
Seu programa deve aceitar dois argumentos:
- Eu, a imagem para formar o labirinto de
- S, um booleano que especifica se deve ou não exibir a solução para o labirinto
Eu recebo da seguinte forma:
.......
.#####.
.#####.
#######
.#####.
.#####.
.......
onde #
são células a serem incluídas no caminho da solução e .
são células a serem excluídas. Você pode trocar os .
', #
' e novas linhas com qualquer caractere de sua escolha, desde que sejam diferentes um do outro. Como alternativa, você pode aceitar um bitmap real da imagem de entrada.
Saída
Seu labirinto resultante deve estar da seguinte forma:
###############
# #
# ### ####### #
# #.........# #
# #.#######.# #
# #.#.......# #
###.#.#########
....#.#........
#####.#.#######
# ...#..... #
# #.#######.# #
# #.........# #
# ####### ### #
# # # #
###############
onde #
denotam paredes, .
denotam partes do caminho que fazem parte da solução e espaços são caminhos excluídos da solução. Os .
podem ser substituídos por espaços se S for falso. Novamente, os caracteres podem ser trocados por outros de sua escolha ou você pode gerar um bitmap real do labirinto com a solução destacada.
detalhes adicionais
- Os caminhos devem ter uma célula de largura (não pode haver um pool gigante de espaço vazio como o caminho)
- O labirinto não deve conter nenhum laço
- O labirinto deve estar totalmente conectado (todas as células devem estar acessíveis a partir da entrada / saída)
- O labirinto deve ser cercado por paredes (a menos que seja uma entrada / saída)
- O caminho da solução não deve incluir becos sem saída
- Deve haver exatamente 1 entrada e 1 saída para o labirinto
- A entrada e a saída devem estar alinhadas com a borda da grade e adjacentes a uma célula incluída no caminho da solução
- Você pode escolher onde a entrada e a saída são colocadas
- Você pode assumir que um caminho válido pode ser formado a partir da imagem de entrada fornecida
(Adicionado para esclarecimento) O diagrama abaixo mostra como o caminho da solução está correlacionado à imagem de entrada:
Input (I): | Output: | Corresponding Cells:
| | (@'s denote #'s from I)
| |
....... | ############### | ###############
.#####. | # # | # #
.#####. | # ### ####### # | # ### ####### #
####### | # #.........# # | # #@.@.@.@.@# #
.#####. | # #.#######.# # | # #.#######.# #
.#####. | # #.#.......# # | # #@#@.@.@.@# #
....... | ###.#.######### | ###.#.#########
| ....#.#........ | .@.@#@#@.@.@.@.
| #####.#.####### | #####.#.#######
| # ...#..... # | # @.@#@.@.@ #
| # #.#######.# # | # #.#######.# #
| # #.........# # | # #@.@.@.@.@# #
| # ####### ### # | # ####### ### #
| # # # # | # # # #
| ############### | ###############
| |
Casos de teste
Exemplo de regador da Wikipedia :
Entrada:
..................
..................
.......####.......
......##..##......
.....##....##....#
.....#......#...##
.#############.##.
##..############..
#...###########...
#...##########....
#...##########....
#...##########....
#...##########....
....##########....
....##########....
....##########....
..................
..................
Saída (S = false):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # # # # # # #
# # # ### ##### # ### ### # ### ### #
# # # # # # # # # # # # #
# ### # ##### ##### ### ##### # # ###
# # # # # # # # #
### ####### ### ### # ### ##### ### #
# # # # # # # # # # #
# ### ##### # ### ####### # # # # # #
# # # # # # # #
# # ##### ############# ### ### ### #
# # # # # # # # # #
# ### # ####### # ### ### # # ### # #
# # # # # # # # # #
# # # ### ######### # # ##### # #####
# # # # # # # # # # # #
# ##### # # ##### # ##### # # ### # #
# # # # # # # # # # #
# ### ### ### # ### # ##### ####### #
# # # # # # # # # #
# # # # ####### # ### # ##### # ### #
# # # # # # # # # # #
### # # # # # ############# # ### # #
# # # # # # # # # # #
##### # # ##### ####### # ### ##### #
# # # # # # # # #
##### # # # # ####### # ### #########
# # # # # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Saída (S = verdadeiro):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # #....... # # # # #
# # # ### #####.# ###.### # ### ### #
# # # # #...# # #...# # # # #
# ### # #####.##### ###.##### # # ###
# # # ...# # #... # # #..
### #######.### ### # ###.##### ###.#
# # #.# # # #.# # #...#
# ### #####.# ### #######.# # # #.# #
# #.......#.............#...# #...# #
# #.#####.#############.###.###.### #
#...# #.......#.....#...#.#...# # #
#.### # #######.#.###.###.#.#.### # #
#.# # # .......#...#.#...#...# #
#.# # ###.#########.#.#.##### # #####
#.# # #.#.......#.#...#...# # # #
#.##### #.#.#####.#.#####.#.# ### # #
#. #.#...#...#.#.....#.# # # #
#.### ###.###.#.###.#.#####.####### #
#. # # #.....#.#...#.#..... # #
#.# # # #######.#.###.#.##### # ### #
..# # # #...#...#.....#.....# # # #
### # # #.#.#.#############.# ### # #
# # # #.#...#.........#...# # # #
##### # #.#####.#######.#.### ##### #
# # #.#...#.......#.#...# #
##### # #.#.#.#######.#.###.#########
# # ...#.........#..... # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Exemplo de bitmap (mesmo labirinto que acima):