チャレンジ
「画像」を受け入れ、その画像から形成された画像迷路を出力するプログラム/関数を作成します。
入力
プログラムは2つの引数を受け入れる必要があります。
- 私、迷路を形成するイメージ
- S、迷路の解を表示するかどうかを指定するブール値
私は次の形式で与えられます:
.......
.#####.
.#####.
#######
.#####.
.#####.
.......
ここ#
で、はソリューションパスに含まれるセルで、.
はセルが除外されるセルです。異なる場合は、.
「」、#
「」、および改行を任意の文字と交換できます。または、入力画像の実際のビットマップを受け入れることもできます。
出力
結果として生じる迷路は次の形式になります。
###############
# #
# ### ####### #
# #.........# #
# #.#######.# #
# #.#.......# #
###.#.#########
....#.#........
#####.#.#######
# ...#..... #
# #.#######.# #
# #.........# #
# ####### ### #
# # # #
###############
ここで#
、は壁を.
示し、はをソリューションの一部であるパスの一部を示し、スペースはソリューションから除外されたパスを示します。.
Sがfalseの場合、'sはスペースに置き換えられます。繰り返しますが、文字は選択した他の文字と交換されるか、ソリューションが強調表示された迷路の実際のビットマップを出力します。
さらなる詳細
- パスは1セル幅でなければなりません(空スペースの巨大なプールをパスにすることはできません)
- 迷路にはループを含めることはできません
- 迷路は完全に接続されている必要があります(すべてのセルは入り口/出口から到達可能でなければなりません)
- 迷路は壁に囲まれている必要があります(入り口/出口がない限り)
- ソリューションパスには行き止まりを含めることはできません
- 迷路の入口と出口はそれぞれ1つだけでなければなりません
- 入口と出口は、グリッドの端に合わせて、ソリューションパスに含まれるセルに隣接する必要があります。
- 入口と出口を配置する場所を選択できます
- 与えられた入力画像から有効なパスを形成できると仮定できます
(明確化のために追加)下の図は、ソリューションパスが入力イメージにどのように相関するかを示しています。
Input (I): | Output: | Corresponding Cells:
| | (@'s denote #'s from I)
| |
....... | ############### | ###############
.#####. | # # | # #
.#####. | # ### ####### # | # ### ####### #
####### | # #.........# # | # #@.@.@.@.@# #
.#####. | # #.#######.# # | # #.#######.# #
.#####. | # #.#.......# # | # #@#@.@.@.@# #
....... | ###.#.######### | ###.#.#########
| ....#.#........ | .@.@#@#@.@.@.@.
| #####.#.####### | #####.#.#######
| # ...#..... # | # @.@#@.@.@ #
| # #.#######.# # | # #.#######.# #
| # #.........# # | # #@.@.@.@.@# #
| # ####### ### # | # ####### ### #
| # # # # | # # # #
| ############### | ###############
| |
テストケース
ウィキペディアの水まき缶の例:
入力:
..................
..................
.......####.......
......##..##......
.....##....##....#
.....#......#...##
.#############.##.
##..############..
#...###########...
#...##########....
#...##########....
#...##########....
#...##########....
....##########....
....##########....
....##########....
..................
..................
出力(S = false):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # # # # # # #
# # # ### ##### # ### ### # ### ### #
# # # # # # # # # # # # #
# ### # ##### ##### ### ##### # # ###
# # # # # # # # #
### ####### ### ### # ### ##### ### #
# # # # # # # # # # #
# ### ##### # ### ####### # # # # # #
# # # # # # # #
# # ##### ############# ### ### ### #
# # # # # # # # # #
# ### # ####### # ### ### # # ### # #
# # # # # # # # # #
# # # ### ######### # # ##### # #####
# # # # # # # # # # # #
# ##### # # ##### # ##### # # ### # #
# # # # # # # # # # #
# ### ### ### # ### # ##### ####### #
# # # # # # # # # #
# # # # ####### # ### # ##### # ### #
# # # # # # # # # # #
### # # # # # ############# # ### # #
# # # # # # # # # # #
##### # # ##### ####### # ### ##### #
# # # # # # # # #
##### # # # # ####### # ### #########
# # # # # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
出力(S = true):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # #....... # # # # #
# # # ### #####.# ###.### # ### ### #
# # # # #...# # #...# # # # #
# ### # #####.##### ###.##### # # ###
# # # ...# # #... # # #..
### #######.### ### # ###.##### ###.#
# # #.# # # #.# # #...#
# ### #####.# ### #######.# # # #.# #
# #.......#.............#...# #...# #
# #.#####.#############.###.###.### #
#...# #.......#.....#...#.#...# # #
#.### # #######.#.###.###.#.#.### # #
#.# # # .......#...#.#...#...# #
#.# # ###.#########.#.#.##### # #####
#.# # #.#.......#.#...#...# # # #
#.##### #.#.#####.#.#####.#.# ### # #
#. #.#...#...#.#.....#.# # # #
#.### ###.###.#.###.#.#####.####### #
#. # # #.....#.#...#.#..... # #
#.# # # #######.#.###.#.##### # ### #
..# # # #...#...#.....#.....# # # #
### # # #.#.#.#############.# ### # #
# # # #.#...#.........#...# # # #
##### # #.#####.#######.#.### ##### #
# # #.#...#.......#.#...# #
##### # #.#.#.#######.#.###.#########
# # ...#.........#..... # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
ビットマップの例(上記と同じ迷路):