平方カウントプログラムを書く


8

よく知られているパズルでは、3x3グリッド上のポイントを使用して作成できる正方形の数を数えます。

.  .  .
.  .  .
.  .  .

答えは6です。4つの小さな正方形、1つの大きな正方形、上、左、下、右のペグから形成され、正方形の対角線に沿ってエッジを持つ1つの正方形です。

あなたの仕事は、一連の点から形成できる正方形の総数を数えるプログラムを構築することです。

プログラムは、(選択した)2つの形式のいずれかで入力を受け取ります。

  • いずれかからなるグリッド又は。正方形がコーナーになることができるグリッド上のポイントを表し、グリッド上のすべてのスペースは、水平または垂直にちょうど1単位離れています。MN..

  • 正方形を配置できるポイントを表す座標ペアのリスト。

提供されたポイントを使用して形成できる個別の正方形の数を返します。プログラムは、可能なすべての入力に対して正しい解を返す必要があります。


たとえば、上の入力を使用しますが、中央の四角が欠落しています。

...
. .
...

ここでは2つの正方形(大きな正方形と斜めの正方形)しかないため、プログラムはを返し2ます。


これをあらゆる言語で行うための最短のコードが優先されます。


7
私はあなたに賛成票を投じますが、あなたの評判は完璧です。(6666):-P
— ドアノブ

私がその評判を持っている限り、私は悪魔です:(
— Joe Z.

私たちは話している正方形や長方形?水平単位と垂直単位が両方とも1であると言いますが、この例では、ドットは垂直方向に1単位離れていますが、水平方向に3単位離れています。では、これらの正方形はどうですか?また、入力にギャップがある可能性がありますか?もしそうなら、より複雑な例を提供できますか?
— マーティンエンダー2014年

問題のドットは、美的目的のために、より広く間隔が空けられています。実際の質問では、1文字だけ離れている必要があります。
— Joe Z.

MとNの可能な最大値、および合計ポイントの最大数はいくつですか?そして、私たちが望む点がいくつあるかを自由に言うことができますか?(最初に入力を取るか、何らかのEOFに達したら停止するかのいずれかです。)
— Level River St

回答:


7

Python、95

stdinから座標のリストを取得します。

l=input();print(sum((c-d+b,d+c-a)in l and(a-d+b,b+c-a)in l for a,b in l for c,d in l)-len(l))/4

説明:

ポイント(a,b)とのペアごとに(c,d)、追加のポイント(c-d+b,d+c-a)と正方形(a-d+b,b+c-a)がリストにあるかどうかを確認します。これは、各正方形を4回カウントし、各ポイントを1回(の場合(a,b) = (c,d))カウントするため、ポイント数を減算して4で割ると、正方形の数が得られます。


賢い、簡潔な。
— プリモ2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.