Schreiben Sie ein Quadratzählprogramm

8

Bei einem bekannten Puzzle wird gezählt, wie viele Quadrate mit den Punkten in einem 3x3-Raster erstellt werden können:

.  .  .
.  .  .
.  .  .

Die Antwort lautet 6 - vier kleine Quadrate, ein großes Quadrat und ein Quadrat aus den oberen, linken, unteren und rechten Stiften mit Kanten entlang der Diagonalen der Quadrate.

Ihre Aufgabe ist es, ein Programm zu erstellen, das die Gesamtzahl der Quadrate zählt, die aus einer Reihe von Punkten gebildet werden können.

Ihr Programm nimmt Eingaben in einem von zwei Formaten (Ihrer Wahl) entgegen:

  • Ein MBy- NGrid bestehend aus entweder .oder . .stellt einen Punkt im Raster dar, von dem ein Quadrat eine Ecke sein kann, und alle Leerzeichen im Raster sind horizontal oder vertikal genau eine Einheit voneinander entfernt.

  • Eine Liste von Koordinatenpaaren, die Punkte darstellen, auf denen sich ein Quadrat befinden kann.

und geben Sie die Anzahl der unterschiedlichen Quadrate zurück, die mit den bereitgestellten Punkten gebildet werden können. Ihr Programm muss für jede mögliche Eingabe eine korrekte Lösung zurückgeben.


Nehmen Sie zum Beispiel die obige Eingabe, aber wo das mittlere Quadrat fehlt:

...
. .
...

Hier gibt es nur zwei mögliche Quadrate (das große und das diagonale), daher sollte das Programm zurückkehren 2.


Der kürzeste Code dafür in einer Sprache gewinnt.

Joe Z.
quelle
7
Ich würde dich positiv bewerten, aber dein Ruf ist perfekt. (6666) :-P
Türknauf
Solange ich diesen Ruf habe, bin ich der Teufel :(
Joe Z.
Sprechen wir über Quadrate oder Rechtecke ? Sie sagen, die horizontale und vertikale Einheit sind beide 1. In Ihrem Beispiel sind die Punkte jedoch vertikal um eine Einheit, horizontal jedoch um 3 Einheiten voneinander entfernt. Wie sind diese Quadrate? Könnte es auch Lücken in der Eingabe geben? Wenn ja, könnten Sie ein komplexeres Beispiel liefern?
Martin Ender
Die Punkte in der Frage sind nur aus ästhetischen Gründen weiter voneinander entfernt. Sie sollten für die eigentliche Frage nur ein Zeichen voneinander entfernt sein.
Joe Z.
Was ist der maximal mögliche Wert für M und N und die maximale Anzahl von Gesamtpunkten? Und können wir frei sagen, wie viele Punkte wir in irgendeiner Weise wünschen? (Entweder durch eine Eingabe am Anfang nehmen, oder durch Anhalten einmal eine Art von EOF erreicht ist.)
Ebene River St

Antworten:

7

Python, 95

Nimmt eine Liste von Koordinaten von 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

Erläuterung:

Überprüfen Sie für jedes Punktepaar (a,b)und (c,d), ob das Quadrat mit zusätzlichen Punkten (c-d+b,d+c-a)und (a-d+b,b+c-a)in der Liste enthalten ist. Dies zählt jedes Quadrat viermal und jeden Punkt einmal (wann (a,b) = (c,d)). Wenn Sie also die Anzahl der Punkte subtrahieren und durch 4 dividieren, erhalten Sie die Anzahl der Quadrate.

Pappkarton
quelle
Clever, prägnant.
Primo