私のお気に入りの数学的な楽しみの1つは、長方形のグリッドを描画し、そのグリッドに表示されているすべての長方形を見つけることです。ここで、この質問に答えて、自分で冒険しましょう!
長方形の数を数えられますか?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
この4 x 4 ミニチェスボードの長方形の総数は正確に
100
正解でしたか?
関連する数学: 8x8チェッカーボードにはいくつの長方形がありますか?
チャレンジ
非トロイダルグリッド/イメージ上の可視矩形の総数をカウントする最短の関数/プログラムを記述します。
関連する課題: ユニークな長方形を数える!、2Dバイト配列で長方形の数を見つけます。
入力フォーマット
関数またはプログラムは、テキストベースの入力またはグラフィカルな入力のどちらで動作するかを選択できます。
テキストベースの入力
グリッドはなりM行列n個(M個の行、N列)以下の文字からなるASCIIグリッドを:
- スペース、
-
水平線分の一部の場合、|
垂直線分の一部、および+
コーナー用。
このASCIIグリッドは、プログラム/関数への入力/引数として次の形式で導入できます。
- 改行で区切られた単一の文字列、
- 改行はないが、グリッドの次元をエンコードする1つまたは2つの整数を持つ文字列、または
- 文字列の配列。
注: テキストベースの入力が少なくとも含まれている1行と少なくとも1列。
グラフィカル入力
または、グリッドは幅5 * nピクセル、高さ5 * mピクセルの白黒PNG画像としてエンコードされます。各画像は5 px * 5 pxのブロックで構成され、ASCII入力に対応します。
- スペースは白いブロックに変換されます。これらのブロックは、空白ブロックと呼ばれます。
- 線分と角は非空白ブロックに変換されます。このようなブロックの中心ピクセルは黒です。
- 編集:(ASCII入力の)2つの角が線分で接続されている場合、対応するブロックの中心(グラフィカル入力の)も黒い線で接続する必要があります。
つまり、各ブロックは (拡大画像についてはここをクリック)からのみ選択できます。
注: 青い境界線は、説明のみを目的としています。グラフィカル入力は、少なくともある5ワイドpxと5のPX高いです。グラフィカル入力を、他の画像ファイル形式の可能性があるモノクロ画像に変換できます。変換を選択した場合は、回答で指定してください。変換に対するペナルティはありません。
出力フォーマット
プログラムを作成する場合、入力内の長方形の総数を示す負でない数を表示する必要があります。
関数を作成している場合、入力内の長方形の総数を示す負でない数も返す必要があります。
事例
ケース1、グラフィック:(30 px * 30 px)、ASCII:(6行、6列)
+--+
| |
| ++-+
+-++ |
| |
+--+
期待される出力: 3
ケース2、グラフィック:(20 px * 20 px)、ASCII:(4行、4列)
++-+
|+++
+++|
+-++
期待される出力: 6
ケース3、グラフィック:(55 px * 40 px)、ASCII:(8行、11列)
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
期待される出力: 9
ケース4、グラフィック:(120 px * 65 px)、ASCII:(13行、24列)
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
期待される出力: 243
ケース5、グラフィック:(5ピクセル* 5。PXはい、それはですが!)、ASCII:ちょうど単一のスペース。
期待される出力: 0
ケース6、グラフィック:(35 px * 20 px)、ASCII:(4行、7列)
+--+--+
|++|++|
|++|++|
+--+--+
期待される出力: 5
仮定
生活を楽にするために、次のことが保証されます。
- であることによって非トロイダル、グリッドは、水平または垂直方向のいずれか折り返されません。
- 不良が終了、ありません例えば
+---
または+- -+
。すべての線分には2つの端があります。 - で交わる2本の線は
+
、その点で互いに交差する必要があります。 - 無効な入力について心配する必要はありません。
標準的な抜け穴に対するルールが適用されます。正方形を長方形として扱ってください。オプションで、グリッドの各行の末尾のスペースを削除できます。
これはcode-golfなので、エントリはできるだけ短くしてください。テキストベースのソリューションとグラフィカルなソリューションが競合します。