Manchmal habe ich Listen mit konstanten Matrizen in meinem Code:
[ [[1, 0],
[0, 1]],
[[1, 0],
[0,-1]],
[[0, 1],
[1, 0]],
[[0,-1],
[1, 0]] ]
Das ist eine schreckliche Nutzung von Bildschirmgrundstücken. Ich würde sie viel lieber nebeneinander schreiben:
[ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Sie werden feststellen, dass dies immer noch eine syntaktisch gültige verschachtelte Liste ist, sie nicht mehr rechteckig ist und eine ganz andere Struktur aufweist (insbesondere wird sie mit jedem Hinzufügen einer Matrix größer als 1x1 tiefer). Es ist jedoch weiterhin möglich, die ursprüngliche Liste der Matrizen aus dieser neuen Liste zu rekonstruieren.
Damit ich diese Syntax in Zukunft verwenden kann, müssen Sie Code schreiben, der in horizontaler Anordnung geschriebene Arrays in die Liste der Matrizen konvertiert, die sie darstellen.
Um sicherzustellen, dass Antworten keinen 2D-Musterabgleich für das Layout im Quellcode durchführen, wird die Eingabe entweder nur als Array-Objekt angegeben, oder wenn Sie eine Zeichenfolgendarstellung verwenden, enthält sie kein Leerzeichen, das angibt, wie das Literal wurde in den Code geschrieben. Sie würden also eine Eingabe wie diese erhalten:
[[[1, 0], [[1, 0], [[0, 1], [[0,-1], [0, 1]], [0,-1]], [1, 0]], [1, 0]]]
Die Ausgabe sollte das folgende Array oder seine Zeichenfolgendarstellung sein (wiederum ist kein weiteres Layout erforderlich):
[[[1, 0], [0, 1]], [[1, 0], [0,-1]], [[0, 1], [1, 0]], [[0,-1], [1, 0]]]
Dies ist der erste und einfachere Teil einer zweiteiligen Herausforderung. In diesem Fall können Sie davon ausgehen, dass alle Matrizen quadratisch sind, die gleichen Abmessungen haben und ordnungsgemäß nebeneinander ausgerichtet sind. Im zweiten Teil werden wir diese Annahmen lockern.
Regeln
Die Eingabe ist eine verschachtelte Liste oder deren kanonische Zeichenfolgendarstellung (in der Sprache Ihrer Wahl), und Sie sollten das Ergebnis im gleichen Format ausgeben. Das Ergebnis enthält immer mindestens eine Matrix, und die Matrizen können so klein wie 1x1 sein. Die Matrizen enthalten nur (vorzeichenbehaftete) Ganzzahlen mit einem absoluten Wert von weniger als 128.
Sie können ein Programm oder eine Funktion schreiben und eine der Standardmethoden zum Empfangen von Eingaben und zum Bereitstellen von Ausgaben verwenden.
Sie können jede Programmiersprache verwenden , aber beachten Sie, dass diese Lücken standardmäßig verboten sind.
Das ist Code-Golf , also gewinnt die kürzeste gültige Antwort - gemessen in Bytes .
Testfälle
Jeder Testfall enthält a) die Listenmatrizen, die wie im Code angeordnet sind (dies ist nicht Ihre Eingabe), b) die unformatierte Liste ohne das überflüssige Leerzeichen ( dies ist Ihre Eingabe), c) die erwartete Ausgabe.
Pretty: [ [[0]] ]
Input: [[[0]]]
Output: [[[0]]]
Pretty: [ [[-1]], [[0]], [[1]] ]
Input: [[[-1]],[[0]],[[1]]]
Output: [[[-1]],[[0]],[[1]]]
Pretty: [ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Input: [[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
Output: [[[1,0],[0,1]],[[1,0],[0,-1]],[[0,1],[1,0]],[[0,-1],[1,0]]]
Pretty: [ [[1, 0, 0], [[ 127, 63, 31], [[1, 0, 0], [[0, 0, 0],
[0, 1, 0], [ 15, 0, -15], [0, 0, 1], [0, 0, 0],
[0, 0, 1]], [ -31, -63, -127]], [0, 1, 0]], [0, 0, 0]] ]
Input: [[[1,0,0],[[127,63,31],[[1,0,0],[[0,0,0],[0,1,0],[15,0,-15],[0,0,1],[0,0,0],[0,0,1]],[-31,-63,-127]],[0,1,0]],[0,0,0]]]
Output: [[[1,0,0],[0,1,0],[0,0,1]],[[127,63,31],[15,0,-15],[-31,-63,-127]],[[1,0,0],[0,0,1],[0,1,0]],[[0,0,0],[0,0,0],[0,0,0]]]
quelle
[([1, 0], [0, 1]), ([1, 0], [0, -1]), ([0, 1], [1, 0]), ([0, -1], [1, 0])]
die Ausgabe für den dritten Testfall gültig? Es ist gemischte Liste und Tupel.[([1,0], ([1, 0}, ...
und das würde Ihnen zusätzliche Informationen geben.Antworten:
Jelly ,
20151311 BytesProbieren Sie es online!
Hintergrund
Wie die meisten Dinge ist diese Herausforderung ziemlich einfach, sobald Sie herausgefunden haben, was Sie tun müssen. Und ich tat es schließlich nach drei Streichungen und einem Rollback ...
Zuerst müssen wir die Dimensionen der Matrizen herausfinden. Das ist einfacher als gesagt: Das erste Element des ersten Elements ist die erste Zeile der ersten Ausgabematrix, ihre Länge entspricht also der Anzahl der Spalten der quadratischen Ausgabematrizen.
Zum Beispiel, wenn die Eingabe ist
das erste Element des ersten Elements ist
[1, 0, 0]
, dessen Länge ℓ = 3 ist .Wenn wir die Eingabe abflachen und in Abschnitte dieser Länge aufteilen, erhalten wir alle Zeilen der Ausgabematrizen, allerdings in der falschen Reihenfolge. Für unsere Beispieleingabe ergibt dies
Um die endgültige Ausgabe zu erhalten, müssen wir zuerst das Zeilenarray in ℓ gleich lange Abschnitte aufteilen . Für unsere Beispieleingabe ergibt dies
Jede Spalte ist jetzt eine der Ausgabematrizen. Sie müssen also nur noch die resultierende Matrix von Arrays transponieren. Für unsere Beispieleingabe gibt das
wie gewünscht.
Wie es funktioniert
quelle
Pyth , 12 Bytes
Dies ist eine Portierung meiner Gelee-Antwort.
Probieren Sie es online!
Wie es funktioniert
Pyth analysiert das Programm wie folgt (Pseudocode).
Q ist eine Variable, die die Eingabe enthält. J ist eine undefinierte Variable.
Zuerst
J = l(h(h(Q)))
speichert die Länge des Kopfes (ersten Elements) des Kopfes von Q in J .Dann wird Q
.n(Q)
geglättet und das Ergebnis in Stücke der Länge J aufgeteilt .c(..., J)
Anschließend wird
c(J, ...)
das Ergebnis in J- Teile geteilt.Zum Schluss
C(...)
transponiert das Ergebnis.quelle
Pyth , 29 Bytes
Testsuite.
Wie es funktioniert
Algorithmus
Lassen Sie uns an der Eingabe arbeiten
[[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
.Wir werden hier reine Zeichenkettenoperationen verwenden.
Erstens teilen wir die Eingabe an den Kommas auf, die nicht Teil der tiefsten Liste sind (dies geschieht durch Aufteilen an der regulären Schreibweise
\B,
):Dann finden wir den Index des ersten Teilstrings, der nicht mit "index" beginnt
[[
(dies geschieht, indem geprüft wird, ob das Zeichen am Index "index"1
ist[
). In diesem Fall,4
weil der Teilstring bei Index 4[0,1]]
nicht mit beginnt[[
.Dann gruppieren wir die Teilzeichenfolgen in Gruppen von 4 und transponieren dann:
Und dann schließen wir sie mit Kommas an:
quelle
JavaScript (ES6),
132 -130 ByteEs gibt vier Fälle:
n
gleichzeitig zählen.n
Element herausgefiltert wird.quelle
05AB1E , 11 Bytes
Ein Hafen von Dennis Antwort . Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Mathematica, 104 Bytes
Eingang
Ausgabe
Eingang
Ausgabe
{{{0}}} und {{{-1}}, {{0}}, {{1}}} funktionieren auch
-11 Bytes dank Martin Ender
quelle