Diese Herausforderung ähnelt der alten , jedoch mit einigen unklaren Teilen der Spezifikation und weniger strengen E / A-Anforderungen.
Wenn Sie eine Zeichenfolge eingeben, die nur aus druckbarem ASCII und Zeilenumbrüchen besteht, geben Sie die verschiedenen Metriken (Byte, Wort, Zeilenzahl) aus.
Die Metriken, die Sie ausgeben müssen, lauten wie folgt:
Byteanzahl. Da die Eingabezeichenfolge innerhalb von ASCII bleibt, ist dies auch die Zeichenanzahl.
Wortzahl. Dies ist
wcdie Definition eines "Wortes": jede Folge von Nicht-Leerzeichen. Zum Beispielabc,def"ghi"ist ein "Wort".Zeilenanzahl. Das ist selbsterklärend. Die Eingabe enthält immer einen nachgestellten Zeilenumbruch, was bedeutet, dass Zeilenanzahl gleichbedeutend mit "Zeilenumbruch" ist. Es wird nie mehr als eine einzige nachgestellte Zeile geben.
Die Ausgabe muss genau der Standardausgabe entsprechen wc(mit Ausnahme des Dateinamens):
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
Beachten Sie, dass die Zeilenanzahl zuerst kommt, dann die Wortanzahl und schließlich die Byteanzahl. Darüber hinaus muss jeder Zählwert mit Leerzeichen aufgefüllt werden, damit sie alle die gleiche Breite haben. Im obigen Beispiel 5501ist die "längste" Zahl 4-stellig, wird also 165mit einem Leerzeichen und 90mit zwei aufgefüllt . Schließlich müssen alle Zahlen zu einer einzigen Zeichenfolge mit einem Leerzeichen zwischen den Zahlen zusammengefügt werden.
Da es sich um Code-Golf , wird der kürzeste Code in Bytes gewinnen.
(Oh, und übrigens ... Sie können den wcBefehl nicht in Ihrer Antwort verwenden. Falls das noch nicht klar war.)
Testfälle ( \nstellt eine neue Zeile dar; optional können Sie auch eine zusätzliche nachgestellte Zeile benötigen):
"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"