Erfolgreiche Code-Golf-Einsendungen sind von Natur aus überall mit verrückten Symbolen gefüllt. Um ihre Einsendung verständlicher zu machen, geben viele Code-Golfer eine Erklärung ihres Codes an. In ihrer Erklärung wird die Codezeile in ein vertikal aufgelöstes Diagramm umgewandelt.
Zum Beispiel, wenn dies mein Code wäre:
1_'[3:~2@+]`
Eines der vielen möglichen Diagramme, die ich erstellen könnte, sieht folgendermaßen aus:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
Das Ziel
In dieser Herausforderung schreiben Sie ein Tool zur automatischen Formatierung von Erklärungen, das eine Codezeile verwendet und ein Diagramm erstellt, zu dem leicht erklärender Text hinzugefügt werden kann.
Um dies zu einer nützlicheren Herausforderung zu machen , kann der Benutzer den Inhalt jeder Zeile angeben, indem er eine Formatierungszeichenfolge bereitstellt. Die Formatierungszeichenfolge ist eine zweite Zeile, die nur Buchstaben enthält A-Za-z
und dieselbe Länge wie das Programm hat. Die Buchstaben geben die Reihenfolge an, in der die Zeichen des Programms in der Erläuterung gedruckt werden sollen.
Hier ist ein Beispiel für E / A ohne eckige Formatierung :
123423
AabcBC
1
2
3
2
3
4
Klammern
Wenn mehr als ein Zeichen im Programm dieselbe Prioritätsstufe hat, fungiert dieser Zeichensatz als ein einzelner Codeblock (wenn sie eine Gruppe bilden) oder als ein Satz von Klammern (wenn sie dazwischen andere Zeichen enthalten). Die allgemeinen Regeln sind einfach:
Zeichen werden in einer Zeile des Diagramms erst angezeigt, wenn alle anderen Zeichen mit höherer Priorität bereits in den darüber liegenden Zeilen des Diagramms angezeigt wurden.
Zeichen gleicher Priorität werden immer in die gleichen Zeilen gedruckt. Wenn ein bestimmtes Zeichen in einer Zeile erscheint, erscheinen alle anderen Zeichen gleicher Priorität in der Zeile.
In jeder Zeile wird weiterhin eine Reihe von Zeichen mit gleicher Priorität angezeigt, bis alle anderen von ihr eingeschlossenen Zeichen mindestens einmal vorgekommen sind. Dies ermöglicht "klammerartige" Konstruktionen. Wenn
bceab
es sich um die Prioritäten handelt,b
erscheinen die Zeichen in der zweiten Zeile (sie haben die zweithöchste Priorität) und werden so lange angezeigt, bis allecea
Zeichen erschienen sind. Wenn die Prioritätszeichenfolge "" istabcadeafga
, werden allebcdefg
als darin enthalten betrachtet, und alle 4a
Sekunden werden weiterhin angezeigt, bis die Zeichenfolge ""g
angezeigt wurde.
Weitere Formatierungsanforderungen
Alle Ausgabezeilen sollten gleich lang sein (die Länge der Eingabezeilen) und bei Bedarf mit Leerzeichen aufgefüllt werden. Die Eingabeprogrammzeile kann Leerzeichen enthalten, diese Leerzeichen erhalten jedoch auch einen Prioritätsbuchstaben. Nachgestellte Zeilenumbrüche bei der Ausgabe / Eingabe sind optional.
Wertung
Das ist Codegolf, die wenigsten Bytes gewinnen.
Beispiele
Hier ist ein kommentiertes Beispiel für einen Code mit komplexerer Formatierung.
1_'[3:~2@+]`
abbcddeffgch
1 #highest priority is denoted by the lowercase letter a
_' #priority b
[ ] #all characters with priority c
[3: ] #priority d, but priority c still printed because it encloses more
[ ~ ] #priority e
[ 2@ ] #priority f
[ +] #priority g, last line of c because all enclosed characters have appeared
` #priority h
Ein Beispiel in Perl:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
Hier einige Beispiele in CJam mit freundlicher Genehmigung von Martin Büttner:
l~2*{_2%{3*)}{2/}?_p_(}g;
aabbcdddefffeeggeehhiiccj
l~
2*
{ }g
{_2% }g
{ { }{ }? }g
{ {3*)}{ }? }g
{ { }{2/}? }g
{ _p }g
{ _(}g
;
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
abcccddddddeeeeeeefgghiijjhhbb
q
{ }/
{_eu }/
{ '[,66> }/
{ "EIOU"- }/
{ # }/
{ )g }/
{ { }*}/
{ {'o }*}/
{ { 1$}*}/
Hier ist ein verrücktes Beispiel, um sich mit dir herumzuschlagen:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
Hier ist ein expliziteres Beispiel dafür, was passiert, wenn sich Klammern überlappen abab
. (Normalerweise ist dies nicht die Art und Weise, wie Sie Ihre Erklärung formatieren würden.)
aabbccddaaeebb
aabbccddaaeebb
aa aa
aabb aa bb
aabbcc aa bb
aabb ddaa bb
bb eebb #"aa" no longer appears because all of "bbccdd" have already appeared.
oNo
kann durchn
in TIO ersetzt werden .