Einführung
Angenommen, Sie haben eine Liste mit Listen mit ganzen Zahlen (oder Objekten, aber der Einfachheit halber bleiben wir bei ganzen Zahlen). Die Listen können unterschiedlich lang und teilweise leer sein. Lassen Sie uns die Listen in einem tabellarischen Format schreiben:
[[ 1, 2, 3, 4, 5],
[ 6, 7],
[ 8, 9, 10, 11],
[],
[12, 13, 14],
[15, 16, 17, 18]]
Diese Tabelle hat 5 vertikale Spalten, die Zahlen enthalten 1, 6, 8, 12, 15
, 2, 7, 9, 13, 16
, 3, 10, 14, 17
, 4, 11, 18
, und 5
. Wenn wir jede Spalte umkehren, so erhalten wir die Listen 15, 12, 8, 6, 1
, 16, 13, 9, 7, 2
, 17, 14, 10, 3
, 18, 11, 4
, und 5
. Lassen Sie uns diese Zahlen wieder in die Spalten der Tabelle einfügen und dabei die Länge der Zeilen wie zuvor beibehalten:
[[15, 16, 17, 18, 5],
[12, 13],
[ 8, 9, 14, 11],
[],
[ 6, 7, 10],
[ 1, 2, 3, 4]]
Ihre Aufgabe ist es, diese Operation zu implementieren.
Ein- und Ausgabe
Ihre Eingabe ist eine Liste von Listen nichtnegativer Ganzzahlen, die die Zeilen darstellen. Die Zeilen können unterschiedlich lang und teilweise leer sein. Es wird immer mindestens eine Zeile geben. Ihre Ausgabe ist das Ergebnis der Umkehrung jeder Spalte, wie oben beschrieben. Eingabe und Ausgabe können in jedem vernünftigen Format erfolgen.
Die niedrigste Byteanzahl in jeder Sprache gewinnt. Es gelten die Standardregeln für Code-Golf .
Testfälle
[[]] -> [[]]
[[],[]] -> [[],[]]
[[8,5,1]] -> [[8,5,1]]
[[1,200],[0,3]] -> [[0,3],[1,200]]
[[],[3,9],[1],[]] -> [[],[1,9],[3],[]]
[[],[5,8,7],[0,6,5,7,1]] -> [[],[0,6,5],[5,8,7,7,1]]
[[1,8,5],[7,5,4],[],[1]] -> [[1,5,4],[7,8,5],[],[1]]
[[],[],[2],[],[31],[],[5],[],[],[],[7]] -> [[],[],[7],[],[5],[],[31],[],[],[],[2]]
[[1,10,100,1000],[2,20,200],[3,30],[4],[5,50,500],[6,60],[7]] -> [[7,60,500,1000],[6,50,200],[5,30],[4],[3,20,100],[2,10],[1]]
[[8,4],[3,0,4,8,1],[8],[0,8],[9,7,1,6],[3,8,1,9,5]] -> [[3,8],[9,7,1,9,5],[0],[8,8],[3,0,1,6],[8,4,4,8,1]]
[[3,9,3],[5],[1],[3,5],[9,0,6,2],[1,3],[4,9,2],[6,6,7,8,7]] -> [[6,6,7],[4],[1],[9,9],[3,3,2,8],[1,0],[5,5,6],[3,9,3,2,7]]
[[8,5,6],[3,5,2,4,9],[4,3,8,3,7],[6,1,1],[1,8,9,9],[9,1,2],[8,7]] -> [[8,7,2],[9,1,9,9,7],[1,8,1,3,9],[6,1,8],[4,3,2,4],[3,5,6],[8,5]]
[[2,4],[1,4],[0,8,7,3],[4,9,2,5],[2,8,0],[0,8,3],[7,3,1],[],[3,3,7,8]] -> [[3,3],[7,3],[0,8,7,8],[2,8,1,5],[4,9,3],[0,8,0],[1,4,2],[],[2,4,7,3]]
[[1,9],[3],[2,4,5]] -> [[2,4],[3,null],[1,9,5]]
)Antworten:
Gelee , 16 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
ṣ
auf der obersten Linie ist sehr schlau! (ḟṚṁṣj
Tut nicht⁸ḟ⁹Ṛṁ⁸ṣ⁹¤j⁹
wahr?) Sonst hatte ich dies mehr Byte für einJapt ,
1513 Bytes2 Bytes gespart dank @Shaggy
Online testen!
Die zweite Zeile kann entfernt werden, wenn wir die Zeilen mit Nullwerten auffüllen dürfen, wodurch 4 Bytes gespart werden.
Erläuterung
quelle
l;
mitÊ
undmf_Ä
mit ersetzen®fÄ
.mf
für die zweite Zeile zu funktionieren.mf
würde aber leider alle Nullen im Ergebnis loswerden ...APL (Dyalog Unicode) ,
20 -19 -16 Byte SBCS-4 danke an ngn.
Volles Programm. Fordert zur Eingabe von STDIN auf.
Probieren Sie es online!
Erläuterung mit Beispieldurchgang
⎕
Eingabeaufforderung für ausgewertete Eingabe[[1,8,5],[7,5,4],[],[1]]
*
Erhöhung e die Kraft , daß ( e n , die sicherstellt , dass es keine Nullen)[[2.7,2981,148.4],[1096.6,148.4,54.6],[],[2.7]]
↑
Mischen Sie die Listen in einer einzigen Matrix, die mit Nullen aufgefüllt ist:┌ ┐
│2.7E0 3.0E3 1.5E2│
│1.1E3 1.5E2 5.5E1│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
⍉
transponieren┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│3.0E3 1.5E2 0.0E0 0.0E0│
│1.5E2 5.5E1 0.0E0 0.0E0│
└ ┘
⌽@×⍤1
kehren Sie die positiven Elemente jeder Reihe um┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│1.5E2 3.0E3 0.0E0 0.0E0│
│5.5E1 1.5E2 0.0E0 0.0E0│
└ ┘
⍉
transponieren┌ ┐
│2.7E0 1.5E2 5.5E1│
│1.1E3 3.0E3 1.5E2│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
↓
Teilen Sie die Matrix in eine Liste von Listen[[2.7,148.4,54.6],[1096.6,2981,148.4],[0,0,0],[2.7,0,0]]
0~¨⍨
Entfernen Sie Nullen aus jeder Liste[[2.7,148.4,54.6],[1096.6,2981,148.4],[],[2.7]]
⍟
natürlicher Logarithmus[[1,5,4],[7,8,5],[],[1]]
quelle
K4 , 36 Bytes
Lösung:
Beispiele:
Erläuterung:
Dieser hat mir wehgetan, und ich arbeite immer noch daran, die einfache Indizierung zu vereinfachen.
Anstatt zum Beispiel um zu indizieren,
x[0]
was die erste Zeile zurückgeben würde , möchten wir die erste Spalte nehmen , was mit getan werden kannx[;0]
.Jedoch vorbei Variable
y
inx[;]
behandelt sie wie tunx[y]
nichtx[;y]
damit die schiebend::
dort:x[::;]
.Dies ist gleichbedeutend mit dem Umblättern der Listen, erfordert jedoch, dass alle Listen gleich lang sind!
quelle
Haskell , 174 Bytes
Probieren Sie es online!
Ungolfed / Erklärung
Die Idee ist, alle Elemente einzuwickeln
[]
und die Zeilen mit Pads zu versehen[]
(es hat sich herausgestellt, dass es kürzer ist als das Auffüllen mit einer negativen Ganzzahl, was auch negative Eingaben erlaubt, was gut ist), dann zu transponieren, alle Zeilen umzukehren und erneut zu transponieren und jede Zeile zu glätten :* Diese Transponierungsfunktion (
h
) gibt einfach die Liste zurück, wenn überhaupt keine Elemente vorhanden sind.Die Umkehrfunktion muss
[]
Elemente ignorieren (zB[[],[1],[],[3],[4]]
->[[],[4],[],[3],[1]]
), indem sie zwei Argumente empfängt: Das erste sind die Elemente in umgekehrter Reihenfolge (zB[4,3,1]
) und das zweite die ursprüngliche Zeile.quelle
Python 2 ,
11110592 BytesProbieren Sie es online!
quelle
print
anstelle vonreturn
ein Byte speichern.JavaScript (ES6),
7976 BytesBearbeiten: 3 Bytes dank @ETHproductions gespeichert.
quelle
APL (Dyalog Unicode) , 27 Byte SBCS
Probieren Sie es online!
quelle
@
aber ich habe es nicht.Clojure, 123 Bytes
Ich hatte erwartet
(+ nil)
, eine Ausnahme auszulösen, aber es wird ausgewertetnil
: oDies funktioniert ohne Auffüllen, stattdessen wird gezählt, wie viele der vorherigen Zeilen mindestens so lang sind wie die aktuelle Zeile
R
.quelle