Aus dieser Stackoverflow-Frage
Bei einem 2D-Array der Größe werden die Werte gegen den Uhrzeigersinn ausgegeben. Die Ausgabe muss von außen nach innen beginnen und der Anfangspunkt wird immer .
Beispiel gegeben:
Die im Gegenuhrzeigersinn sind dann .
Nun wiederholen wir den Vorgang für die inneren Werte. Dies ergibt eine Matrix wie die folgende
Und die inneren Werte sind dann
Das Endergebnis wird dann
Regeln
- Nehmen Sie eine nicht leere Eingabe an
- Nehmen Sie Matrixwerte als positive ganze Zahlen an
- Es gelten Standard- E / A-Methoden
- Es gelten die Standardregeln für Code-Golf und die Gewinnkriterien
Einige Testfälle
Input
[
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10,11,12,13,14],
[15,16,17,18,19,20,21]
]
Output
1,8,15,16,17,18,19,20,21,14,7,6,5,4,3,2,9,10,11,12,13
--------------------------------------------------------
Input
[
[1,2,3],
[3,2,1],
[4,5,6],
[6,5,4],
[7,8,9],
[9,8,7]
]
Output
1,3,4,6,7,9,8,7,9,4,6,1,3,2,2,5,5,8
-----------------------------------------------------
Input
[
[1]
]
Output
1
-----------------------------------
Input
[
[1, 2],
[2, 1]
]
Output
1,2,1,2
-----------------------------------------------------
Input
[
[1,2,3,6,7],
[2,4,3,2,1],
[3,2,4,5,6],
[6,5,6,5,4],
[10,4,7,8,9],
[12,4,9,8,7]
]
Output
1,2,3,6,10,12,4,9,8,7,9,4,6,1,7,6,3,2,4,2,5,4,7,8,5,5,2,3,4,6
Antworten:
R , 54 Bytes
Mehrere Bytes, die von @ Giuseppe und @ J.Doe gespeichert wurden.
Probieren Sie es online!
Entfernen Sie die erste Spalte rekursiv und vertauschen Sie den Rest der Matrix in umgekehrter Reihenfolge bzw. transponieren Sie ihn (wobei die unterste Zeile zur neuen ersten Spalte wird), bis Sie nur noch eine Spalte haben. Ungolfed "traditionelle" Version:
Es wurde darauf hingewiesen, dass
ncol(m)
man Golf spielen könntesum(m)
, um ein weiteres Byte zu sparen, da wir positive ganzzahlige Matrixwerte annehmen dürfen. Aber ich lasse es so, da es für alle Matrizen funktioniert (auch für Matrizen von Strings!)quelle
t()
verhindert, dass diedrop=TRUE
Vorgabe für`[`
denif
Zustand vermasselt !t()
, dass ich keinenis.null
Test verwenden musste, der meinen ursprünglichen Versuchen entsprach.m
eh null, so können Sie die if-Anweisung für 54 Bytes ändern . Scheint für die Testfälle zu funktionieren.Python 2 , 52 Bytes
Probieren Sie es online!
quelle
Pyth , 9 Bytes
Probieren Sie es hier aus!
Wie?
quelle
Stax , 7 Bytes
Führen Sie es aus und debuggen Sie es
Es nimmt ein Array von Zeilen in einer Zeile und erzeugt eine durch Zeilenumbrüche getrennte Ausgabe.
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
Pyth, 20 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
ok , 12 bytes
Probieren Sie es online!
Dies missbraucht die tatsache, dass oK sich nicht allzu sehr um die umsetzungsform zu kümmern scheint. In k wäre dies 13 Byte :
*:',/(1_+|:)\
.quelle
Sauber , 69 Bytes
Probieren Sie es online!
Verschiebt die nächste Zeile / Spalte an den Anfang der Liste, damit das Muster im Argument übereinstimmt.
Für das erste Beispiel in der Challenge sieht das so aus:
quelle
Julia 0,7 , 47 Bytes
Probieren Sie es online!
Julia verfügt über eine praktische Funktion, mit der die Matrix um 90 Grad gedreht werden kann, sodass keine Umkehroperationen erforderlich sind.
Wie Sie den Compiler-Warnungen entnehmen können, müssen alle Komponenten der ternären Bedingung durch Leerzeichen getrennt sein. In Version 1.0 wurde dies tatsächlich erzwungen.
Seltsamerweise bestand in dieser Situation der kürzeste Weg, den ich fand, um aus der Rekursion auszubrechen, darin, einen Try-Catch-Block zu verwenden:
Julia 1.0 , 50 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 89 Byte
Probieren Sie es online!
Nimmt die erste Spalte, transponiert die verbleibende, kehrt dann jede Zeile um (= dreht die Matrix um 90 Grad im Uhrzeigersinn) und wiederholt sie, bis das Array keine Einträge mehr enthält.
quelle
APL (Dyalog) ,
2422 BytesProbieren Sie es online!
Wie?
quelle
05AB1E ,
131110 Bytes-2 Bytes dank @Emigna .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Gelee , 9 Bytes
Probieren Sie es online!
quelle
Holzkohle , 25 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Drehen Sie den Eingang um 180 °. Dies hat zwei Gründe: a) Die letzte Reihe ist am einfachsten zu entfernen, und b) die Schleife ist einfacher, wenn die Reihe am Ende der Schleife entfernt wird. (Ich habe versucht, im Uhrzeigersinn zu reflektieren und auszugeben, aber das hat ein zusätzliches Byte gekostet.)
Wiederholen, bis das Array leer ist.
Drehen Sie das Array um 90 °.
Entfernen Sie die letzte Zeile des Arrays und drucken Sie das Element als Zeichenfolge in separaten Zeilen.
quelle
Ruby , 65 Bytes
Probieren Sie es online!
quelle
PowerShell , 266 Byte
Ja. PowerShell ist nicht das Beste für den Umgang mit Matrizen. Der Algorithmus ist jedoch im Grunde derselbe wie oben. Jede Zeile wird als durch Kommas getrennte Zeichenfolge dargestellt, und wir führen im Grunde eine Rotation und Transposition für jede Ebene durch. Ich kann mich wahrscheinlich mehr rasieren, aber ... ich bin schon im Schlafanzug ...
Probieren Sie es online!
quelle