Nhiệm vụ của bạn lần này là triển khai một biến thể của expand(1)
tiện ích POSIX mở rộng các tab thành không gian.
Chương trình của bạn là lấy một đặc tả tabstop và sau đó đọc đầu vào trên tiêu chuẩn và thay thế các ký tự tab trong đầu vào với số lượng khoảng trống thích hợp để đạt được điểm dừng tiếp theo. Kết quả nên được viết theo tiêu chuẩn .
Đặc điểm kỹ thuật Tabstop
Một đặc tả tabstop bao gồm một số duy nhất hoặc một danh sách các tabstops được phân tách bằng dấu phẩy. Trong trường hợp một số duy nhất, nó được lặp lại như thể bội số của nó xảy ra trong một danh sách được phân tách bằng dấu phẩy (nghĩa là 4
đóng vai trò 4,8,12,16,20,...
). Mỗi mục trong danh sách được phân tách bằng dấu phẩy là một số nguyên dương tùy ý có tiền tố là a +
. Một +
tiền tố chỉ ra sự khác biệt tương đối so với giá trị trước đó trong danh sách được phân tách bằng dấu phẩy. Giá trị đầu tiên trong danh sách phải là tuyệt đối (tức là không được trộn). Các tab tab xác định cột của ký tự không phải không gian tiếp theo (theo tab được mở rộng), với cột ngoài cùng bên trái được lấy là số 0. Các tab phải luôn mở rộng đến ít nhất một khoảng trắng.
Đầu ra đầu vào
Đặc tả tabstop sẽ được lấy làm tham số dòng lệnh đầu tiên cho chương trình hoặc đọc từ tiêu chuẩn dưới dạng dòng đầu tiên (kết thúc bởi một dòng mới), theo ý của bạn. Sau khi đọc tabstop, đầu vào còn lại (tất cả đầu vào, trong trường hợp trước) cho đến khi EOF được xử lý và mở rộng. Đầu ra mở rộng sẽ được viết theo tiêu chuẩn.
Tất cả các tab được mở rộng và tất cả các đầu vào, được giả định là tối đa 80 cột rộng. Tất cả các tabstops mở rộng đang tăng nghiêm ngặt.
Thí dụ
Đặc tả Tabstop 4,6,+2,+8
tương đương với 4,6,8,16
và với cả đầu vào
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
được mở rộng thành ( ␣
chỉ ra một khoảng trắng)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
Ghi điểm là môn đánh gôn thuần túy ; mã ngắn nhất thắng.
x+($1?i:0)
ngắn hơn không$1?x+i:x
không?