Ordnen Sie die Diagonalen, die von links oben nach rechts unten verlaufen, in Spalten mit einem rechteckigen Textraster so an, dass sich die Zeichen ganz rechts unten aller Diagonalen auf einer Ebene befinden. Verwenden Sie Leerzeichen zum Einrücken.
Zum Beispiel, wenn das Eingaberaster von Text ist
abcd
1234
WXYZ
dann würden Sie die Diagonalen in einer Reihe aufstellen W
, 1X
, a2Y
, b3z
, c4
, undd
in den Spalten dieser Ausgabe geben:
ab
123c
WXYZ4d
Beachten Sie, dass die am weitesten rechts liegenden Zeichen aller Diagonalen WXYZ4d
auf derselben Ebene befinden.
Einzelheiten
Das Eingabegitter für Text hat eine Größe von mindestens 1 × 1 und alle Zeilen haben dieselbe Länge.
Sie können das Eingaberaster als mehrzeilige Zeichenfolge oder als Liste einzeiliger Zeichenfolgen verwenden.
Das Eingaberaster enthält nur druckbare ASCII-Zeichen (einschließlich Leerzeichen).
Die Ausgabe kann optional eine nachgestellte neue Zeile enthalten, es sollten jedoch keine weiteren leeren Zeilen vorhanden sein.
Die Zeilen der Ausgabe können optional nachgestellte Leerzeichen enthalten, sollten jedoch keine unnötigen führenden Leerzeichen enthalten.
Andere Beispiele
Leerzeilen trennen Beispiele. Jedem Eingang folgt direkt sein Ausgang.
123
456
789
1
452
78963
123.?!
456??!
789!!!
123.
456???
789!!!!!
**@
@
**
@ @
/\/\
\/ /
/ /\
\/\/
/
\/\
/ / /
\/\/\/\
12
34
56
78
90
7531
908642
Code
Code
G
O
L
F
FLOG
~
~
Wertung
Der kürzeste Code in Bytes gewinnt.
Antworten:
J , 12 Bytes
Definiert ein anonymes Verb. Probieren Sie es online!
Erläuterung
In J
u &. v
(lese:u
unterv
) "v, dann u, dann invers zu v". Umkehrung und Transponierung sind Selbstumkehrungen, daher bedeutet das Programm "umkehren, transponieren, umgekehrte Antidiagonalen extrahieren, transponieren, umkehren".Mit Beispieleingabe:
Umkehren:
Transponieren:
Umgekehrte Antidiagonalen (und Block mit Leerzeichen) extrahieren:
Transponieren:
Umkehren:
quelle
Jelly , 11 oder 10 Bytes
Probieren Sie es online!
Ein ziemlich anderer Algorithmus als meine andere Lösung; Dieser verwendet ein eingebautes Werkzeug, um an die Diagonalen heranzukommen, anstatt die Dinge manuell zu erledigen.
Erläuterung:
Die Diagonalen werden möglicherweise in der schlechtestmöglichen Ausrichtung (die wiederholte Transpositionen, Umkehrungen und Rotationen erfordert) und in der falschen Reihenfolge ausgegeben (Jelly gibt die Hauptdiagonale zuerst aus, daher müssen wir einige Diagonalen vom Ende zum Anfang verschieben, um sie zu erhalten in Ordnung). Dies ist jedoch immer noch kürzer als meine andere Jelly-Lösung.
quelle
CJam , 29 Bytes
Probieren Sie es online!
Erläuterung
Anstatt die Diagonalen zu extrahieren, ziehen wir abwechselnd links und rechts Schichten vom Ende ab. Betrachten Sie die folgende Eingabe:
Wenn wir die Diagonalen so aufschreiben, wie es die Herausforderung erfordert, erhalten wir:
Beachten Sie, dass dies einfach (von unten nach oben) die unterste Zeile ist, die mit der Spalte ganz rechts verkettet ist. Diese Definition funktioniert auch, wenn die Eingabe rechteckig ist.
quelle
]
wickelt den gesamten Stapel ein! Ich denke, Funktionen sollten unabhängig vom Stapelinhalt unter der Eingabe funktionieren, und Sie scheinen damit einverstanden zu sein ^^]
als ich es in eine Funktion geändert habe.[{)\z}h]
und eine Funktion für 27 Bytes behalten.JavaScript,
116101 BytesIch wollte nur diese Regex-Muster-
/.$|\n?(?!.*\n)..+/gm
Idee verwenden. ( https://regex101.com/r/mjMz9i/2 )JavaScript Regex-Geschmack ist enttäuschend, ich musste es verwenden,
(?!.*\n)
weil es nicht\Z
implementiert wurde, und irgendwie konnte ich es nicht verwenden\0
.quelle
.
statt ,[^]
da Sie brauchen nur Nicht-Zeilenumbrüche überspringen eine neue Zeile zu finden, die 2 Bytes speichert.^
in der endgültigen Regex notwendig ist, da sich\n
sowieso schon eine am Anfang der Zeichenkette befindet, so dass ein weiteres Byte gespart wird.'$&'+' '.repeat(n)
. Im Grunde ist dieser Ausdruck nur,$&
aber mit einem Leerzeichen, das jedem Aufruf hinzugefügt wird, was trivial ist, rekursiv zu implementieren - Ersetzenn=0
mitr='$&'
undf(z,n+1)
mitf(z,r+' ')
und ist dannr
die gewünschte Ersetzungszeichenfolge. Wenn ich richtig gezählt habe, spart das 12 Bytes.Gelee , 15 oder 14 Bytes
Probieren Sie es online!
Dies ist ein Algorithmus, der Jellys eingebaute Diagonalen nicht verwendet. Dadurch könnte es kürzer werden. Das könnte ich wohl als nächstes versuchen.
So funktioniert der Algorithmus. Beginnen wir mit dieser Eingabe:
Wir beginnen mit
L’⁶x;\
.L’
gibt uns die Länge der Eingabe minus 1 (in diesem Fall 2). Dann erhalten⁶x
wir eine Folge von Räumen dieser Länge (" "
in diesem Fall); und;\
gibt uns die kumulativen Ergebnisse bei der Verkettung (ein Dreieck von Räumen). Wir kehren dann das Dreieck um und verknüpfen es mit der linken Seite des Originals (;"
verknüpft die entsprechenden Elemente der Listen,µ
verursacht zwangsweise eine Unterbrechung des Parsings und verwendet daher standardmäßig die Originaleingabe als zweite Liste).Dies ist fast die Lösung, die wir wollen, aber wir müssen die Elemente nach unten verschieben, um bündig mit der letzten Zeichenfolge zu sein. Das ist eine Frage des Transponierens (
Z
), Umkehrens innerhalb jeder Zeile (U
), erneuten Transponierens (Z
) und Umkehrens der Zeilen (Ṛ
):transponieren
innerhalb von Zeilen umkehren
transponieren
Vertausche die Reihen
Endlich
Y
schließt sich auf Newlines. Es ist mir unklar, ob dies erforderlich ist, um der Spezifikation zu entsprechen (die die Eingabe als Liste von Zeichenfolgen erlaubt, aber nicht das Gleiche über die Ausgabe sagt), sodass die genaue Anzahl der Bytes davon abhängt, ob sie enthalten oder weggelassen wird.quelle
Pyth, 16 Bytes
Big Pyth :
Da die Leute sagen, Golfsprachen seien schwer zu lesen, habe ich Big Pyth entworfen, das sowohl leicht lesbar als auch leicht in Pyth übersetzbar ist. Die verknüpfte Datei übersetzt einen Eingabestream von Big Pyth in Pyth. Jedes durch Leerzeichen getrennte Big Pyth-Token entspricht einem Pyth-Token, entweder einem Zeichen oder einem
.
gefolgt von einem Zeichen. Die Ausnahmen sind dieimplicit
Token, die im Pyth-Code enthalten sind.Ich möchte sehen, wie gut ein erklärendes Format für Big Pyth ist, deshalb werde ich keine andere Erklärung geben. Fragen Sie mich, ob Sie etwas erklärt haben möchten.
quelle
JavaScript (ES6), 140 Byte
Nimmt Ein- und Ausgabe als Arrays von Strings. Akzeptiert auch eine zweidimensionale Zeichenfeld-Eingabe und spart 7 Bytes, wenn eine zweidimensionale Zeichenfeld-Ausgabe akzeptabel ist. Erläuterung: Die Höhe des Ergebnisses
m
ist das Minimum der Höheh
und Breitew
des ursprünglichen Arrays, während die Breite einfach um eins geringer ist als die Summe der Höhe und Breite des ursprünglichen Arrays. Die Quellzeile für die Zeichen im Hauptteil des Ergebnisses stammt direkt aus der entsprechenden Zeile des ursprünglichen Arrays und wird von unten nach oben gezählt, während die Quellzeile im zusätzlichen Teil des Ergebnisses für jede weitere Spalte um eine Zeile nach oben verschoben wird. Die Quellenspalte für beide Hälften des Ergebnisses entspricht der Zielspalte, die für jede Quellenspalte um eine Spalte über dem unteren Rand nach links verschoben wurde.quelle
Oktave, 57 Bytes
quelle
Python 3, 247 Bytes
quelle
join(i) for
.Python 2, 150 Bytes
Übernimmt die Eingabe als Liste von Zeichenfolgen.
quelle
Clojure, 194 Bytes
Implementiert auf die harte Tour durch Gruppieren von Zeichen zu
G
und anschließendes Generieren von Zeilen.Nimmt Eingaben als
vec
vonvec
s wie[[\a \b \c \d] [\1 \2 \3 \4] [\W \X \Y \Z]]
. Beispiel:quelle