To wyzwanie jest podobne do tego starego , ale z pewnymi niejasnymi częściami specyfikacji i mniej surowymi wymaganiami wejścia / wyjścia.
Biorąc pod uwagę ciąg znaków składający się tylko z drukowalnego kodu ASCII i nowego wiersza, wypisz jego różne metryki (bajt, słowo, liczba wierszy).
Dane, które należy wygenerować, są następujące:
Liczba bajtów. Ponieważ ciąg wejściowy pozostaje w obrębie ASCII, jest to również liczba znaków.
Liczba słów. To jest
wcdefinicja „słowa:” dowolnej sekwencji spacji. Na przykładabc,def"ghi"to jedno „słowo”.Liczba linii To jest oczywiste. Dane wejściowe zawsze będą zawierać końcowy znak nowej linii, co oznacza, że liczba wierszy jest równoznaczna z „liczbą nowych wierszy”. Nigdy nie będzie więcej niż jedna nowa linia końcowa.
Dane wyjściowe muszą dokładnie replikować dane wcwyjściowe (z wyjątkiem nazwy pliku):
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
Zauważ, że najpierw pojawia się liczba wierszy, potem liczba słów, a na końcu liczba bajtów. Ponadto każda liczba musi być wypełniona lewą spacją, tak aby wszystkie miały tę samą szerokość. W powyższym przykładzie 5501„najdłuższa” liczba składa się z 4 cyfr, więc 165jest uzupełniona jedną spacją i 90dwiema. Na koniec wszystkie liczby muszą być połączone w jeden ciąg ze spacją między każdą liczbą.
Ponieważ jest to code-golf , wygra najkrótszy kod w bajtach.
(A tak przy okazji ... nie możesz użyć wcpolecenia w swojej odpowiedzi. W przypadku, gdy nie było to już oczywiste).
Przypadki testowe ( \nreprezentuje znak nowej linii; opcjonalnie możesz również wymagać wprowadzenia nowej linii końcowej):
"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"