Besteht ein nicht leeres 2D-Array aus 0
und 1
, ermitteln Sie die Anzahl der Quadrate, deren 4 Ecken alle sind 1
. Die Quadrate müssen nicht "aufrecht" sein. Alle Reihen haben garantiert die gleiche Länge.
Angemessene Eingabe- / Ausgabemethoden sind zulässig.
Testfälle:
0001000
1000000
0000000
0000100
0100000
Dies kehrt zurück 1
.
10101
00000
10100
00000
10001
Dies kehrt zurück 2
.
1111
1111
1111
1111
Dies kehrt zurück 20
.
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt. Es gelten Standardlücken .
1
s auf einem Quadrat, so dass jeder1
entlang des Umfangs gleich weit von seinen beiden Nachbarn entfernt ist.Antworten:
JavaScript (ES6),
127124119 ByteDank nderscore 3 Bytes gespart
Wie?
Diese Funktion durchläuft alle Paare von Zellen (x, y) , (X, Y) der Eingabematrix m, so dass:
Jedes übereinstimmende Paar beschreibt die Koordinaten einer potenziellen Kante eines Quadrats. Die Ungleichungen garantieren, dass jede Kante nur einmal geprüft wird.
Wir verwenden den um 90 ° im Uhrzeigersinn gedrehten Vektor [dx, dy] = [X - x, Y - y], um die Zellen zu testen, die sich bei [x - dy, y + dx] und [X - dy, Y + dx] befinden . Wenn beide eine 1 enthalten , haben wir ein gültiges Quadrat gefunden.
Testfälle
Code-Snippet anzeigen
quelle
g=(a,b)=>(m[b+X-x]||0)[a-Y+y]
-1 Bytes: Verwenden Sie|n
anstelle von&&n
MATL , 20 Bytes
Eingabe ist eine Matrix.
Probieren Sie es online!
Wie es funktioniert
Dadurch werden alle Koordinaten von Nicht-Null-Einträgen im Eingaberaster gefunden und als komplexe Zahlen dargestellt, sodass Zeilen- und Spaltenindizes Real- bzw. Imaginärteilen entsprechen.
Der Code generiert dann ein Array aller Kombinationen (Reihenfolge spielt keine Rolle) dieser Zahlen, die jeweils zu 4 verwendet werden. Jede Kombination repräsentiert ein Kandidatenquadrat. Für jede Kombination wird die 4 × 4-Matrix paarweiser absoluter Differenzen (dh Abstände in der komplexen Ebene) berechnet. Dies ist eine symmetrische Matrix mit Nullen entlang ihrer Hauptdiagonale. Die aktuelle Kombination bildet genau dann ein Quadrat, wenn die Matrix genau drei unterschiedliche Werte enthält (dies sind die Quadratseite, die Quadratseite und die Null):
Andererseits würde beispielsweise ein nicht quadratisches Rechteck 4 unterschiedliche Werte ergeben (zwei Seiten, eine Diagonale und Null);
und ein allgemeines Viereck kann bis zu 7 Werte haben (vier Seiten, zwei Diagonalen und Null):
quelle