Sie erhalten eine quadratische Matrix aus ganzen Zahlen M und eine weitere positive ganze Zahl n , die genau kleiner als die Größe von M ist . Ihre Aufgabe ist es, alle quadratischen Teilmatrizen von M der Größe n zu erzeugen .
Für die Zwecke dieser Herausforderung ist eine quadratische Untermatrix eine Gruppe benachbarter Zeilen und Spalten, die in M enthalten sind .
Eingabe- / Ausgabeformate
Es steht Ihnen frei, ein anderes vernünftiges Format zu wählen. Dies sind nur einige Beispiele.
Eingang
- Eine Matrix im nativen Matrixtyp (falls Ihre Sprache eine hat)
- Ein 2D-Array (ein Array von 1D-Arrays, die jeweils einer Zeile / einer Spalte entsprechen)
- Ein 1D-Array (da die Matrix immer quadratisch ist)
- Eine Zeichenkette (Sie haben den Abstand gewählt, aber bitte missbrauchen Sie diesen in keiner Weise) usw.
Ausgabe
- Eine Matrix von Matrizen.
- Ein 4D Array, bei dem jedes Element (3D Liste) die Untermatrizen einer Zeile / Spalte darstellt.
- Ein 3D-Array, bei dem jedes Element (2D-Liste) eine Untermatrix darstellt.
- Eine Zeichenfolgendarstellung der resultierenden Untermatrizen usw.
Technische Daten
- Sie können auch die Größe von M als Eingabe verwenden. Es ist garantiert mindestens 2 .
- Die Ausrichtung der Ausgabe ist beliebig: Sie können festlegen, dass die Untermatrizen als Listen von Spalten oder Zeilen ausgegeben werden. Ihre Auswahl muss jedoch konsistent sein.
- Sie können sich in jeder Programmiersprache messen und über jede Standardmethode Eingaben und Ausgaben vornehmen , wobei Sie diese Lücken beachten müssen standardmäßig verboten sind.
- Dies ist Codegolf , daher gewinnt die kürzeste Übermittlung (in Bytes) für jede Sprache .
Beispiel
Bei n = 3 und M :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Die möglichen 3x3- Submatrizen sind:
+ ------- + + -------- + 1 2 3 4 1 2 3 4 | 1 2 3 | 4 1 | 2 3 4 | + -------- + + -------- + | 5 6 7 | 8 5 | 6 7 8 | | 5 6 7 | 8 5 | 6 7 8 | | 9 10 11 | 12 9 | 10 11 12 | | 9 10 11 | 12 9 | 10 11 12 | + ------- + + -------- + | 13 14 15 | 16 13 | 14 15 16 | 13 14 15 16 13 14 15 16 + -------- + + -------- +
Das Ergebnis wäre also:
[[[1, 2, 3], [5, 6, 7], [9, 10, 11]], [[2, 3, 4], [6, 7, 8], [10, 11, 12]], [[5, 6, 7], [9, 10, 11], [13, 14, 15]], [[6, 7, 8], [10, 11, 12], [14, 15, 16]]]
Wie oben erwähnt, eine Ausgabe von:
[[[1, 5, 9], [2, 6, 10], [3, 7, 11]], [[2, 6, 10], [3, 7, 11], [4, 8, 12]], [[5, 9, 13], [6, 10, 14], [7, 11, 15]], [[6, 10, 14], [7, 11, 15], [8, 12, 16]]]
Dies ist auch akzeptabel, wenn Sie die Untermatrizen stattdessen als Zeilenlisten zurückgeben.
Testfälle
Die Eingänge M, n :
[[1,2,3],[5,6,7],[9,10,11]], 1
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 3
[[100,-3,4,6],[12,11,14,8],[0,0,9,3],[34,289,-18,3]], 2
[[100,-3,4,6],[12,11,14,8],[9,10,11,12],[13,14,15,16]], 3
Und die entsprechenden Ausgaben (Submatrizen als Zeilenlisten):
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,2,3],[5,6,7],[9,10,11]],[[2,3,4],[6,7,8],[10,11,12]],[[5,6,7],[9,10,11],[13,14,15]],[[6,7,8],[10,11,12],[14,15,16]]]
[[[100,-3],[12,11]],[[-3,4],[11,14]],[[4,6],[14,8]],[[12,11],[0,0]],[[11,14],[0,9]],[[14,8],[9,3]],[[0,0],[34,289]],[[0,9],[289,-18]],[[9,3],[-18,3]]]
[[[100,-3,4],[12,11,14],[9,10,11]],[[-3,4,6],[11,14,8],[10,11,12]],[[12,11,14],[9,10,11],[13,14,15]],[[11,14,8],[10,11,12],[14,15,16]]]
Oder als Spaltenliste:
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,5,9],[2,6,10],[3,7,11]],[[2,6,10],[3,7,11],[4,8,12]],[[5,9,13],[6,10,14],[7,11,15]],[[6,10,14],[7,11,15],[8,12,16]]]
[[[100,12],[-3,11]],[[-3,11],[4,14]],[[4,14],[6,8]],[[12,0],[11,0]],[[11,0],[14,9]],[[14,9],[8,3]],[[0,34],[0,289]],[[0,289],[9,-18]],[[9,-18],[3,3]]]
[[[100,12,9],[-3,11,10],[4,14,11]],[[-3,11,10],[4,14,11],[6,8,12]],[[12,9,13],[11,10,14],[14,11,15]],[[11,10,14],[14,11,15],[8,12,16]]]]
quelle
Antworten:
05AB1E , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
MATL , 4 Bytes
Eingänge sind
n
dannM
.Die Ausgabe ist eine Matrix, in der jede Spalte alle Spalten einer Untermatrix enthält.
Probieren Sie es online!
Erläuterung
Mehr ernst,
t
nimmt die Eingabe n implizit und dupliziert es auf dem Stapel.h
verkettet beide Kopien von n und erzeugt das Array [n, n] . Nimmt implizitYC
die Eingabe M , extrahiert alle ihre [n, n] -Größenblöcke und ordnet sie als Spalten in der Hauptreihenfolge der Spalten an. Dies bedeutet, dass die Spalten jedes Blocks vertikal gestapelt sind, um eine einzelne Spalte zu bilden.quelle
APL (Dyalog Unicode) , 26 Byte SBCS
Anonymes Infix Lambda mit n als linkem Argument und M als rechtem Argument.
Probieren Sie es online!
{
...}
anonymes Lambda, wobei⍺
das linke und⍵
das rechte Argument ist:⊢⍵
das richtige Argument liefern (⊢
trennt⍺ ⍺
von⍵
)⊢⌺⍺ ⍺
alle⍺
-by-⍺
einschließlich derjenigen, die die Kanten überlappen (diese sind mit Nullen aufgefüllt)(
…)↓
Lassen Sie die folgenden Zahlenelemente entlang der ersten beiden Dimensionen fallen:⍺÷2
die Hälfte von⍺
¯1+
negative eins plus das⌈
zusammenfassen2⍴
zyklisch r eshape auf eine Liste von zwei Elementens←
ins
(für s hards)-
negieren (dh von hinten fallen lassen)s↓
Drop-s
Elemente entlang der ersten und zweiten Dimension (von vorne)quelle
APL (Dyalog Unicode) , 31 Byte
Probieren Sie es online!
Ein anderer Ansatz als bei Adám.
quelle
⍉
für nicht-triviale Fälle einsetzen können, haben Sie die Array-Programmierung wirklich beherrscht.R , 75 Bytes
Probieren Sie es online!
Takes
M
,N
und dasS
Ize der Matrix.Druckt die resultierenden Matrizen auf stdout.
drop=F
wird benötigt, damit in demN=1
Fall, in dem die Indizierung dasdim
Attribut nicht löscht und amatrix
statt a ergibtvector
.quelle
J ,
118 Bytes-3 Bytes dank Meilen
Probieren Sie es online!
quelle
<;._3~,~
und verwendet stattdessen einen Haken, um die Größe mit sich selbst zu koppeln. Anschließend werden jeweils Schnitte und Kästchen eingefügt, da eine Matrix von Matrizen als Ausgabe zulässig ist.Haskell , 67 Bytes
Probieren Sie es online!
quelle
Gelee , 5 Bytes
Verwendet das 4D Ausgabeformat. Fügen Sie
Ẏ
für 3D ein für 6 Bytes an .Probieren Sie es online!
Wie es funktioniert
quelle
ṡ€Zṡ€
.Brachylog , 13 Bytes
Probieren Sie es online!
Dies gibt Listen von Spalten zurück.
Technisch gesehen
tN&s₎\;Ns₎
ist es ein generierendes Prädikat, das seine Ausgabe mit einer dieser Submatrizen vereinheitlicht. Wir gebrauchen{…}ᶠ
nur, um alle Möglichkeiten aufzudecken.Erläuterung
quelle
Stax , 10 Bytes
Starte es
Die ASCII-Darstellung des gleichen Programms ist
Das funktioniert so.
quelle
JavaScript (ES6), 91 Byte
Übernimmt Eingaben in der Currying-Syntax
(a)(n)
. Gibt die Ergebnisse als Zeilenlisten zurück.Testfälle
Code-Snippet anzeigen
quelle
APL (Dyalog Classic) ,
2423 BytesProbieren Sie es online!
Das Ergebnis ist eine Matrix aus Matrizen, obwohl die Ausgabeformatierung von Dyalog dies nicht sehr offensichtlich macht
Geben Sie die Matrix (
⎕
) ein, verwandeln Sie jedes Element in eine eigene verschachtelte Matrix (⍪¨
), nehmen Sie Präfixverkettungen nach Zeile (,\
) und nach Spalte (⍪⍀
) vor, geben Sie n (⎕
) ein und löschen Sie die ersten n-1 Zeilen und Spalten verschachtelter Matrizen ((¯1-t←-2⍴⎕)↓
), nimm die rechte untere n-mal-n-Ecke von jeder Matrix (t∘↑¨
)quelle
Ruby , 63 Bytes
Probieren Sie es online!
Dies ist ein Lambda, das ein 2D-Array und ein int-Array aufnimmt und ein 3D-Array zurückgibt.
Ungolfed:
quelle
Python 2 , 91 Bytes
Probieren Sie es online!
quelle
def f(a,n):R=range(len(a)+1-n);print[[r[i:i+n]for r in a[j:j+n]]for i in R for j in R]
spart fünf.