Es gibt eine Art n × n Matrix W, die als kanonische Grundform von Weyr bezeichnet wird . Eine solche Matrix wird durch ihre Blöcke beschrieben und hat die folgenden Eigenschaften unter Verwendung des folgenden Referenzdiagramms:
- die Hauptdiagonalblöcke W ii sind n i × n i Matrizen der Form λ I n i, wobei I n i die Identitätsmatrix n i × n i ist.
- n 1 ≥ n 2 ≥ ... ≥ n r
- Die ersten superdiagonalen Blöcke W k-1, k für k ∈ 2..r sind n k-1 × n k Matrizen, die den vollen Spaltenrang in zeilenreduzierter Staffelform haben , oder einfacher gesagt, I n k, die oben aufliegen n k-1 - n k Reihen von Nullen.
- Alle anderen Blöcke sind 0 Matrizen.
Beispielsweise:
- Die diagonalen Hauptblöcke (gelb) sind so, dass die n i 4, 2, 2 und 1 sind.
- Die ersten superdiagonalen Blöcke sind grün.
- Die graue Zone besteht aus allen anderen Blöcken, die alle 0 sind .
Für diese Herausforderung nehmen wir λ = 1 an.
Eingang
Eine quadratische Matrix mit Nullen und Einsen in einem beliebigen Format.
Ausgabe
Geben Sie einen von zwei unterschiedlichen Werten aus, ob die Eingabematrix Weyr ist oder nicht.
Regeln
Das ist Code-Golf . In jeder Sprache gewinnen die wenigsten Bytes. Es gelten Standardregeln / Regelungslücken.
Testfälle
Präsentiert als Arrays von Zeilen.
Weyr:
[[1]]
[[1,1],[0,1]]
[[1,0,1,0,0],[0,1,0,1,0],[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,1,0,0],[0,0,0,0,1,0,0,1,0],[0,0,0,0,0,1,0,0,1],[0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
[[1,0,0,0,1,0,0,0,0],[0,1,0,0,0,1,0,0,0],[0,0,1,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
Nicht-Weyr:
[[0]]
[[1,0],[1,1]]
[[1,0,0,1,0,0],[0,1,0,0,0,0],[0,0,1,0,0,1],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]]
[[1,0,1,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
. Ich denke, es ist falsch (aber meine Antwort kann es nicht als solches identifizieren).Antworten:
K (ngn / k) ,
91888480 BytesProbieren Sie es online!
quelle
Python 2 , 270 Bytes
Probieren Sie es online!
Erläuterung:
Überprüft Blöcke rekursiv auf Identität und ihre überdiagonalen Blöcke.
I
prüft, ob eine Matrix eine Identitätsmatrix istFür jeden Block der Eingabematrix prüft die Funktion, ob es sich um eine Identität handelt und ob rechts davon ein weiterer Identitätsmatrixblock vorhanden ist. Die nächste Iteration betrachtet dann einen Block dieser Größe.
quelle