Ihre Aufgabe besteht diesmal darin, eine Variante des POSIX- expand(1)Dienstprogramms zu implementieren, mit der Tabulatoren auf Leerzeichen erweitert werden.
Ihr Programm besteht darin, eine Tabstop-Spezifikation zu verwenden und dann die Eingabe für Standard-In zu lesen und Tabulatorzeichen in der Eingabe durch die entsprechende Anzahl von Leerzeichen zu ersetzen, um zum nächsten Tabstop zu gelangen. Das Ergebnis sollte auf Standard out geschrieben werden .
Tabstop-Spezifikation
Eine Tabstop-Spezifikation besteht entweder aus einer einzelnen Zahl oder einer durch Kommas getrennten Liste von Tabstops. Im Fall einer einzelnen Zahl wird sie wiederholt, als ob ein Vielfaches davon in einer durch Kommas getrennten Liste vorkommt (dh 4als 4,8,12,16,20,...). Jeder Eintrag in einer durch Kommas getrennten Liste ist eine positive Ganzzahl, der optional ein a vorangestellt ist +. Ein +Präfix gibt einen relativen Unterschied zum vorherigen Wert in der durch Kommas getrennten Liste an. Der erste Wert in der Liste muss absolut sein (dh nicht vorfixiert). Die Tabstops geben die Spalte des nächsten Nicht-Leerzeichens (nach dem erweiterten Tabulator) an, wobei die Spalte ganz links als Nummer 0 verwendet wird. Tabulatoren sollten immer auf mindestens ein Leerzeichen erweitert werden.
Input-Output
Die Tabstop-Spezifikation kann nach Ihrem Ermessen entweder als erster Befehlszeilenparameter für das Programm verwendet oder vom Standard als erste Eingabezeile (abgeschlossen durch eine neue Zeile) eingelesen werden. Nachdem der Tabstop gelesen wurde, soll die verbleibende Eingabe (im ersten Fall alle Eingaben) bis zur Verarbeitung von EOF verarbeitet und erweitert werden. Die erweiterte Ausgabe wird auf Standard ausgeschrieben.
Es wird angenommen, dass alle erweiterten Tabstops und alle Eingaben maximal 80 Spalten breit sind. Alle erweiterten Tabstops nehmen strikt zu.
Beispiel
Die Tabstop-Spezifikation 4,6,+2,+8entspricht 4,6,8,16und mit beiden Eingaben
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
wird erweitert in ( ␣zeigt ein Leerzeichen an)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
Scoring ist reines Code-Golf ; kürzester Code gewinnt.
x+($1?i:0)als die kürzere schreiben$1?x+i:x?