Wyzwanie
Napisz program / funkcję, która akceptuje „obraz” i generuje labirynt obrazkowy utworzony z tego obrazu.
Wejście
Twój program powinien zaakceptować dwa argumenty:
- Ja, obraz, z którego tworzy się labirynt
- S, boolean określający, czy wyświetlić rozwiązanie labiryntu
Otrzymuję w następującej formie:
.......
.#####.
.#####.
#######
.#####.
.#####.
.......
gdzie #
są komórki, które mają zostać uwzględnione w ścieżce rozwiązania .
, a komórki to komórki, które należy wykluczyć. Możesz zamienić się z .
„s, #
” s, a nowe linie z jakiegokolwiek charakteru swojego wyboru, o ile różnią się one od siebie. Alternatywnie możesz zaakceptować rzeczywistą bitmapę obrazu wejściowego.
Wynik
Powstały labirynt powinien mieć następującą formę:
###############
# #
# ### ####### #
# #.........# #
# #.#######.# #
# #.#.......# #
###.#.#########
....#.#........
#####.#.#######
# ...#..... #
# #.#######.# #
# #.........# #
# ####### ### #
# # # #
###############
gdzie #
„ściany .
” oznaczają części ścieżki, które są częścią rozwiązania, a spacje są ścieżkami wykluczonymi z rozwiązania. Te .
mogą być zastąpione spacjami, jeśli S jest fałszem. Znaki mogą zostać zamienione na inne wybrane przez ciebie postacie lub możesz wydrukować rzeczywistą mapę bitową labiryntu z podświetlonym rozwiązaniem.
Dodatkowe Szczegóły
- Ścieżki muszą mieć szerokość jednej komórki (ścieżka nie może mieć gigantycznej puli pustej przestrzeni)
- Labirynt nie może zawierać żadnych pętli
- Labirynt musi być w pełni połączony (wszystkie komórki muszą być dostępne od wejścia / wyjścia)
- Labirynt musi być otoczony murami (chyba że jest to wejście / wyjście)
- Ścieżka rozwiązania nie może zawierać ślepych zaułków
- Musi być dokładnie 1 wejście i 1 wyjście do labiryntu
- Wejście i wyjście musi być wyrównane do krawędzi siatki i przylegać do komórki znajdującej się na ścieżce rozwiązania
- Możesz wybrać miejsce wejścia i wyjścia
- Możesz założyć, że z danego obrazu wejściowego można utworzyć prawidłową ścieżkę
(Dodano w celu wyjaśnienia) Poniższy schemat pokazuje, w jaki sposób ścieżka rozwiązania jest skorelowana z obrazem wejściowym:
Input (I): | Output: | Corresponding Cells:
| | (@'s denote #'s from I)
| |
....... | ############### | ###############
.#####. | # # | # #
.#####. | # ### ####### # | # ### ####### #
####### | # #.........# # | # #@.@.@.@.@# #
.#####. | # #.#######.# # | # #.#######.# #
.#####. | # #.#.......# # | # #@#@.@.@.@# #
....... | ###.#.######### | ###.#.#########
| ....#.#........ | .@.@#@#@.@.@.@.
| #####.#.####### | #####.#.#######
| # ...#..... # | # @.@#@.@.@ #
| # #.#######.# # | # #.#######.# #
| # #.........# # | # #@.@.@.@.@# #
| # ####### ### # | # ####### ### #
| # # # # | # # # #
| ############### | ###############
| |
Przypadki testowe
Przykład konewki z Wikipedii :
Wejście:
..................
..................
.......####.......
......##..##......
.....##....##....#
.....#......#...##
.#############.##.
##..############..
#...###########...
#...##########....
#...##########....
#...##########....
#...##########....
....##########....
....##########....
....##########....
..................
..................
Dane wyjściowe (S = fałsz):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # # # # # # #
# # # ### ##### # ### ### # ### ### #
# # # # # # # # # # # # #
# ### # ##### ##### ### ##### # # ###
# # # # # # # # #
### ####### ### ### # ### ##### ### #
# # # # # # # # # # #
# ### ##### # ### ####### # # # # # #
# # # # # # # #
# # ##### ############# ### ### ### #
# # # # # # # # # #
# ### # ####### # ### ### # # ### # #
# # # # # # # # # #
# # # ### ######### # # ##### # #####
# # # # # # # # # # # #
# ##### # # ##### # ##### # # ### # #
# # # # # # # # # # #
# ### ### ### # ### # ##### ####### #
# # # # # # # # # #
# # # # ####### # ### # ##### # ### #
# # # # # # # # # # #
### # # # # # ############# # ### # #
# # # # # # # # # # #
##### # # ##### ####### # ### ##### #
# # # # # # # # #
##### # # # # ####### # ### #########
# # # # # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Dane wyjściowe (S = prawda):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # #....... # # # # #
# # # ### #####.# ###.### # ### ### #
# # # # #...# # #...# # # # #
# ### # #####.##### ###.##### # # ###
# # # ...# # #... # # #..
### #######.### ### # ###.##### ###.#
# # #.# # # #.# # #...#
# ### #####.# ### #######.# # # #.# #
# #.......#.............#...# #...# #
# #.#####.#############.###.###.### #
#...# #.......#.....#...#.#...# # #
#.### # #######.#.###.###.#.#.### # #
#.# # # .......#...#.#...#...# #
#.# # ###.#########.#.#.##### # #####
#.# # #.#.......#.#...#...# # # #
#.##### #.#.#####.#.#####.#.# ### # #
#. #.#...#...#.#.....#.# # # #
#.### ###.###.#.###.#.#####.####### #
#. # # #.....#.#...#.#..... # #
#.# # # #######.#.###.#.##### # ### #
..# # # #...#...#.....#.....# # # #
### # # #.#.#.#############.# ### # #
# # # #.#...#.........#...# # # #
##### # #.#####.#######.#.### ##### #
# # #.#...#.......#.#...# #
##### # #.#.#.#######.#.###.#########
# # ...#.........#..... # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
Przykład mapy bitowej (taki sam labirynt jak powyżej):
Dane wejściowe: Dane wyjściowe (S = fałsz): Dane wyjściowe (S = prawda):