Ця проблема схожа на цю стару , але з деякими незрозумілими частинами специфікації забито і менш суворі вимоги вводу / виводу.
З огляду на введення рядка, що складається лише з ASCII для друку та нових рядків, виведіть різні його показники (байт, слово, кількість рядків).
Показники, які потрібно вивести, такі:
Кількість байтів Оскільки вхідний рядок залишається в межах ASCII, це також кількість символів.
Підрахунок слів. Це
wcвизначення "слова:" будь-якої послідовності непробільного простору. Наприклад,abc,def"ghi"це одне «слово».Кількість рядків Це само собою зрозуміло. Вхід завжди буде містити зворотний новий рядок, а це означає, що кількість рядків є синонімом "кількість нових рядків". Ніколи не буде більше одного єдиного нового рядка.
Вихід повинен точно повторити типовий wcвихід (крім імені файлу):
llama@llama:~$ cat /dev/urandom | tr -cd 'A-Za-z \n' | head -90 > example.txt
llama@llama:~$ wc example.txt
90 165 5501 example.txt
Зверніть увагу, що спочатку відбувається підрахунок рядків, потім підрахунок слів і, нарешті, кількість байтів. Крім того, кожен рахунок повинен бути прокладений ліворуч з пробілами, щоб вони були однакової ширини. У наведеному вище прикладі 5501- це "найдовше" число з 4 цифрами, тому 165прошито одним пробілом і 90двома. Нарешті, всі числа повинні бути об'єднані в один рядок з пробілом між кожним числом.
Оскільки це код-гольф , найкоротший код у байтах виграє.
(О, і до речі ... ви не можете використовувати wcкоманду у своїй відповіді. Якщо це вже не було очевидно.)
Тестові приклади ( \nявляє собою новий рядок; можливо, вам також потрібна додаткова затримка нового рядка):
"a b c d\n" -> "1 4 8"
"a b c d e f\n" -> " 1 6 12"
" a b c d e f \n" -> " 1 6 16"
"a\nb\nc\nd\n" -> "4 4 8"
"a\n\n\nb\nc\nd\n" -> " 6 4 10"
"abc123{}[]()...\n" -> " 1 1 16
"\n" -> "1 0 1"
" \n" -> "1 0 4"
"\n\n\n\n\n" -> "5 0 5"
"\n\n\na\nb\n" -> "5 2 7"