Esta vez, su tarea es implementar una variante de la expand(1)
utilidad POSIX que expande las pestañas a los espacios.
Su programa debe tomar una especificación de tabulación y luego leer la entrada en el estándar y reemplazar los caracteres de tabulación en la entrada con la cantidad adecuada de espacios para llegar a la siguiente tabulación. El resultado debe escribirse al estándar .
Especificación Tabstop
Una especificación de tabulación consta de un número único o una lista de tabulaciones separada por comas. En el caso de un número único, se repite como si se produjeran múltiplos en una lista separada por comas (es decir, 4
actúa como 4,8,12,16,20,...
). Cada entrada en una lista separada por comas es un entero positivo opcionalmente prefijado por a +
. Un +
prefijo indica una diferencia relativa con el valor anterior en la lista separada por comas. El primer valor en la lista debe ser absoluto (es decir, sin prefijo). Los tabuladores especifican la columna del siguiente carácter sin espacio (siguiendo la pestaña expandida), con la columna más a la izquierda tomada como el número 0. Los tabuladores siempre deben expandirse al menos a un espacio.
De entrada y salida
La especificación de tabulación debe tomarse como el primer parámetro de línea de comando para el programa, o leerse desde el estándar como la primera línea de entrada (terminada por una nueva línea), a su discreción. Después de que se haya leído la tabulación, la entrada restante (toda la entrada, en el caso anterior) hasta que EOF se procese y expanda. La salida expandida se escribirá en salida estándar.
Se supone que todas las pestañas expandidas y todas las entradas tienen un máximo de 80 columnas de ancho. Todas las pestañas expandidas están aumentando estrictamente.
Ejemplo
La especificación Tabstop 4,6,+2,+8
es equivalente a 4,6,8,16
, y con ambas entradas
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
se expande en ( ␣
indica un espacio)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
La puntuación es puro golf de código ; el código más corto gana.
x+($1?i:0)
como el más corto$1?x+i:x
?