2Dバイト配列で長方形の数を見つける


12
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000111111000000000000000000011111111111111100000000000000000
0000000000000100001000000111111000000011111111111111100000000010000000
0000000000000100001000000111111000000000000000000000011000000000000000
0000000000000111111000000111111000000000000000000000011000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000

サイズmx nのバイトの2次元配列が与えられます。すべてのバイトが1または0であることが保証されています。上記のように、2dで表示したときに1で表される長方形の数を見つけます。

完全に塗りつぶされた長方形のみがカウント対象と見なされます。
長方形は、エッジ上にある場合を除き、0で囲む必要があります(ただし、1の斜めに接する長方形は大丈夫です(例を参照してください))。

たとえば、上記の配列には5つの有効な長方形があります。

任意の言語を使用できます。


1
言い換えると、長方形は0またはエッジで囲まれている必要があります
ランチャー14年

できた より良い英語で表現してくれてありがとう。
ミクロ

どう1100\n1100\n0011\n0011
ランチャー14年

1
それが「隣接/重複」を書いた理由だと思います。これらは、私の最初の意図からの2つの有効な長方形です。しかし、「周囲の」条件はそれらを制限しています。それを説明するためのより良い方法はありますか
ミクロ

1
対角線であっても、対角線が隣接を意味するかどうかはあいまいです。囲まれているかどうかにかかわらず、同じ曖昧さは、コーナーで囲まれているか、または側面だけで囲まれている
ランチャー14年

回答:


2

GolfScript、107文字

.n?):L;'1'/{,}%{1$+)}*;][]\{:A{{+}+[1L.~)-1]%&}+1$\,.@^\[[[A]]+{|}*]+}/{.{L%}{%$..&1$,1$,/*$=}:C~\{L/}C&},,

入力はSTDINで指定する必要があります。

例:

11
01
-
0

111
111
-
1

100
001
001
-
2

11100
10101
11100
-
1

101
010
101
-
5

上記のコメントを参照してください- 「有効」の長方形の幅/高さの両方> 1.持っている必要があると思わ
ポール・R

@PaulRそのルールは質問には書かれていません。すべての合理的な定義により、それらは完全に細かい長方形です-多分後で追加します。
ハワード14年

私はあなたの定義に同意します-私はコメントの矛盾に注目していました-OPが質問をより明確にするために質問を更新する必要があるようです。
ポールR 14年

サイズ1の長方形が有効であることを明確にしました。
ミクロ

しかし、コメントの中で、「明確にするために、縮退した長方形はカウントすべきではありません。正しいですか?たとえば、単一の1または隣接する1の単一のサブ行/サブ列は無効ですか?」「はい、それらは無効であり、カウントされるべきではありません。」
ポールR 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.