Nehmen Sie ein nicht verschachteltes Array als Eingabe. Verwandeln Sie es mit der folgenden Methode in eine Matrix:
Nehmen wir an, mein Array ist [1, 2, 3, 4, 5]
Zuerst wiederhole ich dieses Array fünfmal: (die Länge)
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
Dann las ich es entlang der Diagonalen:
[[1],
[2, 1],
[3, 2, 1],
[4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2],
[5, 4, 3],
[5, 4],
[5]]
Ich drücke dieses Array flach und teile es in Fünferstücke (die Länge) auf:
[[1, 2, 1, 3, 2],
[1, 4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2, 5],
[4, 3, 5, 4, 5]]
Das ist Code Golf. Wenigste Bytes gewinnt.
Antworten:
05AB1E, 13 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Gelee , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
L
habe, habe ich seltsame Sachen gemacht, daher habe ich das Register benutzt: / Ich habe es einfach noch einmal ausprobiert und es funktioniert ... im Grunde das Gleiche, also werde ich wohl einfach meins entfernen.Python 2,
10596 Bytes-1 und -4 und -4 Bytes dank Flp.Tkc
Die for - Schleife werden die Objekte wie in der Beschreibung, die wirkliche Magie in der Zip geschieht , die aus ist hier
quelle
JavaScript (ES6) 100
101 105Weniger golfen
Prüfung
quelle
return
. Du solltest einen Tipp dazu im ES6-Thread posten.eval
sogar dieses Mal besser :(MATL , 17 Bytes
Probieren Sie es online!
Wie es funktioniert
In der folgenden Erläuterung wird die Eingabe
[1 2 3 4 5]
als Beispiel verwendet. Fügen Sie%
nach jeder Anweisung im Code ein (Kommentarsymbol), um die Zwischenergebnisse anzuzeigen .Beachten Sie, dass dies
;
das Zeilentrennzeichen für Matrizen ist. Ist[1 2]
also ein Zeilenvektor,[1; 2]
ist ein Spaltenvektor und[1 0; 0 1]
ist die 2 × 2-Identitätsmatrix.quelle
JavaScript (ES6), 116 Byte
Nun, es ist ein Anfang ...
quelle
R 84 Bytes
Liest die Eingabe von stdin und gibt eine R-Matrix aus / zurück.
Erklärt
Das Interessanteste an dieser Antwort ist, wie die Diagonalen ermittelt werden. Im Allgemeinen kann ein Objekt mithilfe der
split
Funktion aufgeteilt werden, wenn ein Objekt bereitgestellt wird, das Faktoren enthält, in die das Objekt aufgeteilt wird. Um diese Faktoren zu erzeugen, können wir eine Matrix verwendencol
undrow
zurückgeben, die den Spalten- bzw. den Zeilenindex enthält. Indem wir die Unterschiede nehmen, erhaltenrow(m)-col(m)
wir eine Matrix wie:in denen jede Diagonale eindeutig identifiziert ist. Wir können nun anhand dieser Matrix aufteilen und sie in eine uneinheitliche Liste umwandeln, indem wir Folgendes anwenden
split
:(Beachten Sie, wie der Name jedes Vektors den diagonalen Werten in der obigen Matrix entspricht.)
Der letzte Schritt besteht darin, die Form zu reduzieren und in eine Matrix zu verwandeln:
quelle
Mathematica 93 Bytes
So würde ich diesen Code normalerweise schreiben (109 Bytes):
Diese Matrixdarstellung gibt aufgrund eines sequentiell ansteigenden Eingangsvektors eine gute Vorstellung von der Struktur.
Hier ist die Matrixdarstellung mit einem zufälligen Eingabevektor. Offensichtlich existiert noch eine gewisse Struktur.
quelle
Mathematica, 92 Bytes
Unbenannte Funktion, die eine Liste als Argument verwendet. Es mag andere Strukturen für eine solche Funktion geben, aber ich hoffe, ich habe diese Struktur ziemlich gut gespielt ...
Der erste Teil
n=NestList[#2,(r=Reverse)@#,(l=Length@#)-1]&
definiert eine Funktionn
aus zwei Argumenten: Das erste ist eine Liste der Längel
und das zweite ist eine Funktion, die auf Listen angewendet werden soll.n
Wendet diese Funktionl-1
mal auf die Liste der umgekehrten Argumente an und speichert alle Ergebnisse in ihrer Ausgabeliste. (Definierenr
undl
auf dem Weg ist nur Golfen.)n
wird in der ursprünglichen Liste zweimal aufgerufen, einmal mit der FunktionRest
(das erste Element der Liste löschen) und einmal mit der FunktionMost
(das letzte Element löschen). Dies erzeugt alle gewünschten Unterlisten, aber die gesamte Liste ist zweimal vorhanden (daher das ExtraMost
) und die erste Hälfte ist in umgekehrter Reihenfolge vorhanden (daher dasr[...]
). Schließlich~ArrayReshape~{l,l}
vergisst die aktuelle Listenstruktur und zwingt es eine seinl
x -l
Array.quelle
Mathematica, 85 Bytes
Buchstäblich die vorgeschlagenen Schritte ausführen:
Meiner Meinung
Part
nach sollte es eine clevere Möglichkeit geben, dies zu verkürzen, aber jeder Versuch, den ich unternommen habe, war länger als 85 Byte.quelle
Ruby (110 Bytes)
Der
sort
Betrieb ist möglicherweise nicht erforderlich, aber die doc für Enumerable # group_by nicht die Reihenfolge der Werte in den Hash - Werte garantieren (die Arrays), aber die aktuellen Versionen von Ruby bieten die Bestellung nicht anders erwarten und die Reihenfolge ich brauchen würde , wennsort
waren aus meinem Code entfernt.Die Schritte sind wie folgt.
Zuletzt wird
f.to_a
das zuvor gezeigte Array zurückgegeben.quelle