Twoim zadaniem tym razem jest zaimplementowanie wariantu expand(1)
narzędzia POSIX , który rozszerza tabulatory na spacje.
Twój program ma wziąć specyfikację tabstop, a następnie wczytać dane wejściowe w standardzie i zastąpić znaki tabulacji w danych wejściowych odpowiednią ilością spacji, aby przejść do następnego tabstop. Wynik należy zapisać na standardowe wyjście .
Specyfikacja Tabstop
Specyfikacja tabstop składa się z pojedynczej liczby lub listy tabulatorów oddzielonej przecinkami. W przypadku pojedynczej liczby jest ona powtarzana tak, jakby jej wielokrotność wystąpiła na liście oddzielonej przecinkami (tzn. 4
Działa jak 4,8,12,16,20,...
). Każdy wpis na liście oddzielonej przecinkami jest dodatnią liczbą całkowitą, opcjonalnie poprzedzoną znakiem +
. +
Przedrostek oznacza względną różnicę w stosunku do poprzedniej wartości w oddzielone przecinkami. Pierwsza wartość na liście musi być bezwzględna (tzn. Bez prefiksu). Tabstopsy określają kolumnę następnego znaku spacji (następującą po rozwiniętej karcie), przy czym kolumna znajdująca się najdalej z lewej strony przyjmuje numer 0. Tabulatory powinny zawsze rozwijać się do co najmniej jednej spacji.
Wejście wyjście
Specyfikację tabstop należy albo przyjąć jako pierwszy parametr programu do wiersza poleceń, albo odczytać ze standardu jako pierwszy wiersz wprowadzania (zakończony nowym wierszem), według własnego uznania. Po odczytaniu tabstopu pozostałe dane wejściowe (wszystkie dane wejściowe, w poprzednim przypadku) do momentu przetworzenia i rozszerzenia EOF. Rozszerzone dane wyjściowe należy zapisać na standardowe wyjście.
Zakłada się, że wszystkie rozwinięte tabstopsy i wszystkie dane wejściowe mają maksymalnie 80 kolumn szerokości. Wszystkie rozszerzone tabstopsy ściśle się zwiększają.
Przykład
Specyfikacja Tabstop 4,6,+2,+8
jest równoważna 4,6,8,16
z obydwoma danymi wejściowymi
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
jest rozwinięty do ( ␣
wskazuje spację)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
Punktacja jest czystym golfem ; najkrótszy kod wygrywa.
x+($1?i:0)
jako krótszy$1?x+i:x
?