Ваша задача на этот раз - реализовать вариант expand(1)
утилиты POSIX, который расширяет табуляции до пробелов.
Ваша программа должна взять спецификацию табуляции, а затем прочитать ввод по стандартному вводу и заменить символы табуляции во вводе соответствующим количеством пробелов для перехода к следующей остановке табуляции. Результат должен быть выписан на стандарт .
Табстоп спецификация
Спецификация табуляции состоит либо из одного числа, или разделенного запятыми списка табуляции. В случае одного числа оно повторяется, как если бы его кратные числа встречались в списке через запятую (то есть 4
действует как 4,8,12,16,20,...
). Каждая запись в списке через запятую представляет собой положительное целое число, необязательно с префиксом a +
. +
Префикс указывает на относительную разность к предыдущему значению в списке через запятую. Первое значение в списке должно быть абсолютным (то есть без префикса). В закладках указывается столбец следующего непробельного символа (после развернутой вкладки), причем крайний левый столбец принимается за номер 0. Вкладки всегда должны расширяться как минимум до одного пробела.
Ввод, вывод
Спецификация табуляции должна быть либо принята в качестве первого параметра командной строки для программы, либо считана из стандартной в качестве первой строки ввода (завершается символом новой строки), на ваше усмотрение. После прочтения табуляции оставшиеся входные данные (все входные данные в первом случае) до EOF должны быть обработаны и расширены. Расширенный вывод должен быть выписан в стандартный формат.
Предполагается, что все развернутые таб-стопы и весь ввод имеют максимальную ширину 80 столбцов. Все расширенные вкладки строго увеличиваются.
пример
Спецификация Tabstop 4,6,+2,+8
эквивалентна 4,6,8,16
, и с обоими ввода
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
раскрывается в ( ␣
указывает на пробел)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
Подсчет очков - чистый код-гольф ; самый короткий код выигрывает.
x+($1?i:0)
как короче$1?x+i:x
?