Esse desafio é semelhante ao anterior , mas com algumas partes pouco claras das especificações e requisitos de E / S menos rigorosos.
Dada a entrada de uma sequência que consiste apenas em ASCII e novas linhas imprimíveis, produz várias métricas (bytes, palavras, contagem de linhas).
As métricas que você deve gerar são as seguintes:
Contagem de bytes. Como a sequência de entrada permanece em ASCII, também é a contagem de caracteres.
Contagem de palavras. Esta é
wc
a definição de uma "palavra": qualquer sequência de espaço não em branco. Por exemplo,abc,def"ghi"
é uma "palavra".Contagem de linhas. Isso é auto-explicativo. A entrada sempre conterá uma nova linha à direita, o que significa que a contagem de linhas é sinônimo de "contagem de novas linhas". Nunca haverá mais do que uma única nova linha à direita.
A saída deve replicar exatamente a wc
saída padrão (exceto o nome do arquivo):
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
Observe que a contagem de linhas vem primeiro, depois a contagem de palavras e, finalmente, a contagem de bytes. Além disso, cada contagem deve ser preenchida à esquerda com espaços para que tenham a mesma largura. No exemplo acima, 5501
é o número "mais longo" com 4 dígitos, portanto, 165
é preenchido com um espaço e 90
com dois. Finalmente, todos os números devem ser unidos em uma única sequência de caracteres com um espaço entre cada número.
Como esse é o código-golfe , o código mais curto em bytes será vencedor.
(Ah, e a propósito ... você não pode usar o wc
comando na sua resposta. Caso isso já não fosse óbvio.)
Casos de teste ( \n
representa uma nova linha; opcionalmente, você também pode precisar de uma nova linha à direita):
"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"