Эта проблема похожа на эту старую , но с некоторыми неясными частями спецификации и менее строгими требованиями ввода / вывода.
При вводе строки, состоящей только из печатных 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"