Die Idee
Wir haben schon einmal Matrixspiralen gemacht und volle Rotationen und sogar diagonale Rotationen , aber soweit ich das beurteilen kann, keine Schlangenrotationen !
Was ist eine Schlangenrotation?
Stellen Sie sich die Reihen einer Matrix vor, die sich hin und her schlängeln, mit Trennlinien zwischen ihnen wie die Trennlinien einer langen Warteschlange:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15|
+------------ |
20 19 18 17 16|
+--------------+
Stellen Sie sich nun vor, Sie drehen diese Objekte um 2. Jedes Objekt rückt vor, so wie sich Personen in einer Reihe bewegen, und die Objekte am Ende werden ausgeblendet und kehren zum Anfang zurück:
+--------------+
--> 19 20 1 2 3|
+------------ |
| 8 7 6 5 4|
| +-----------+
| 9 10 11 12 13|
+------------ |
<-- 18 17 16 15 14|
+--------------+
Wenn es eine ungerade Anzahl von Zeilen gibt, wird es von rechts beendet, aber immer noch zum Anfang umgebrochen. Zum Beispiel ist hier eine 3 Drehung:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15
+--------------+
+--------------+
--> 13 14 15 1 2|
+------------ |
| 7 6 5 4 3|
| +-----------+
| 8 9 10 11 12 -->
+--------------+
Eine negative Drehung führt Sie rückwärts. Hier ist eine -2 Drehung:
+--------------+
<-- 3 4 5 6 7|
+------------ |
|12 11 10 9 8|
| +-----------+
|13 14 15 1 2 <--
+--------------+
Die Herausforderung
Ihre Funktion oder Ihr Programm nimmt 2 Eingaben in einem beliebigen Format entgegen:
- Eine Matrix
- Eine Ganzzahl (positiv oder negativ), die angibt, an wie vielen Stellen gedreht werden soll.
Es wird zurückkehren:
- Die gedrehte Matrix
Anmerkungen:
- Code Golf. Wenigste Bytes gewinnt.
- Matrizen müssen nicht quadratisch sein, sondern enthalten mindestens 2 Zeilen und 2 Spalten
- Positive Ganzzahlen drehen Zeile 1 nach rechts
- Negative Ganzzahlen drehen Zeile 1 nach links
- Sie können die Bedeutung von positiven / negativen Rotationsnummern umkehren, falls dies zweckmäßig ist
- Die Rotationsnummer kann größer sein als die Anzahl der Elemente. In diesem Fall wird es gewickelt. Das heißt, es entspricht der Anzahl Modulo der Anzahl der Elemente.
- Die Matrix enthält nur Ganzzahlen, kann jedoch beliebige Ganzzahlen enthalten, einschließlich Wiederholungen
Testfälle
Format:
- Matrix
- Umdrehungszahl
- Erwarteter Rückgabewert
4 5
6 7
1
6 4
7 5
2 3 4 5
6 7 8 9
10 11 12 13
-3
5 9 8 7
12 11 10 6
13 2 3 4
8 8 7 7
5 5 6 6
10
5 5 8 8
6 6 7 7
Antworten:
Gelee , 10 Bytes
Ein dyadischer Link, der den Marix auf der linken Seite und die Rotationszahl auf der rechten Seite akzeptiert (verwendet die umgekehrte Bedeutung von positiv / negativ)
Probieren Sie es online!
Wie?
quelle
R ,
121110101 BytesProbieren Sie es online!
Komplettlösung
quelle
Python 3.8 (Pre-ReleasSSSse) , 119 Bytes
Eine unbenannte Funktion,
matrix, rotation
die die neue Matrix akzeptiert .Verwendet das entgegengesetzte Rotationszeichen.
Probieren Sie es online!
Wie?
Wir haben uns vorgenommen,
n=-1
Klammern später zu speichern und die Matrix alsm
und die Rotation als zu übernehmenr
.Eine neue Matrix wird mit denselben Abmessungen wie
m
- mit einer Breite vonw
(w:=len(m[0])
) und einer Höhe vonh
(h:=len(m)
) konstruiert .Jede zweite Zeile dieser Matrix ist umgekehrt (
[::n**j]
).Die Werte werden durch Berechnen ihrer Zeile und Spalte im Original unter
m
Verwendung der aktuellen Elemente row,,i
und column,j
... nachgeschlagen.Wir setzen
s
aufr+i
undk
zu(j+s//w)%h
.k
ist die Zeile des Originals, auf die für unser aktuelles Element zugegriffen werden soll.Um einfach von rechts auf ungerade indizierte Zeilen zuzugreifen, kehren wir diese Zeilen um, bevor wir auf ihre Elemente (mit
[:n**k]
) zugreifen. Dies bedeutet, dass sich das Element von Interesse auf befindets%w
.quelle
J ,
413021 Bytes-11 Bytes danke an Jonah!
-9 Bytes dank FrownyFrog & ngn!
Probieren Sie es online!
Rückgängig gemacht
+/-
quelle
$@]t@$(|.,@(t=.#\,`(|.@,)/.]))
( Online ausprobieren! )&.
ich es versuchte, verlor ich die ganze Zeit den linken Streit, deshalb gab ich auf.JavaScript (Node.js) , 102 Byte
Übernimmt die Eingabe als
(matrix)(integer)
. Die Bedeutung des Vorzeichens der ganzen Zahl ist invertiert.Probieren Sie es online!
Hilfsfunktion
Hauptfunktion
quelle
05AB1E , 16 Bytes
Probieren Sie es online!
Danke an Emigna für -5. Leider kann ich nicht sehen, wie man den überflüssigen Teil ausspielt. :(
quelle
Kohle , 36 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Alternierende Zeilen der Eingabe umkehren.
Reduzieren Sie das Array.
Drehen Sie das abgeflachte Array.
Teilen Sie das Array wieder in Zeilen auf.
Wechselnde Zeilen umkehren.
Konvertieren Sie jeden Eintrag in eine Zeichenfolge und geben Sie ihn im Standardausgabeformat aus. Dabei handelt es sich um eine Zahl pro Zeile mit Zeilen in doppelten Abständen. (Das Formatieren mit einem Trennzeichen würde die Länge des Trennzeichens kosten.)
quelle
Pyth, 20 Bytes
Probieren Sie es hier online aus .
quelle
Japt , 28 Bytes
Versuch es
Antwort von Port of Arnauld . Die größte Herausforderung bestand darin, eine wiederverwendbare Funktion zu erstellen. Insbesondere gibt es eine Hilfsfunktion, um jede zweite Zeile umzukehren. Der Ansatz, den ich verwende, besteht darin, einen rekursiven Aufruf durchzuführen und davon abzuhängen, ob eine Variable festgelegt ist.
Transpiled JS:
quelle
Python 3 , 94 Bytes
Probieren Sie es online!
Verwendete die ungerade Zeilenumkehrung aus Jonathan Allans Antwort .
quelle
APL (Dyalog Classic) , 20 Byte
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 141 Byte
Probieren Sie es online!
-5 Bytes insgesamt dank @someone!
Anonyme Funktion, die eine direkte Änderung der Eingabematrix vornimmt.
Eine einzelne Schleife durchläuft die Zellen. Sie können mit den folgenden Formeln von oben nach unten und von links nach rechts scannen:
row=i/w
col=i%w
Wo
i
ist ein Schleifenzähler undw
ist die Anzahl der Spalten. Dies variiert geringfügig beim Scannen in einem Schlangenmuster.row=i/w
col=i%w
(0., 2., 4. usw. Reihe)col=w-i%w-1
(1., 3., 5. usw. Reihe)Eine weitere zu beachtende Sache ist, dass das
%
in C # nicht in einen positiven Wert konvertiert wird, wie dies in einigen anderen Sprachen der Fall ist. Ein paar zusätzliche Bytes sind erforderlich, um dies zu berücksichtigen.quelle
dynamic
; Kommentar auch l. Probieren Sie es online!var
Golf zu spielen, bei dem Sie keine Liste von Variablen deklarieren können. Wahrscheinlich, warum ich das verpasst habe. Guter Fang!y
Ganz loswerden , um 2 Bytes zu sparen: Online ausprobieren!