Défi
Écrivez un programme / une fonction qui accepte une "image" et génère un labyrinthe d'images formé à partir de cette image.
Contribution
Votre programme doit accepter deux arguments:
- Moi, l'image pour former le labyrinthe
- S, un booléen précisant s'il faut afficher ou non la solution du labyrinthe
I est donné sous la forme suivante:
.......
.#####.
.#####.
#######
.#####.
.#####.
.......
où #
sont les cellules à inclure dans le chemin de la solution et .
les cellules à exclure. Vous pouvez échanger les .
«, #
» et les nouvelles lignes avec n'importe quel caractère de votre choix tant qu'ils diffèrent les uns des autres. Alternativement, vous pouvez accepter un bitmap réel de l'image d'entrée.
Production
Votre labyrinthe résultant devrait être sous la forme suivante:
###############
# #
# ### ####### #
# #.........# #
# #.#######.# #
# #.#.......# #
###.#.#########
....#.#........
#####.#.#######
# ...#..... #
# #.#######.# #
# #.........# #
# ####### ### #
# # # #
###############
où #
représente les murs, .
désigne les portions du chemin faisant partie de la solution et les espaces sont des chemins exclus de la solution. Les .
'peuvent être remplacés par des espaces si S est faux. Encore une fois, les caractères peuvent être échangés avec d'autres caractères de votre choix ou vous pouvez générer une image bitmap réelle du labyrinthe avec la solution mise en évidence.
Détails supplémentaires
- Les chemins doivent être d'une seule cellule (ne peut pas avoir un pool géant d'espace vide comme chemin)
- Le labyrinthe ne doit contenir aucune boucle
- Le labyrinthe doit être entièrement connecté (toutes les cellules doivent être accessibles depuis l'entrée / la sortie)
- Le labyrinthe doit être entouré de murs (sauf s'il s'agit d'une entrée / sortie)
- Le chemin de la solution ne doit pas inclure d'impasses
- Il doit y avoir exactement 1 entrée et 1 sortie pour le labyrinthe
- L'entrée et la sortie doivent être alignées sur le bord de la grille et adjacentes à une cellule incluse dans le chemin de la solution
- Vous pouvez choisir l'emplacement de l'entrée et de la sortie
- Vous pouvez supposer qu'un chemin valide peut être formé à partir de l'image d'entrée donnée
(Ajouté pour clarification) Le diagramme ci-dessous montre comment le chemin de la solution est corrélé à l'image d'entrée:
Input (I): | Output: | Corresponding Cells:
| | (@'s denote #'s from I)
| |
....... | ############### | ###############
.#####. | # # | # #
.#####. | # ### ####### # | # ### ####### #
####### | # #.........# # | # #@.@.@.@.@# #
.#####. | # #.#######.# # | # #.#######.# #
.#####. | # #.#.......# # | # #@#@.@.@.@# #
....... | ###.#.######### | ###.#.#########
| ....#.#........ | .@.@#@#@.@.@.@.
| #####.#.####### | #####.#.#######
| # ...#..... # | # @.@#@.@.@ #
| # #.#######.# # | # #.#######.# #
| # #.........# # | # #@.@.@.@.@# #
| # ####### ### # | # ####### ### #
| # # # # | # # # #
| ############### | ###############
| |
Cas de test
L'arrosage peut par exemple de Wikipedia :
Contribution:
..................
..................
.......####.......
......##..##......
.....##....##....#
.....#......#...##
.#############.##.
##..############..
#...###########...
#...##########....
#...##########....
#...##########....
#...##########....
....##########....
....##########....
....##########....
..................
..................
Sortie (S = faux):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # # # # # # #
# # # ### ##### # ### ### # ### ### #
# # # # # # # # # # # # #
# ### # ##### ##### ### ##### # # ###
# # # # # # # # #
### ####### ### ### # ### ##### ### #
# # # # # # # # # # #
# ### ##### # ### ####### # # # # # #
# # # # # # # #
# # ##### ############# ### ### ### #
# # # # # # # # # #
# ### # ####### # ### ### # # ### # #
# # # # # # # # # #
# # # ### ######### # # ##### # #####
# # # # # # # # # # # #
# ##### # # ##### # ##### # # ### # #
# # # # # # # # # # #
# ### ### ### # ### # ##### ####### #
# # # # # # # # # #
# # # # ####### # ### # ##### # ### #
# # # # # # # # # # #
### # # # # # ############# # ### # #
# # # # # # # # # # #
##### # # ##### ####### # ### ##### #
# # # # # # # # #
##### # # # # ####### # ### #########
# # # # # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Sortie (S = vrai):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # #....... # # # # #
# # # ### #####.# ###.### # ### ### #
# # # # #...# # #...# # # # #
# ### # #####.##### ###.##### # # ###
# # # ...# # #... # # #..
### #######.### ### # ###.##### ###.#
# # #.# # # #.# # #...#
# ### #####.# ### #######.# # # #.# #
# #.......#.............#...# #...# #
# #.#####.#############.###.###.### #
#...# #.......#.....#...#.#...# # #
#.### # #######.#.###.###.#.#.### # #
#.# # # .......#...#.#...#...# #
#.# # ###.#########.#.#.##### # #####
#.# # #.#.......#.#...#...# # # #
#.##### #.#.#####.#.#####.#.# ### # #
#. #.#...#...#.#.....#.# # # #
#.### ###.###.#.###.#.#####.####### #
#. # # #.....#.#...#.#..... # #
#.# # # #######.#.###.#.##### # ### #
..# # # #...#...#.....#.....# # # #
### # # #.#.#.#############.# ### # #
# # # #.#...#.........#...# # # #
##### # #.#####.#######.#.### ##### #
# # #.#...#.......#.#...# #
##### # #.#.#.#######.#.###.#########
# # ...#.........#..... # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Exemple de bitmap (même labyrinthe que ci-dessus):