今回のタスクは、expand(1)
タブをスペースに展開するPOSIX ユーティリティのバリアントを実装することです。
あなたのプログラムが取ることですタブストップ仕様をし、その後に標準の入力を読んで、次のタブストップに到達するためのスペースの適切な量を入力してタブ文字を置き換えます。結果は標準出力に書き込む必要があります。
タブストップ仕様
タブストップ仕様は、単一の番号、またはタブストップのカンマ区切りリストのいずれかから成ります。単一の数値の場合は、その数の倍数がコンマ区切りのリストで発生したかのように繰り返されます(つまり4
、として機能します4,8,12,16,20,...
)。コンマ区切りリストの各エントリは、オプションで接頭辞が付いた正の整数です+
。+
プレフィックスは、コンマ区切りのリスト内の前の値に相対的な差を示しています。リストの最初の値は絶対値(つまり、プレフィックスなし)でなければなりません。タブストップは、次のスペース以外の文字の列(展開されたタブに続く)を指定し、左端の列を番号0と見なします。タブは常に少なくとも1つのスペースに展開する必要があります。
入出力
タブストップの指定は、プログラムの最初のコマンドラインパラメータとして使用するか、または標準の入力から(改行で終了する)入力の最初の行として読み取るかを自由に選択できます。タブストップが読み取られた後、EOFまでの残りの入力(前者の場合はすべての入力)が処理および拡張されます。拡張出力は標準出力に書き込まれます。
すべての展開されたタブストップ、およびすべての入力は、最大80列幅であると想定されます。すべての拡張タブストップは厳密に増加しています。
例
タブストップの指定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
ますか?