Viele Leute auf dieser Website verwenden esoterische Sprachen . Da diese Sprachen ungewöhnlich und schwer zu verstehen sind, werden sie häufig Erklärungen in einem bestimmten Format verfassen. Zum Beispiel, wenn der Code war
abcdefghijklmnop
Und diese Sprache verwendet #
für Kommentare eine Erklärung wie diese:
a #Explanation of what 'a' does
bc #Bc
d #d
e #Explanation of e
fgh #foobar
ij #hello world
k #etc.
l #so on
mn #and
op #so forth
Ich mache das auch oft, aber jedes Mal, wenn ich das mache, habe ich das Gefühl, dass das Erstellen des Layouts von Text wirklich unangenehm und zeitaufwendig ist. Ich möchte, dass Sie einen "Esolang-Comment-Template-Generator" für mich erstellen. Wenn wir zum Beispiel die Kommentare ignorieren, hat der vorherige Code diese Vorlage:
a #
bc #
d #
e #
fgh #
ij #
k #
l #
mn #
op #
Die Herausforderung:
Sie müssen ein Programm oder eine Funktion schreiben, die zwei Zeichenfolgen als Eingabe verwendet und diese "Esolang-Kommentar-Vorlage" ausgibt. Die erste Eingabe ist der Code, jedoch mit |
eingefügten Strichen ( ) an der Stelle, an der sich die Zeilenumbrüche befinden. Die zweite Eingabe wird für Kommentare verwendet. Unser letztes Beispiel hätte also Folgendes für die Eingabe:
"a|bc|d|e|fgh|ij|k|l|mn|op", "#"
Dies schließt leider aus, dass Balken Teil der Codeeingabe sind, aber das ist in Ordnung. Sie können davon ausgehen, dass die Kommentareingabe ein einzelnes Zeichen ist. Der Einfachheit halber wird das Kommentarzeichen kein Balken sein. Die Codeeingabe enthält nur druckbares ASCII und keine Zeilenumbrüche.
Hoffentlich können Sie den Testfällen entnehmen, was zu tun ist, aber ich werde versuchen, einige Dinge zu klären.
Sie müssen die Codeeingabe auf jeder Leiste in "Code-Abschnitte" aufteilen. Dann wird jeder Codeabschnitt in einer eigenen Zeile ausgegeben und mit der Länge des gesamten vorherigen Codes (ohne die Striche) links aufgefüllt. Dann wird jede Zeile mit genügend Leerzeichen rechts aufgefüllt, so dass die letzten beiden Zeichen in jeder Zeile "Ein zusätzliches Leerzeichen" + "Das Kommentarzeichen" sind.
Eine nachgestellte Zeile ist zulässig.
Hier ist ein weiteres Beispiel. Für die Eingabe
"Hello|World", "/"
Der erste Abschnitt des Codes ist „Hallo“ und die zweite ist „Welt“. So sollte es die Ausgabe geben:
Hello /
World /
Hier sind noch einige Beispiele:
Input:
"a|b|c|d|e|f|g", ","
Output:
a ,
b ,
c ,
d ,
e ,
f ,
g ,
Input:
"abcdefg", ":"
Output:
abcdefg :
Input:
"4|8|15|16|23|42", "%"
Output:
4 %
8 %
15 %
16 %
23 %
42 %
Input:
"E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!", "!"
Output:
E !
ac !
h s !
ecti !
on is !
one c !
haracte !
r longer !
than the !
last! !
Input:
"This|Code|has||empty||sections", "@"
Output:
This @
Code @
has @
@
empty @
@
sections @
Regeln:
Sie können diese Ein- und Ausgaben in jedem vernünftigen Format verwenden. Zum Beispiel das Lesen / Schreiben einer Datei, STDIN / Stout, Funktionsargumente / Rückgabewert usw. Wie üblich, ist dies Code-Golf , so versuchen , Ihren Code so kurz wie möglich zu machen , und Sie gewinnen , wenn Sie die kürzeste Lösung bekommen in deiner Sprache! Ich werde auch die kürzeste Lösung als Gesamtsieger auswählen. Standardlücken sind verboten.
|
Charakter zu verwenden, wäre schön, so können Sie sich erklären|
) sein?Antworten:
Pyth -
28272423 BytesKönnte ein bisschen Golf spielen können.Anscheinend viel weg!Probieren Sie es hier online aus .
quelle
Retina ,
3534 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Die beiden Eingabezeichenfolgen werden durch ein Leerzeichen getrennt (was eindeutig ist, da wir wissen, dass der Kommentarbegrenzer immer ein einzelnes Zeichen ist).
Probieren Sie es online!
quelle
Java 10,
189159 Bytes-30 Bytes, die Java 7 in Java 10 konvertieren und die Schleifen optimieren.
Probieren Sie es online aus.
Erläuterung:
quelle
Pyke,
312824 BytesProbieren Sie es hier aus!
quelle
JavaScript (ES6), 92 Byte
quelle
GNU sed (85 + 1 für -r) 86
Die Eingaben sind durch ein Leerzeichen getrennte Zeichenfolgen.
Tests:
input.txt:
Ausgabe:
quelle
:
ist ein GNU sed Feature / Bug und\S
ist meiner Meinung nach eine Erweiterung, also sollte der Titel vielleicht seinGNU sed
. Davon abgesehen großartiger Code.Haskell,
139.135Bytes4 Bytes durch Inlining einer Definition gespart.
Ungolfed:
quelle
Groovy,
120113111 Bytesungolfed *
(Erster Entwurf mit 120 Bytes)
ungolfed *
Tests
quelle
.padRight(s.replace('|','').size()+1)+c)
Python 2,
125 124132 Bytes-1 Byte dank @TuukkaX (vermisste den Raum von Golf
i, v
)Alle Testfälle auf ideone
quelle
c
als Kommentar char verwenden, nicht#
.Python 2,
10710510299 BytesGetestet mit allen obigen Testfällen
EDIT golfed aus 2 Bytes , die durch d Ändern = a.split ( "|"); i = 0 bis d, i = a.split ( "|"), 0 nicht sicher , wie ich das verpasst. Danke @Oliver Ni
Weitere 3 Bytes sind weg. Danke noch einmal.
Vorschlag von @Jonathan spart tatsächlich 3 Bytes und bringt es auf die magische 99. Vielen Dank.
quelle
" "*i
2 Bytes zu erhaltenlen(e)
wiefor e in d:z=len(e)....
ein Byte zu speichern , weil es zweimal verwendet wird05AB1E ,
29383129 BytesKann definitiv golfen werden, aber zumindest funktioniert es jetzt ..
+9 Bytes, da
¡
(geteilt) leere Elemente automatisch entfernt, also musste ich'|„ǝʒ:'ǝ¡'ʒм
..-2 Bytes dank @MagicOctopusUrn hinzufügen, indem ich
'|„ǝʒ:'ǝ¡'ʒм
auf'|¶:.BεðÜ}
(die aktuelle Lösung funktioniert nicht) Elemente mit nachgestellten Leerzeichen, aber ich habe angenommen, dass dies gemäß den Testfällen zulässig ist).Probieren Sie es online aus.
Erläuterung:
quelle
ǝʒ
.'|¶:.B
könnte tho arbeiten.'|¶:.B
?.B
ein zweites Mal, nachdem Sie die vorhergehenden Leerzeichen hinzugefügt haben..B
bereits vorhandenen zu berechnen .'|¶:.BεðÜ}εD®>úsg®+©s}.BεðIJ,
? 29 Bytes. Zurück zu Iteration 1 :)..B
teilt sich in Zeilenumbrüche auf, was eine Eigenschaft ist, die nicht viele Leute kennen. Nur so kann ich leere Elemente aufbewahren. Ich würde dies als Feature anfordern..¡
sollte split bedeuten, aber leere Elemente behalten ..PowerShell v2 +,
103 bis99 ByteNimmt Eingaben als zwei Zeichenfolgen,
-split
s die erste in der Literal-Pipe (da bei der Aufteilung die Regex-Syntax verwendet wird), und fügt die Elemente in eine Schleife ein|%{...}
.Bei jeder Iteration erstellen wir eine Zeichenfolge als eine Anzahl von Leerzeichen, die durch
$l
Verketten mit dem aktuellen Element definiert werden.$l
Initialisiert für die erste Schleife auf$null
, die hier als ausgewertet wird0
.Diese Zeichenfolge wird weiter mit einer anderen Anzahl von Leerzeichen verkettet (definiert durch die Länge,
$a
in der-replace
jede Pipe ohne Leerzeichen ausgeführt wird , zuzüglich1
des zusätzlichen Auffüllens zwischen Code und Kommentaren abzüglich.length
des aktuellen Elements, abzüglich$l
der Anzahl der von uns aufgefüllten Leerzeichen) Links auf dieser Iteration), verkettet mit unserem Kommentarzeichen$b
. Das ist noch in der Pipeline.Wir aktualisieren dann
$l
für die nächste Iteration.Die resultierenden Zeichenfolgen
Write-Output
verbleiben alle in der Pipeline und werden implizit bei der Programmausführung ausgegeben , wobei standardmäßig eine neue Zeile dazwischen steht.Beispiele
quelle
Vim,
3938 Tastenanschläge-1 Byte dank DJMcMayhem
Erwartet als Eingabe einen Puffer (z. B. eine Datei), dessen erstes Zeichen der Kommentarbegrenzer ist, gefolgt vom Code, z
#foo|bar|baz
.Erläuterung
("
_
" bezeichnet ein wörtliches Leerzeichen.)quelle
mm
m`
`m
<C-o>
Floroid - 94 Bytes
Verwendet einen ähnlichen Ansatz wie die Python-Lösung von @ JonathanAllan .
Testfälle
quelle
C #
176167154 BytesUngolfed
Eine LINQ-Lösung wäre 146 gewesen, aber notwendig
using System.Linq;
auf 164 zurückgesetzt werden:Alte Lösungen:
167 Bytes:
176 Bytes mit String-Interpolation
quelle
PHP,
120117116110109 Bytesoder
quelle
MATL ,
3331 BytesProbieren Sie es online!
Erläuterung
Die eingebaute Funktion
Yd
(blkdiag
), die aus ihren Eingaben eine Blockdiagonalmatrix erstellt, erledigt den größten Teil der Arbeit. Die Füllwerte in der Matrix sind 0, und char 0 wird zu Anzeigezwecken als Leerzeichen behandelt. Der Code würde sich einfach aufteilen|
, eine Matrix aus den resultierenden Blöcken erstellt, in char konvertiert und zwei Spalten mit Leerzeichen und Kommentarsymbol angehängt.Die Möglichkeit von leeren Abschnitten in der Eingabezeichenfolge ist jedoch
kompliziertmacht das Problem noch interessanter: der resultierende Block leer sein würde und somit nicht in der resultierenden Matrix zeigen würde.Um dies zu lösen, fügen wir vor jedem Zeichen ein Zeichen 0 ein
|
, damit kein Block leer ist. und dann entfernen wir in der resultierenden char-Matrix Spalten, die nur durch char 0 gebildet werden. Ein nicht leerer Codeabschnitt enthält druckbare ASCII-Zeichen, sodass die darin enthaltenen Spalten erhalten bleiben. Ein leerer Abschnitt trägt eine Zeile bei, führt jedoch keine zusätzliche Spalte ein.quelle
|
( Subausdruck vor oder nach dem|
), zumindest in der Matlab / Octave-Regexp-EnginePyth, 30 Bytes
oder
Beide sind vollständige Programme, die die STDIN-Eingabe der Kommentarzeichenfolge und anschließend der durch Zeilenumbrüche getrennten Programmzeichenfolge übernehmen.
Probieren Sie die erste Version online aus
Probieren Sie die zweite Version online aus
Wie sie arbeiten
quelle
Dyalog APL 16.0 (nicht konkurrierend),
4337 BytesFordert zur Eingabe eines Kommentarzeichens und anschließend zur Eingabe von Code auf.
Nicht konkurrierend, da Version 16.0 neuer ist als diese Herausforderung.
quelle
Perl, 63 Bytes
Beinhaltet +5 für
-Xpi
Mit Eingabe von STDIN und Kommentarzeichen nach -i ausführen:
esolang.pl
:Absolut langweilige, unkomplizierte Lösung
quelle
Turtlèd , 35 Bytes (nicht konkurrierend )
Nimmt eine Eingabe vor, das letzte Zeichen ist das Kommentarzeichen. Funktioniert nicht mit Kommentarzeichen als Leerzeichen, aber ich nehme an, dass das nicht notwendig ist.
Erläuterung:
quelle
Funky , 89 Bytes
Probieren Sie es online!
quelle
Scala, 123 Bytes
Testcode + Ausgabe:
quelle
Ruby,
9680 BytesSehen Sie es auf eval.in: https://eval.in/639012
Ich sollte wirklich nur Retina lernen.
quelle
Jelly , 41 Bytes
Das sieht so aus, als hätte es viel zu viele Inkremente und wahrscheinlich zu viele Links ...
Testen Sie es bei TryItOnline
Wie?
quelle
CJam, 32 Bytes
Erläuterung
Probieren Sie es online aus
quelle
GolfScript, 85 Bytes
Probieren Sie es online aus
Update 2017 - GolfScript - 71 Bytes
Erläuterung
quelle
Gelee , 10 Bytes
Probieren Sie es online!
quelle