チャレンジ
2次元のブール配列(同等に、単色のビットマップ)を指定して、「真」(1)である領域の輪郭を表す一連のポリゴンを出力するプログラムを記述します。
入力は、'#'
(ハッシュ)、' '
(スペース)、および\n
(改行)文字のシーケンスとして提供されます。行の長さが異なる場合があります。その場合、欠落している部分はスペースと見なされます。出力は、(改行で区切られた)ポリゴンのリストである必要があります。各ポリゴンは、(コンマで区切られた)座標のリストで表されます。
例と要件
座標は時計回りの順序でリストする必要があります。入力:
#
許容できる出力は次のとおりです。
(0,0), (1,0), (1,1), (0,1) (1,0), (1,1), (0,1), (0,0) (1,1), (0,1), (0,0), (1,0) (0,1), (0,0), (1,0), (1,1)
互いに素な領域は複数のポリゴンを返す必要があります。入力:
# #
出力例(実際の出力は2行で構成される必要があります):
(0,0), (1,0), (1,1), (0,1) (2,0), (3,0), (3,1), (2,1)
ポリゴンの穴は、別のポリゴンとして、反時計回りの順序でリストする必要があります。入力:
### # # ###
出力例:
(0,0), (3,0), (3,3), (0,3) (1,1), (1,2), (2,2), (2,1)
斜めに隣接する頂点を結合するかどうかは自由に選択できます。入力:
# #
出力例:
(0,0), (1,0), (1,1), (0,1) (1,1), (2,1), (2,2), (1,2)
または
(0,0), (1,0), (1,1), (2,1), (2,2), (1,2), (1,1), (0, 1)
座標のリストは、最適である必要はありません。例えば:
##
許容できる出力:
(0,0), (2,0), (2,1), (0,1) // Redundant coordinates along a straight line are acceptable (0,0), (1,0), (2,0), (2,1), (1,1), (0,1) // Duplicate start- and end-point are acceptable (0,0), (2,0), (2,1), (0,1), (0,0)
いつものように、最短のプログラムが「勝ち」ます。