Questa volta il tuo compito è implementare una variante expand(1)
dell'utilità POSIX che espande le schede negli spazi.
Il programma deve prendere una specifica tabstop e quindi leggere l'input sullo standard in e sostituire i caratteri di tabulazione nell'input con la quantità appropriata di spazi per raggiungere il tabstop successivo. Il risultato dovrebbe essere scritto allo standard .
Specifiche Tabstop
Una specifica tabstop è costituita da un singolo numero o da un elenco separato da virgole di tabstop. Nel caso di un singolo numero, si ripete come se si verificassero multipli in un elenco separato da virgole (cioè 4
agisce come 4,8,12,16,20,...
). Ogni voce in un elenco separato da virgole è un numero intero positivo facoltativamente preceduto da a +
. Un +
prefisso indica una differenza relativa rispetto al valore precedente nell'elenco separato da virgole. Il primo valore nell'elenco deve essere assoluto (ovvero non prefissato). Le schede specificano la colonna del successivo carattere non spaziale (seguendo la scheda espansa), con la colonna più a sinistra considerata come numero 0. Le schede devono sempre espandersi in almeno uno spazio.
Input Output
La specifica tabstop deve essere presa come primo parametro della riga di comando per il programma, oppure letta dallo standard in come prima riga di input (terminata da una nuova riga), a tua discrezione. Dopo che il tabstop è stato letto, l'input rimanente (tutti gli input, nel primo caso) fino a quando EOF deve essere elaborato ed espanso. L'output espanso deve essere scritto nello standard out.
Si presume che tutti i tabstops espansi e tutti gli input abbiano una larghezza massima di 80 colonne. Tutti i tabstops espansi sono in costante aumento.
Esempio
Le specifiche di Tabstop 4,6,+2,+8
sono equivalenti 4,6,8,16
e con entrambi gli input
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
è espanso in ( ␣
indica uno spazio)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
Il punteggio è puro golf di codice ; vince il codice più breve.
x+($1?i:0)
come il più corto$1?x+i:x
?