Linien ausrichten!
Wenn Sie ein Zeichen und eine mehrzeilige Zeichenfolge haben, müssen Sie jede Zeile der Zeichenfolge so auffüllen, dass sie unter dem angegebenen Trennzeichen ausgerichtet sind.
Beispiele
Eingang:
,
Programming, Puzzles
And, Code golf
Ausgabe:
Programming, Puzzles
And, Code golf
Eingang
Die Eingabe besteht aus einer mehrzeiligen Zeichenfolge und einem Zeichen (an dem Sie sich ausrichten). Sie können diese Zeichen in einer beliebigen Reihenfolge und in einem beliebigen Format eingeben. Das Zeichen wird genau einmal pro Zeile angezeigt. Jede Zeile der Eingabe kann unterschiedlich lang sein.
Die Eingabe kann über Funktionsargumente oder STDIN erfolgen.
Ausgabe
Die Ausgabe sollte die gleiche zentrierte Zeichenfolge sein. Sie dürfen eine nachgestellte Zeile und kein nachgestelltes Leerzeichen verwenden.
Die Ausgabe sollte mit der Mindestanzahl an Leerzeichen aufgefüllt werden. Sie dürfen keine führenden Leerzeichen in der Eingabe entfernen (falls vorhanden).
Die Ausgabe kann über Funktionsrückgabe oder STDOUT erfolgen.
quelle
Antworten:
Pyth, 18 Bytes
quelle
APL (37)
APL ist einfach nicht sehr gut in der Verarbeitung von Saiten (oder ich bin natürlich nicht gut im Golfen).
Dabei wird das Zeichen als linkes Argument und die mehrzeilige Zeichenfolge als rechtes Argument verwendet. Es wird davon ausgegangen, dass die mehrzeilige Zeichenfolge in einem Zeilenumbruch endet (z . B.
A\nB\nC\n
stattA\nB\nC
.). Da ich "jedes gewünschte Format" verwenden kann und dies auch das herkömmliche Format für Textdateien ist, halte ich dies für sinnvoll.Erläuterung:
S←⌽⍵
: kehre die Zeichenfolge um und speichere sie inS
.R←S⊂⍨S=⊃S
: Teilen SieS
das erste Zeichen auf und speichern Sie das Array der Zeichenfolgen inR
.⍺⍳¨⌽¨R
:R
kehre jeden String um und finde dann den Index von ⍺ (das Zeichen) in jedem String.(⌈/-+)
: subtrahieren Sie jeden der Indizes vom größten Index und geben Sie die benötigte Menge an Speicherplätzen an' '/⍨¨
: Generieren Sie für jeden dieser Werte so viele LeerzeichenR,¨
: füge die Leerzeichen zu jedem String in hinzuR
.∊
: Füge alle Saiten zusammen⌽
: umkehren (um die ursprüngliche Bestellung zurückzuerhalten)Beispiel:
quelle
CJam,
232220 BytesVielen Dank an Dennis für das Speichern von 2 Bytes.
Dadurch werden die Zeilen aus Befehlszeilenargumenten und das Zeichen aus STDIN gelesen.
Der Online-Interpreter unterstützt keine Befehlszeilenargumente, aber Sie können hier eine entsprechende Version testen.
Erläuterung
quelle
Pip ,
222018 + 1 = 19 BytesÜbernimmt Zeichenfolgen als Befehlszeilenargumente und Trennzeichen von STDIN ( Idee aus Martins CJam-Antwort ). Verwendet
-n
flag, um Ausgabewerte in separaten Zeilen auszudrucken.Und ein Beispiellauf:
quelle
JavaScript ES 2015, 113 Byte
Nicht ganz so kurz wie die bisher geposteten Golfsprachen. Nimmt Eingaben als zwei Funktionsargumente an, z
f(',','Programming, Puzzles\nAnd, Code golf')
. Das folgende Snippet ist ungolfed und enthält eine einfache Methode zum Testen.quelle
Pyth,
2724 BytesAktualisiert für den neuesten Pyth .
Live-Demo.
27-Byte-Version
Live-Demo.
quelle
jbm
zu Beginn Ihrer Antwort sehen, sollten Sie sofort darüber nachdenkenV
.b
Julia, 117 Bytes
Ungolfed:
quelle
Python 3, 85 (IDLE 3.2.2, Windows)
Ziemlich einfach. Dadurch wird die Position des Zeichens in der Zeichenfolge zweimal ermittelt: einmal, um das Maximum zu ermitteln (also einmal pro Zeile) und einmal, um den Versatz zu ermitteln. Ich habe versucht, diese zu kombinieren, aber es war länger.
Python 3 wird zum Entpacken der Eingaben verwendet. MY IDLE scheint mehrzeilige Zeichenfolgen als Eingabe zu verwenden.
quelle
c
erhält der Begrenzer unds
eine leere Liste. Nachfolgende Aufrufe,input()
um die verbleibenden Zeilen einzeln zurückzugeben.Gelee , 12 Bytes
Probieren Sie es online!
Fertig und golfed mit caird coinheringaahing in J Elly H yper T raining (JHT) , unsere Jelly Praxis Chat - Raum.
Wie es funktioniert
Das dritte Befehlszeilenargument (erste Eingabe) sollte die mehrzeilige Zeichenfolge sein, und das Zeichen sollte das vierte Befehlszeilenargument (zweite Eingabe) sein.
Ich bin nicht sicher, ob die Eingabe als Liste von Zeilen zulässig ist, daher wird eine mehrzeilige Zeichenfolge als Eingabe verwendet. Wenn es erlaubt wäre:
10 Bytes
Probieren Sie es online!
quelle
Matlab / Octave, 106 Bytes
Funktion, die drei separate Argumente für Zeichen, Zeichenfolge, Zeichenfolge verwendet; und ergibt stdout:
Beispiel in Matlab:
Oder versuchen Sie es online mit Octave Interpreter.
quelle
Julia, 80 Bytes
Ungolfed:
quelle
JavaScript (ES6), 105
Unter Verwendung von Vorlagenzeichenfolgen werden die 2 Zeilenumbrüche signifikant und gezählt.
Testen Sie die Ausführung des Snippets in einem EcmaScript 6-kompatiblen Browser (dies ist FireFox. Chrome unterstützt keine Standardparameter).
quelle
Python 2, 93 Bytes
So heißt es:
quelle
C # 4.0,
329320307 BytesUngolfed-Version:
Es akzeptiert maximal 9999 Zeilen ...
quelle
Dyalog APL ,
222016 Bytes-4 danke an ngn.
APL ist eigentlich gar nicht so schlecht bei der String-Verarbeitung, wenn man mit Arrays arbeiten darf. In dieser Herausforderung können wir das am besten geeignete Format auswählen, das für APL einen Vektor von Textvektoren als linkes Argument und den Begrenzer als skalares rechtes Argument bedeutet. Dies behandelt sogar mehrere Begrenzer pro Zeile und richtet das erste jeder Zeile aus.
⊣,¨⍨
stellen Sie jeder Zeile ein' '⍴¨⍨
so viele Räume wie⌈.⍳
der am weitesten rechts stehende Index des Zeichens zwischen den Zeilen-
Minus⍳¨
der Index des Zeichens in jeder ZeileAPL online testen! (
↑
hinzugefügt, um die Ausgabe vertikal zu drucken)Bonus? Funktioniert für eine beliebige Anzahl von Zeichenfolgen und Begrenzern (wird ganz links ausgerichtet).
quelle
⊣,¨⍨' '⍴¨⍨⌈.⍳-⍳¨
C #, 191
Als eine Funktion. Grob eine Portierung meiner JS-Antwort.
quelle
Ruby, 74 Bytes
und nenne es wie
quelle
R, 68 Bytes
Unbenannte Funktion, die
3
Eingaben entgegennimmt;c
Das auszurichtende Zeichenx
ist die erste undy
die zweite Zeichenfolge.In R gibt die Funktion
regexpr
die Position eines bestimmten Musters in einer Zeichenfolge zurück. Die Lösung besteht darin,regexpr
auf beide Zeichenfolgen anzuwenden und Leerzeichen in Höhe der Differenz zu wiederholen und anschließend beide Eingaben durch einen Zeilenumbruch getrennt zu drucken.quelle
Python 2,
6766 BytesAngerufen mit:
quelle
Mondschrift, 138 Bytes
Dies gibt eine Funktion zurück, die 2 Argumente akzeptiert. Das erste ist die Zeichenfolge, das zweite ist das Zeichen, an dem ausgerichtet werden soll. Diese Argumente sind das implizite Argument @ und n.
Zuerst füge ich der Zeichenfolge eine neue Zeile hinzu, um die Verarbeitung zu vereinfachen.
Jetzt erstelle ich eine Liste der Positionen jedes Ausrichtungszeichens mit
gmatch
. Als nächstes ersetze ich die neue Zeile vor jeder Zeile durch die richtige Anzahl von Leerzeichen und schneide dann die neue Zeile ab, die ich am Anfang hinzugefügt habe.quelle
Lua, 169 Bytes
Nicht so kurz wie andere Antworten, aber dies ist meine erste: D
quelle
Retina , 71 Bytes
Probieren Sie es online! Hinweis: Dadurch bleibt das Ausrichtungszeichen in der Ausgabe erhalten. Es kann zu einem Preis von 4 Bytes gelöscht werden. Wenn nur zwei Zeichenfolgen ausgerichtet werden müssen, gilt dies für 52 Byte:
Erläuterung:
Dies entspricht dem Ausrichtungszeichen.
Dies entspricht der ersten Zeile und verfolgt auch, wie viele Zeichen es vor dem Ausrichtungszeichen gab. (.NET speichert in diesem Fall für jede Variable einen Übereinstimmungsstapel
$3
.)Dies entspricht der zweiten Zeile und versucht, so viele Zeichen zu berücksichtigen, wie wir in der ersten Zeile gefunden haben.
?<-3>
Bewirkt, dass die Übereinstimmung den Stapel für jedes Zeichen auffüllt, bis es leer ist. An diesem Punkt schlägt die Übereinstimmung fehl und(.)*
die verbleibenden Zeichen vor dem Ausrichtungszeichen werden abgeglichen. Zu diesem Zeitpunkt haben wir die folgenden Variablen:$1
Enthält das Ausrichtungszeichen$2
enthält die erste Zeile$3
enthält einen Stapel, dessen Länge dem ersten Zeilenpräfix minus dem zweiten Zeilenpräfix entspricht$4
enthält die zweite Zeile$5
enthält einen Stapel, dessen Länge dem zweiten Zeilenpräfix minus dem ersten Zeilenpräfix entspricht$#5$*
Dann wird die erforderliche Anzahl von Leerzeichen vorangestellt, damit die erste Zeile an der zweiten ausgerichtet wird, und umgekehrt für$#3$*
.Eine ähnliche Logik gilt für die Hauptantwort, mit der Ausnahme, dass wir hier zwei Linien finden müssen, die nicht ausgerichtet sind, damit wir sie ausrichten können (hier
?(5)
kommt das an) und dann die Ausrichtung über alle Linien wiederholen, bis sie alle gleich ausgerichtet sind .quelle
Common Lisp, 101 Bytes
Der erste Parameter ist das Zeichen, der zweite ist eine Liste der auszurichtenden Zeichenfolgen.
Probieren Sie es online!
quelle