Hintergrund
In den meisten vernünftigen Programmiersprachen ist es sehr einfach, die Zeilen oder Spalten eines 2D-Arrays zu drehen. In dieser Herausforderung müssen Sie stattdessen die Antidiagonalen drehen . Denken Sie daran, dass die Antidiagonalen eines 2D-Arrays seine 1D-Schnitte sind, die in nordöstlicher Richtung ↗ aufgenommen wurden.
Eingang
Ein nicht leeres rechteckiges 2D-Array mit einstelligen Zahlen in einem beliebigen Format. Beachten Sie, dass das Array möglicherweise kein Quadrat ist.
Ausgabe
Das gleiche Array, aber mit jeder Antidiagonale einen Schritt nach rechts gedreht.
Beispiel
Betrachten Sie das 3x4
Eingabearray
0 1 2 3
4 5 6 7
8 9 0 1
Die Antidiagonalen dieses Arrays sind
0
4 1
8 5 2
9 6 3
0 7
1
Ihre gedrehten Versionen sind
0
1 4
2 8 5
3 9 6
7 0
1
Somit ist die korrekte Ausgabe
0 4 5 6
1 8 9 0
2 3 7 1
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Es ist auch akzeptabel, eine Funktion zu schreiben, die das Eingabearray an Ort und Stelle ändert, wenn Ihre Sprache dies zulässt. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Bestenliste
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist, oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten oder wenn Sie alte, von Ihnen verbesserte Punktzahlen anzeigen möchten), stellen Sie sicher, dass die tatsächliche Punktzahl vorliegt ist die letzte Zahl in der Kopfzeile.
Zusätzliche Testfälle
Input:
4
Output:
4
Input:
5 6 1
Output:
5 6 1
Input:
0 1
6 2
Output:
0 6
1 2
Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3
Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1
Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7
CJam,
44434240 BytesTeste es hier.
Hmm, viel besser als mein erster Versuch, aber ich habe das Gefühl, Dennis wird das sowieso in viel weniger lösen ...
Ein- und Ausgabe erfolgen als ASCII-Gitter:
gibt
quelle
J, 24 char
Funktion mit einem Argument.
J hat einen Operator
/.
namens Oblique . Es kann nicht invertiert werden, so dass die Rekonstruktion nicht trivial ist, aber Sie können das Auflisten von Obliques als eine Permutation der Elemente des Arrays betrachten. Also kehren wir diese Permutation mit/:
(dyadic Sort ) um, indem wir die Permutation "Listing obliques" für diese Größe (</.@i.@$
) rechts und unsere neuen Werte für oblique, richtig gedreht, links setzen. Dann formen wir diese Liste mit good old in das alte rechteckige Array um$$
.Probieren Sie es online aus.
quelle
J,
38-30Bytes8 Bytes gespart dank @algorithmshark.
Die Funktion sammelt die oberen und linken Ränder in einer Liste, schneidet die Liste in zwei Teile mit ausreichender Größe und näht sie rechts und unten im Kernteil.
Verwendung:
Probieren Sie es hier online aus.
quelle
{./.
ersetzt}:@{.,{:"1
, und Sie können um durch Umklappen des Zuges zwei Tilden sparen:{./.((}.~#),~({.~#),.])}:"1@}.
.Julia,
153149139 BytesDadurch wird eine unbenannte Funktion erstellt, die ein Array akzeptiert und das an Ort und Stelle geänderte Eingabearray zurückgibt.
Ungolfed:
Vielen Dank an Martin Büttner für die algorithmische Beratung und die Einsparung von 4 Bytes!
quelle
ES6, 75 Bytes
Dies akzeptiert ein Array von Arrays als Parameter und ändert es an Ort und Stelle.
Ungolfed:
Weitere Erläuterungen finden Sie im @ aditsu-Diagramm.
quelle
{t.push(r.pop());r.unshift(t.shift())}
zut.push(r.pop())+r.unshift(t.shift())
Pyth, 20 Bytes
Verwendet Adistus Ansatz, die obere Reihe und die rechte Spalte zu entfernen und sie dann links und unten anzubringen. Aber mit veränderlichen Datenstrukturen, nicht mit Transpositionen.
quelle
Oktave, 85 Bytes
Ich hoffe ich konnte das
end
s loswerden .quelle
Python 2 ,
11310494 BytesProbieren Sie es online!
Dies ist eine ziemlich wörtliche Interpretation der @ aditsu-Methode. Die Syntax von Python für die Behandlung leerer Listen als "Falsch" hat dazu beigetragen, zusätzliche 10 Byte zu sparen.
quelle
0
in[0:1]