Twoim zadaniem jest wdrożenie programu podobnego do nl
narzędzia wiersza poleceń z podstawowych narzędzi GNU.
Standardowe luki są zabronione.
Nie możesz używać żadnej wbudowanej lub zewnętrznej funkcji, programu lub narzędzia do numerowania linii pliku lub łańcucha, takich jak on nl
sam lub =
polecenie w GNU sed.
Specyfikacja
Wejście
Program akceptuje nazwy plików jako argumenty. Twój kod nie musi być wieloplatformowy; należy zastosować format nazwy pliku systemu operacyjnego z uruchomionym kodem, tzn. jeśli zdarzyło Ci się być w systemie Windows, separatorem katalogów może być \
lub /
.
Musisz mieć możliwość pobrania 64 plików wejściowych, w tym -
jeśli jest to określone. Jeśli podano więcej niż 64, obsłuż tylko pierwsze 64.
Na liście nazw plików -
reprezentuje standardowe dane wejściowe.
Jeśli podano nazwy plików, czytaj z plików w kolejności, w jakiej zostały podane, i konkatenuj ich zawartość, wstawiając nowy wiersz między nimi i na końcu. Jeśli nie możesz odczytać z jednego lub więcej nazw plików (ponieważ plik nie istnieje lub nie masz do niego uprawnień do odczytu), zignoruj je. Jeśli wszystkie podane nazwy plików są niepoprawne, nie wysyłaj nic.
Jeśli nie podano nazw plików, czytaj ze standardowego wejścia. Czytaj ze standardowego wejścia tylko wtedy, gdy nie podano nazw plików lub jeśli -
podano.
Wynik
Wyjście programu wola, na standardowe wyjście, wejście z liniami numerowane w ten sposób (Można zakładać, że wejście ma \n
, \r\n
lub \r
końca linii; odebrać w zależności co jest wygodne dla Ciebie, ale określić, który z nich):
<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>
...
...
6 znaków spacji jest przypisanych do numeru linii i jest on wstawiany na końcu tych znaków; reszta staje się polami (np. 1
będzie miała 5 pól wiodących, 22
będzie miała 4 pola wiodące, ...). Jeśli dane wejściowe są wystarczająco długie, w końcu zabraknie miejsca na numer linii w linii 999999
. Nie możesz niczego wypisywać po wierszu 999999.
Jeśli wejście jest puste, nie wysyłaj nic.
Wyjdź ze statusu
Niższe liczby mają pierwszeństwo: jeśli napotkano błędy 1 i 2, należy wyjść ze statusem 1.
Wyjdź ze statusem 0, jeśli wejście zostało pomyślnie odebrane, a linie pomyślnie ponumerowane i wyprowadzone.
Wyjdź ze statusem 1, jeśli co najmniej jeden z plików określonych w wierszu poleceń nie został znaleziony lub nie można go odczytać.
Wyjdź ze statusem 2, jeśli podano zbyt wiele plików (więcej niż 64).
Wyjdź ze statusem 3, jeśli dane wejściowe były zbyt długie (ponad 999999 linii). \
Punktacja
To jest golf golfowy - wygrywa najkrótszy program!
Mogę dodać bonusy później za wdrożenie niektórych opcji, które nl
ma. W tej chwili nie ma żadnych bonusów.
prompt()
emulować argumenty programu i standardowe wyjście?