Tugas Anda kali ini adalah mengimplementasikan varian expand(1)
utilitas POSIX yang memperluas tab ke spasi.
Program Anda adalah untuk mengambil spesifikasi tabstop dan kemudian membaca input pada standar masuk dan mengganti karakter tab pada input dengan jumlah ruang yang sesuai untuk mencapai tabstop berikutnya. Hasilnya harus ditulis dengan standar keluar .
Spesifikasi tabstop
Sebuah spesifikasi tabstop terdiri dari baik satu nomor, atau daftar dipisahkan koma tabstops. Dalam kasus nomor tunggal, itu diulang seolah-olah kelipatannya terjadi dalam daftar yang dipisahkan koma (yaitu 4
bertindak sebagai 4,8,12,16,20,...
). Setiap entri dalam daftar yang dipisahkan koma adalah bilangan bulat positif yang secara opsional diawali oleh a +
. Sebuah +
awalan menunjukkan perbedaan relatif terhadap nilai sebelumnya dalam daftar dipisahkan koma. Nilai pertama dalam daftar harus mutlak (mis. Tidak diperbaiki). Tabstop menentukan kolom karakter non-spasi berikutnya (mengikuti tab diperluas), dengan kolom paling kiri diambil sebagai angka 0. Tab harus selalu diperluas ke setidaknya satu spasi.
Input output
Spesifikasi tabstop dapat diambil sebagai parameter baris perintah pertama untuk program, atau dibaca dari standar sebagai baris input pertama (diakhiri oleh baris baru), sesuai kebijakan Anda. Setelah tabstop telah dibaca, input yang tersisa (semua input, dalam kasus sebelumnya) sampai EOF akan diproses dan diperluas. Output yang diperluas harus ditulis dengan standar keluar.
Semua tabstop yang diperluas, dan semua input, diasumsikan memiliki lebar maksimum 80 kolom. Semua tabstop yang diperluas secara ketat meningkat.
Contoh
Spesifikasi tabstop 4,6,+2,+8
setara dengan 4,6,8,16
, dan dengan input keduanya
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
diperluas ke ( ␣
menunjukkan spasi)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
Penilaian adalah golf kode murni ; kode menang paling pendek.
x+($1?i:0)
sebagai yang lebih pendek$1?x+i:x
?