Eingang:
- Eine ganze Zahl
n
- Zwei gleich große quadratische Matrizen (deren Breite / Höhe ein Vielfaches von ist
n
)
Ausgabe:
Einer von zwei unterschiedlichen Werten Ihrer Wahl, einer für wahrheitsgemäße Ergebnisse und einer für falsche Ergebnisse (also ja, 1/0
anstatt true/false
gültige Ausgaben für Sprachen wie Java, auch wenn sie nicht als offizielle Wahrheits / Falsch-Werte betrachtet werden ).
Die Ausgabe von truthy / falsey gibt an, ob wir Blöcke der Größe n by n
in einer Matrix neu anordnen können , um sie an die andere Matrix anzupassen .
Beispiel:
Eingang:
Matrix 1:
1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 8 7 6 5 4
3 2 1 0 9 8
1 1 1 1 1 1
Matrix 2:
3 2 9 8 7 8
1 1 1 1 5 4
3 4 5 6 1 0
9 0 7 6 1 1
5 6 1 2 3 4
1 2 7 8 9 8
Integer n:
2
Ausgabe: truthy
Warum?
Wenn wir die Matrizen in Blöcke von teilen 2 by 2
, können wir sehen, dass sich alle Blöcke einer Matrix auch in der anderen Matrix befinden:
Matrix 1:
1 2 | 3 4 | 5 6
7 8 | 9 0 | 1 2
---------------
3 4 | 5 6 | 7 8
9 8 | 7 6 | 5 4
---------------
3 2 | 1 0 | 9 8
1 1 | 1 1 | 1 1
Matrix 2:
3 2 | 9 8 | 7 8
1 1 | 1 1 | 5 4
---------------
3 4 | 5 6 | 1 0
9 0 | 7 6 | 1 1
---------------
5 6 | 1 2 | 3 4
1 2 | 7 8 | 9 8
Herausforderungsregeln:
- Sie können davon ausgehen, dass die Matrizen nur nicht negative Ziffern enthalten (Bereich
[0,9]
). - Sie können davon ausgehen, dass die Breite / Höhe der Matrizen gleich ist und ein Vielfaches von
n
- Sie können davon ausgehen,
n
dass Sie sich im Bereich befinden[1, 50]
und die Breite / Höhe der Matrizen im Bereich liegen[1,100]
. - Die einzelnen Blöcke von
n by n
können nur einmal verwendet werden, um zu bestimmen, ob die Matrizen bei der Aufteilung in Blöcke von Permutationen voneinander sindn by n
. - Es kann mehrere
n by n
Blöcke geben, die gleich sind. - Die
n by n
Blöcke bleiben in der gleichen Ausrichtung, wenn geprüft wird, ob die beiden Matrizen bei der Aufteilung in Blöcke von einander permutierenn by n
.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 2
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 1
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 3
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 3 4 4
2 3 4 5 2 3 4 5
3 4 5 6 3 4 5 6
4 5 6 7 4 5 6 7
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 3 4 3 4 2
2 3 4 5 4 5 4 5
3 4 5 6 1 2 5 6
4 5 6 7 2 3 6 6
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 2 3 1
3 4 1 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
0 8 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 1 2 2
5 6 7 8 5 6 5 6
9 0 0 9 0 9 9 0
4 3 2 1 2 1 4 3
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 1 2 9 5 1 2 2
3 4 3 4 7 7 3 4
8 3 9 5 1 2 8 3
6 1 7 7 3 4 6 1
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 0 2 0 0 3 1 1 1 0 0 3 2
1 1 1 1 1 1 2 0 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5
Output:
falsey
[ [ 0 ] ], [ [ 25 ] ], 1
vorhanden? Ich habe damit verstanden,You can assume the matrices will only contain non-negative digits (range [0,9])
dass die Matrixwerte nur zwischen 0 und 9 liegen?[0,9]
später in der Sandbox hinzugefügt . Ich habe den Testfall auf geändert[[0]],[[8]]
.Antworten:
Gelee ,
109 BytesProbieren Sie es online! (oder mit Vorverarbeitung zum leichteren Kopieren und Einfügen aus den Testfällen)
Ein dyadischer Link, der eine Liste der beiden Matrizen (als Listen von Listen) auf der linken Seite und die ganze Zahl auf der rechten Seite akzeptiert, die
1
oder0
für Wahrheit oder Falschheit ergibt.Wie?
quelle
APL (Dyalog Extended) ,
191817 Bytes-2 danke an ngn.
Anonyme stillschweigende Infix-Funktion. Nimmt
n
als linkes Argument und Liste von zwei Matrizen als rechtes Argument. Erfordert die Indizierung von Nullen (⎕IO←0
). Im Übrigen funktioniert diese Funktion bei Arrays mit einer beliebigen Anzahl von Dimensionen.Probieren Sie es online!
≡.{
…}
Identische Ergebnisse der folgenden Funktion auf jede Matrix angewendet⍵
mitn
als⍺
?≢⍵
Größe der Matrix⍳
Indizes 0… Größe – 1⍺|
Divisionsrest bei Division durchn
⊂
beilegen, um entlang aller Maße zu verwenden⍵⊂⍨
Verwenden Sie dies, um * die Matrix in eine Matrix von Untermatrizen zu unterteilen.* Beginnt eine neue Partition, wenn das entsprechende Element kleiner als das vorherige ist. Entfernt mit Null markierte Elemente
,
zerlegen Sie die Matrix in eine Liste von Submatrizen∧
aufsteigend sortierenquelle
(≢⍵)⍴⍺↑1
->0=⍺|⍳≢⍵
(mit⎕io←0
)≡/{}¨
->≡.{}
Python 2 ,
108103 BytesProbieren Sie es online!
quelle
Perl 6 ,
94 6863 BytesProbieren Sie es online!
Anonymer Codeblock, der Eingaben als
size, [matrix1, matrix2]
akzeptiert und einen Booleschen Wert zurückgibtTrue/False
. Es gibt möglicherweise eine effizientere Methode zum Aufteilen der Matrix in Blöcke alsrotor
.Erläuterung:
quelle
05AB1E , 14 Bytes
Probieren Sie es online!
quelle
Java (JDK) , 221 Byte
Probieren Sie es online!
Erläuterung
Die Idee ist, jede kleine Zelle als vergleichbare Zeichenfolge auszuwählen und diese Zeichenfolgen dann zu sortieren und nacheinander zu vergleichen.
Credits
quelle
for(j=0;j<l;){c[z=i/n+j/n*x]+=a[i][j];d[z]+=b[i][j++];}
? .. Sie können die Klammern entfernen, indem Sie alles in die Schlaufe stecken. Auch deri=0
in der Schleife befindliche kann entfernt werden, da Ihri
bei Deklaration bereits 0 ist.var d=new String[x*x];
kannvar d=c.clone();
stattdessen sein. 234 Bytes[
und]
durch{
und ersetzen}
und ein führendes hinzufügen könnennew int[][]
, und es wäre genug gewesen. ;)i=0
war ein Überbleibsel, als ich die Arrays selbst füllte, anstatt sie zu benutzenArrays.fill
. Danke :-) Und für das habeclone
ich darüber nachgedacht, aber ich dachte immer noch, es hätte einenObject
und nicht den tatsächlichen Typ zurückgegeben. Ich muss in diesem Punkt einige Versionen zu spät sein;)Japt , 18 Bytes
Probieren Sie es online!
Erläuterung:
Der Schritt "In einen String verwandeln" ist erforderlich, da Japt Arrays nicht nach Wert vergleicht und das eingebaute Problem, das umgeht, für mehrdimensionale Arrays nicht funktioniert .
quelle
A.e()
für mehrdimensionale Arrays zu arbeiten. wollte immer darauf zurückkommen. In der ZwischenzeitÕmòV
->yòV
spart Ihnen ein Byte.TSQL, 164 Bytes
Das Auffüllen einer Tabellenvariablen, um eine Eingabe zu erhalten, das Erstellen von Eingaben und das Einfügen von Daten wurde nicht in die Byteanzahl einbezogen. Nur die eigentliche Abfrage, um die Daten zu extrahieren.
Golf (ohne Testtabelle - in der ungolfed Version):
Ungolfed:
Versuch es
quelle
JavaScript (ES6), 88 Byte
Probieren Sie es online!
Wie?
Dieser Code lautet:
Es nutzt die in der Herausforderung beschriebenen Grenzen:
Eine Matrix besteht aus einzelnen Ziffern, so dass wir einfach alle Zellen einer Untermatrix ohne Trennzeichen verketten und trotzdem eine eindeutige Darstellung davon erhalten können (z. B.
[[1,2],[3,4]]
kann gespeichert werden als"1234"
).oder als JS-Code:
y / n << 7 | x << n
Kommentiert
quelle
Kohle ,
5449 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt die Eingabe als Array von gleich großen zweidimensionalen Arrays. Gibt 1 bei Erfolg aus, nichts bei Misserfolg. Erläuterung:
Erfolg voraussetzen.
Schleife über die Arrays.
Teilen Sie das Array in große
n
Zeilenabschnitte auf.Schleife über jeden Spaltenblock.
Extrahieren Sie den Spaltenblock für jede Zeile des Zeilenblocks und speichern Sie die resultierende Untermatrix in einer Liste.
Entfernen Sie den letzten Teil der Liste, der unter normalen Umständen aus dem zweiten Array stammt, während die Liste nicht leer ist.
Zählen Sie die Anzahl der Vorkommen dieses Blocks in der ersten Hälfte der Liste, die unter normalen Umständen die verbleibenden Blöcke aus dem ersten Array enthält.
Wenn der Wert nicht Null ist, entfernen Sie das erste Vorkommen dieses Blocks aus der Liste.
Wenn Null, dann lösche die Ausgabe und mache sie falsch.
quelle
J , 55 Bytes
Probieren Sie es online!
Eine schreckliche Lösung, die einfach funktioniert hat - ich kann nicht Golf spielen ...
quelle
Haskell,
7473 BytesHinweis: TIO wurde nicht installiert
Data.Lists
, daher verwende ichData.List
stattdessen eine Funktion, die fehltchunksOf
: Probieren Sie es online aus!quelle
C # (Visual C # Interactive Compiler) , 186 Byte
Probieren Sie es online!
-1 danke an @KevinCruijssen!
Weniger Golf Code:
quelle
j++
entfernt und platziert werden kann+=c[i][j++]+" ";
, um ein Byte zu sparen.PHP ,
186163162 BytesProbieren Sie es online!
Wie bei allen guten Herausforderungen dachte ich, dass dies ziemlich einfach ist und es hat mich ein paar Kurven geworfen. Schön gemacht @Kevin Cruijssen!
Unterteilt die Matrix in Zeichenfolgen, die die Werte für jeden Block enthalten. Die Arrays werden dann sortiert und auf Gleichheit verglichen.
Ungolfed:
Ausgabe
quelle
Rot ,
148147142 BytesProbieren Sie es online!
quelle