Herausforderung
Drehen Sie bei einer quadratischen Zeichenmatrix (druckbare Einzelbyte-ASCII-Zeichen) jeden "Ring" der Matrix in entgegengesetzte Richtungen.
Nehmen wir ein Beispiel:
1 2 3 4 5
6 7 8 9 A
B C D E F
G H I J K
L M N O P
Dann wird der äußerste Ring wie folgt um 90 Grad im Uhrzeigersinn gedreht:
1 2 3 4 5 L G B 6 1
6 A M 2
B F => N 3
G K O 4
L M N O P P K F A 5
Der zweite Ring wird um 90 Grad gegen den Uhrzeigersinn gedreht:
7 8 9 9 E J
C E => 8 I
H I J 7 C H
Der letzte Ring wird um 90 Grad im Uhrzeigersinn gedreht. Da es sich jedoch um eine einzelne Zahl handelt (in unserem Beispiel um einen Buchstaben), ist dies nicht wirklich betroffen.
Das Endergebnis ist:
L G B 6 1
M 9 E J 2
N 8 D I 3
O 7 C H 4
P K F A 5
Wenn die Matrix eine gerade Seitenlänge hat, ist der innerste Ring ein 2x2-Quadrat und sollte immer noch gedreht werden.
Eingang
Eine Liste von Listen in einem angemessenen Standardformat. Beispielsweise ist eine durch Zeilenumbrüche oder Leerzeichen getrennte Zeichenfolge oder eine Liste von durch Leerzeichen getrennten Zeichenfolgen zulässig, eine Liste der Werte als Ringe um die Matrix ist jedoch nicht zulässig. Die Zeichen sind nicht unbedingt eindeutig.
Ausgabe
Eine Liste von Listen in einem angemessenen Standardformat. Gleiche Regeln wie die Eingabe.
Testfälle
1 2 3 7 4 1
4 5 6 => 8 5 2
7 8 9 9 6 3
1 2 3 4 5 6 Y S M G A 1
A B C D E F Z E K Q W 2
G H I J K L => ! D O I V 3
M N O P Q R @ C P J U 4
S T U V W X # B H N T 5
Y Z ! @ # $ $ X R L F 6
Credits
Stark inspiriert von einer ähnlichen Herausforderung , bei der jedes Element um eine Position gegen den Uhrzeigersinn gedreht wird (nicht um 90 Grad).
Antworten:
Haskell , 94 Bytes
Eine anonyme Funktion, die eine Liste von
String
s aufnimmt und zurückgibt .Verwenden Sie als
(cycle[t.r,r.t,r.t,r.t]?)["123", "456", "789"]
.Probieren Sie es online!
Wie es funktioniert
r
istreverse
.t
ist ein Byte kürzer als der ImportData.List.transpose
.t.r
Dreht eine Liste von Listen um 90 Grad im Uhrzeigersinn undr.t
gegen den Uhrzeigersinn.?
zwei Argumente, eine Liste von Funktionen und eine Matrix als Liste von Zeichenfolgen.?
die erste Funktionf
aus der Liste der Funktionen und die erste Zeilea
aus der Matrix entfernt.b
der Matrix im Uhrzeigersinn und wiederholt diese und die übrigen Funktionen. Dadurch wird die Matrix nach und nach von außen nach innen gestrippt, jeweils ein Ring in vier Schritten.a
dem Ergebnis vorangestellt und die Funktion angewendetf
, um die Ausrichtung der Matrix anzupassen.?
mit der Eingabematrix eine Liste von Zeichenfolgen und eine unendliche Liste von Funktionen auf, die sich zyklisch alle vier Schritte wiederholt.?
bei einer Rekursion ausgeführt wird.quelle
Python 2 , 104 Bytes
Probieren Sie es online!
x[l-i][j]
sind die Koordinaten einer Drehung im Uhrzeigersinnx[i][l-j]
für eine Drehung gegen den Uhrzeigersinn.min(i,j,l-i,l-j)%2
wird verwendet, um die richtige Richtung zu wählenquelle
Mathematica, 113 Bytes
es ist besser, als Zeichenfolge wie "E" für spezielle Buchstaben wie E, I ...
Eingang
Ausgabe
quelle
Oktave, 86 Bytes
Probieren Sie es online!
quelle