Ihre Aufgabe ist es, ein Programm zu implementieren, das dem nl
Befehlszeilentool der GNU-Kerndienstprogramme ähnelt .
Standardlücken sind verboten.
Sie dürfen keine eingebauten oder externen Funktionen, Programme oder Hilfsprogramme zum Nummerieren der Zeilen einer Datei oder eines Strings verwenden, wie z. B. sich nl
selbst oder den =
Befehl in GNU sed.
Spezifikation
Eingang
Das Programm akzeptiert Dateinamen als Argumente. Ihr Code muss nicht plattformübergreifend sein. Das Dateinamenformat des Betriebssystems, auf dem der Code ausgeführt wird, sollte verwendet werden. Wenn Sie sich also unter Windows befinden, kann das Verzeichnistrennzeichen \
oder sein /
.
Sie müssen in der Lage sein, 64 Eingabedateien aufzunehmen, auch -
wenn diese angegeben sind. Wenn mehr als 64 angegeben sind, behandeln Sie nur die ersten 64.
Stellt in der Liste der Dateinamen -
die Standardeingabe dar.
Wenn Dateinamen angegeben werden, lesen Sie diese in der angegebenen Reihenfolge aus und verketten Sie ihren Inhalt, indem Sie jeweils eine neue Zeile zwischen und am Ende einfügen. Wenn Sie einen oder mehrere Dateinamen nicht lesen können (weil die Datei nicht vorhanden ist oder Sie keine Leseberechtigung dafür haben), ignorieren Sie sie. Wenn alle angegebenen Dateinamen ungültig sind, wird nichts ausgegeben.
Wenn keine Dateinamen angegeben sind, lesen Sie von der Standardeingabe. Lesen Sie von der Standardeingabe nur, wenn keine Dateinamen angegeben sind oder wenn -
angegeben.
Ausgabe
Das Programm wird ausgegeben, auf der Standardausgabe, die Eingabe mit Linien so nummeriert (Sie gehen davon aus , dass der Eingang hat \n
, \r\n
oder \r
Zeilenende, wählen je nachdem , was für Sie bequem ist, aber angeben , welche):
<5 spaces>1<tab><content of line 1 of input>
<5 spaces>2<tab><content of line 2 of input>
...
<4 spaces>10<tab><content of line 10 of input>
...
<3 spaces>100<tab><content of line 100 of input>
...
...
Die Zeilennummer wird mit 6 Leerzeichen versehen und am Ende dieser Zeichen eingefügt. Der Rest wird zu Leerzeichen (z. B. 1
5 führende Leerzeichen, 22
4 führende Leerzeichen, ...). Wenn die Eingabe ausreichend lang ist, ist möglicherweise nicht mehr genügend Platz für die Zeilennummer in Zeile vorhanden 999999
. Sie dürfen nach Zeile 999999 nichts mehr ausgeben.
Wenn die Eingabe leer ist, wird nichts ausgegeben.
Beenden Sie den Status
Die niedrigeren Zahlen haben Vorrang: Wenn Fehler 1 und 2 aufgetreten sind, beenden Sie mit Status 1.
Beenden Sie mit dem Status 0, wenn die Eingabe erfolgreich empfangen und die Zeilen erfolgreich nummeriert und ausgegeben wurden.
Beenden Sie mit Status 1, wenn eine oder mehrere der in der Befehlszeile angegebenen Dateien nicht gefunden wurden oder nicht gelesen werden konnten.
Beenden Sie mit Status 2, wenn zu viele Dateien (mehr als 64) angegeben wurden.
Beenden Sie mit Status 3, wenn die Eingabe zu lang war (mehr als 999999 Zeilen). \
Wertung
Das ist Code-Golf - das kürzeste Programm gewinnt!
Ich kann später Boni für die Implementierung bestimmter Optionen hinzufügen, die nl
hat. Im Moment gibt es keine Boni.
prompt()
Programmargumente und stdin emulieren?