На цей раз ваше завдання - реалізувати варіант expand(1)
утиліти POSIX , який розширює вкладки на пробіли.
Ваша програма повинна взяти специфікацію табулятора, а потім прочитати введення на стандартному в і замінити символи вкладки на вхід на відповідну кількість пробілів, щоб дістатися до наступного стоп-стопу. Результат слід записати на стандартне оформлення .
Специфікація Tabstop
Специфікація табуляції складається або з одного числа, або розділеного комами списку табуляції. У випадку одиничного числа воно повторюється так, ніби кратні його трапляються у списку, розділеному комами (тобто 4
діє як 4,8,12,16,20,...
). Кожен запис у списку, розділеному комами, є додатним цілим числом, необов'язково префіксом a +
. +
Префікс вказує на відносну різницю до попереднього значення в списку через кому. Перше значення у списку має бути абсолютним (тобто нефіксованим). Вкладки вказують стовпчик наступного непробільного символу (слідом за розширеною вкладкою), причому крайній лівий стовпець вважається числом 0. Вкладки повинні завжди розширюватися принаймні до одного пробілу.
Введення-виведення
Специфікація tabstop або повинна сприйматися як перший параметр командного рядка для програми, або читатися зі стандарту в якості першого рядка введення (закінчується новим рядком) на ваш розсуд. Після того, як зчитується табло стоп, обробляється та розширюється залишився вхід (весь вхід, у першому випадку) до 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
?