Angenommen, ich habe die folgende (2D) Matrix:
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Drehen Sie die Matrix gegen den UhrzeigersinnR
(nicht in 90-Grad-Schritten, sondern jeweils nur um eine Zahl).
1 2 3 4 2 3 4 8 3 4 8 12
5 6 7 8 --> 1 7 11 12 --> 2 11 10 16
9 10 11 12 5 6 10 16 1 7 6 15
13 14 15 16 9 13 14 15 5 9 13 14
Abgeschlossenes Beispiel:
Eingang:
2
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Ausgabe:
[[3, 4, 8, 12],
[2, 11, 10, 16],
[1, 7, 6, 15],
[5, 9, 13, 14]]
(Seltsame Leerzeichen sollen die Zahlen in schönen Spalten ausrichten)
Der äußere "Ring" der Matrix dreht sich 2 gegen den Uhrzeigersinn und der innere rechte dreht sich 2 ebenfalls. In dieser Matrix gibt es nur zwei Ringe.
Ein Beispiel mit 1 "Ring":
2
[[1, 2],
[3, 4],
[5, 6]]
Sollte ausgeben:
[[4, 6],
[2, 5],
[1, 3]]
Ihre Herausforderung besteht darin, eine Matrix und eine Ganzzahl aufzunehmen R
und die übersetzte Version nach R
Rotationen auszugeben .
Die Drehung einer 4x5-Matrix wird durch die folgende Abbildung dargestellt:
Einschränkungen:
2 ≤ M, N ≤ 100
, wobei M und N die Dimensionen der Matrix sind. Es ist garantiert, dass das Minimum von M und N gerade ist.1 ≤ R ≤ 80
, wobei r die Anzahl der Umdrehungen ist.- Die Matrix enthält immer nur positive ganze Zahlen.
- Werte sind nicht immer unterschiedlich.
- Die Eingabe sollte immer als 2D-Array erfolgen (wenn Sie keine Laufzeiteingabe als 2D-Array verwenden können, müssen Sie nur einen anderen Weg finden, um Eingaben zu erhalten).
Ein weiterer Testfall mit nicht eindeutigen Werten:
1
[[1, 1],
[2, 2],
[3, 3]]
Ausgänge:
[[1, 2],
[1, 3],
[2, 3]]
Dies ist Code-Golf , so dass die kürzeste Antwort gewinnt!
quelle
[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 16], [5, 9, 13, 14]]
die 16 ist plötzlich dupliziert, denke ich sollte es sein[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 15], [5, 9, 13, 14]]
:?Antworten:
Jelly ,
39383635 BytesProbieren Sie es online!
quelle
Oktave, 210 Bytes
Probieren Sie es auf Octave Online aus!
Ungolfed-Version:
Erläuterung:
Eine Funktion, die eine Zahl erhält und einen Bereich erzeugt, der für Eingabe 4 (gerade) geordnet und zentriert ist,
-2 -1 1 2
für Eingabe 5 (ungerade) erzeugt, erzeugt
-2.5 -1.5 0 1 2
nur, dass sie geordnet und zentriert sein sollte
eine komplexe Matrix, die aus Bereichen generiert wird
Rechnen Sie rechteckige Koordinaten in Polarkoordinaten um und geben Sie die Winkel zurück, sodass sie für jeden Ring gegen den Uhrzeigersinn sortiert werden
Die folgende Matrix wurde generiert
Berechnet die Distanztransformation von B unter Verwendung der Schachbrettdistanz, um Ringindizes zu generieren
Für eine 6 * 7-Matrix haben wir die folgende Matrix
lexikografische Sortierung zuerst basierend auf dem Ringindex und dann nach Winkel (Indizes der zurückgegebenen sortierten Elemente)
und schließlich jeden Ring kreisförmig verschieben.
quelle
Python 3,
292288 BytesNimmt Eingaben mit entfernten Zeilenumbrüchen vor, lässt jedoch ein Leerzeichen nach der Anzahl der Schritte, um die die Eingabe gedreht werden soll.
Erläuterung:
Anstatt die Matrix gemäß dem Vorschlag des OP als eine Reihe konzentrischer Ringe zu modellieren, kann man sie stattdessen in vier Bereiche unterteilen, in denen sich die Elemente während einer einzelnen Drehung entweder nach oben, unten, rechts oder links bewegen. Dies ist der Zweck der langen bewerteten Zeichenfolge
f
: um zu bestimmen, in welche Region jedei,j
Kombination fällt. Das Ergebnis wird dann zweimal in nachgeschlagenl
, wodurch das Element erhalten wird,i,j
das im nächsten Schritt in Position gedreht werden muss . Die Funktiong
, die all dies ausführt und nach einem einzelnen Schritt die neue Matrix bildet, wird dann wiederholt aufgerufen, indem eine generierte Zeichenfolge ausgewertet wird, die die Darstellung eines verschachtelten Funktionsaufrufs enthält.Als ich das ursprünglich gemacht habe, habe ich versehentlich die Matrix im Uhrzeigersinn anstatt gegen den Uhrzeigersinn gedreht. Anstatt eine ordnungsgemäße Korrektur vorzunehmen, habe ich zwei strategisch platzierte Kopien von hinzugefügt
[::-1]
, um die Matrix vor und nach der Drehung umzukehren. Diese könnten wahrscheinlich auf ~280golfen werden276 Bytes , aber ich bin zu faul, um das zu tun.Dies ist auch ein schneller, nicht getesteter Port aus einem etwas längeren Python 2-Programm. Verzeih mir, wenn er nicht richtig funktioniert. Hier ist sowieso der Python 2-Code:
EDIT: golfed aus 4 Bytes durch den Austausch
or
mit|
zweimal.and
kann leider nicht geholfen werden.quelle
Perl,
330328 BytesProbieren Sie es auf Ideone .
Ungolfed:
quelle