Einführung
Die meisten Code-Golfer hier fügen Erklärungen zu ihren Einsendungen hinzu, so dass es einfacher ist zu verstehen, was los ist. In der Regel werden die Codelines links und die entsprechende Erklärung rechts mit einer Art Trennzeichen angezeigt. Damit es hübsch aussieht, befinden sich die Trennzeichen in derselben Spalte. Auch langer Erklärungstext wird normalerweise in die nächste Zeile umgebrochen, damit die Leser nicht horizontal scrollen müssen, um alles zu lesen.
Wenn Sie diese Erklärung jedoch bearbeiten möchten, weil Sie einige verrückte Golfspiele gemacht haben, verbringen Sie häufig Zeit damit, Ihre Erklärung wieder hübsch zu machen. Da dies eine sehr sich wiederholende Aufgabe ist, möchten Sie ein Programm dafür schreiben.
Die Herausforderung
Geben Sie bei mehreren Codezeilen mit Erklärung und einem Trennzeichen den gut formatierten Code mit Erklärung aus.
Beispiel
Eingang
shM-crz1dc4. "ANDBYOROF # z = Eingabe
rz1 # konvertiert die Eingabe in Großbuchstaben
CD # Split-Eingabe für Leerzeichen
c4. "ANDBYOROF # Erstellt eine Liste der Wörter aus einer gepackten Zeichenfolge, die ignoriert werden soll
- # diese Wörter herausfiltern
hM # nimm nur den ersten Buchstaben aller Wörter
s # füge sie zu einer Zeichenkette zusammen
Ausgabe
shM-crz1dc4. "ANDBYOROF # z = Eingabe
rz1 # konvertiert die Eingabe in Großbuchstaben
CD # Split-Eingabe für Leerzeichen
c4. "ANDBYOROF # Erstelle eine Liste der Wörter aus einer gepackten Zeichenkette, die sein soll
# ignoriert
- # diese Wörter herausfiltern
hM # nimm nur den ersten Buchstaben aller Wörter
s # füge sie zu einer Zeichenkette zusammen
Ein Cookie für den ersten, der herausfinden kann, was dieser Code bewirkt.
Der Formatierungsalgorithmus
- Suchen Sie die längste Codezeile (ohne die Erklärung und die Leerzeichen zwischen Code und Trennzeichen).
- Fügen Sie nach dieser Codezeile 5 Leerzeichen ein und fügen Sie das entsprechende Trennzeichen mit Erläuterung hinzu. Dies ist jetzt die Referenzlinie.
- Passen Sie jede zweite Zeile an diese Referenzzeile an, sodass sich die Trennzeichen alle in derselben Spalte befinden.
- Brechen Sie alle Zeilen, die länger als 93 Zeichen sind, wie folgt in eine neue Zeile ein:
- Suchen Sie das letzte Wort, dessen Ende in Spalte 93 oder niedriger steht.
- Nehmen Sie alle Wörter nach diesem und setzen Sie sie mit dem führenden Trennzeichen und dem richtigen Abstand in eine neue Zeile. Das Leerzeichen zwischen diesen beiden Wörtern muss gelöscht werden, sodass die erste Zeile mit einem Wortzeichen endet und die zweite Zeile mit einem nach dem Trennzeichen beginnt.
- Wenn die resultierende Zeile immer noch länger als 93 Zeichen ist, wiederholen Sie dies, bis jede Zeile weniger als 94 Zeichen enthält.
Anmerkungen
- Ein Wort besteht aus Nicht-Leerzeichen. Wörter werden durch ein einzelnes Leerzeichen getrennt.
- Der Zeilenumbruch ist immer möglich. Dies bedeutet, dass kein Wort so lang ist, dass es das Umwickeln unmöglich machen würde.
- Die Eingabe enthält nur druckbares ASCII und keine nachgestellten Leerzeichen
- Das Trennzeichen wird nur einmal pro Zeile angezeigt.
- Während die Erklärung eine unbegrenzte Länge haben kann, können das Trennzeichen und der Code nur eine kombinierte maximale Länge von
93 - 5 = 87Zeichen haben. Die 5 Zeichen sind die Leerzeichen zwischen Code und Trennzeichen. Code und Trennzeichen bestehen immer aus mindestens einem Zeichen. - Die Eingabe kann Leerzeilen enthalten. Diese enthalten niemals Zeichen (mit Ausnahme von Zeilenumbrüchen, wenn Sie Eingaben als mehrzeilige Zeichenfolge vornehmen). Diese Leerzeilen müssen auch in der Ausgabe vorhanden sein.
- Jede Zeile enthält einen Code, ein Trennzeichen und eine Erklärung. Ausnahmen sind Leerzeilen.
- Sie können die Eingabe in einem angemessenen Format vornehmen, solange sie nicht vorverarbeitet wird. Stellen Sie in Ihrer Antwort klar, welche Sie verwenden.
- Die Ausgabe kann eine mehrzeilige Zeichenfolge oder eine Liste von Zeichenfolgen sein.
Regeln
- Funktion oder Vollprogramm erlaubt.
- Standardregeln für die Eingabe / Ausgabe.
- Es gelten Standardlücken .
- Dies ist Code-Golf , also gewinnt die niedrigste Byte-Anzahl. Tiebreaker ist eine frühere Vorlage.
Testfälle
Das Eingabeformat ist hier eine Liste mit Zeichenfolgen, die die Zeilen darstellen, und eine einzelne Zeichenfolge für das Trennzeichen. Beide sind durch ein Komma getrennt. Die Ausgabe ist eine Liste von Zeichenfolgen.
['shM-crz1dc4. "ANDBYOROF # z = Eingabe', '', 'rz1 # Eingabe in Großbuchstaben konvertieren', 'cd # Eingabe in Leerzeichen aufteilen', 'c4." ANDBYOROF # Erstellt eine Liste der Wörter aus einem gepackten Zeichenkette, die ignoriert werden soll ',' - # filtere diese Wörter heraus ',' hM # nimm nur den ersten Buchstaben aller Wörter ',' s # füge sie zu einer Zeichenkette zusammen '], "#" -> [' shM-crz1dc4 . "ANDBYOROF # z = Eingabe ',' ',' rz1 # Eingabe in Großbuchstaben umwandeln ',' cd # Eingabe in Leerzeichen aufteilen ',' c4." ANDBYOROF # Eine Liste der Wörter aus einer gepackten Zeichenfolge erstellen, die ' , '# ignoriert', '- # filtere diese Wörter heraus ',' hM # nimm nur den ersten Buchstaben aller Wörter ',' s # verbinde sie zu einer Zeichenkette '] ['codecodecode e # Erklärung', 'sdf dsf sdf e # Eine sehr sehr sehr sehr sehr sehr sehr lange lange lange lange lange lange lange lange lange lange lange Erklärung und es wird immer länger', '', 'einige mehr codee # und etwas mehr erklärung '], "e #" -> [' codecodecode e # erklärung ',' sdf dsf sdf e # A Sehr sehr sehr sehr sehr sehr sehr lang lang lang lang lang ',' e # lang lange lange lange lange lange Erklärung und es wird immer länger ',' e # und länger ',' ',' etwas mehr Code e # und etwas mehr Erklärung ']
Viel Spaß beim Codieren!
length of the longest code-line + 5. Dies gilt auch für Zeilen, die nur eine Erklärung enthalten, weil sie umbrochen wurden.