Eingang
Eine Liste von Wörtern, die durch eine beliebige Anzahl von Leerzeichen getrennt sind.
Ausgabe
Ein horizontales ASCII-Grafikdiagramm, bei dem die n-te Linie aus so vielen Sternchen ( *
) besteht, wie das n-te Wort lang ist.
Anwendungsbeispiel
Die >
Signale, die der Benutzer eingibt, sollten Sie beim Testen des Programms nicht eingeben.
> This is an example histogram of word length
****
**
**
*******
*********
**
****
******
> a aa aaa aaaa aaaaa
*
**
***
****
*****
> double space example
******
*****
*******
Referenzimplementierung
Im Zweifelsfall über die Spezifikation sollte die Ausgabe Ihres Programms unter allen Eingaben genau der des folgenden Programms entsprechen.
puts gets.chomp.split.map{|word| '*' * word.length}.join("\n")
Antworten:
Retina , 5 + 3 = 8 Bytes
Jede Zeile geht in eine eigene Datei, also habe ich für jede weitere Datei 1 Byte hinzugefügt. Außerdem
\n
sollte der durch einen tatsächlichen Zeilenumbruch ersetzt werden.Jedes Linienpaar ist ein Musterersetzungspaar.
+
Stimmt mit einem oder mehreren Leerzeichen überein und ersetzt es durch eine neue Zeile..
stimmt mit jedem Zeichen außer einem Zeilenumbruch überein und ersetzt dieses durch ein*
. Dies wird global angewendet, sodass jedes Zeichen durch ein ersetzt wird*
.quelle
Pyth, 9 Bytes
Erläuterung:
quelle
CJam, 10 Bytes
Wie es funktioniert :
Probieren Sie es hier online aus
quelle
R - 33
woher
scan(,"")
Liest aus stdin und teilt den Leerraum in einen Zeichenvektor auf.gsub(".", "*", ...)
ersetzt alle Zeichen in*
.write(..., "")
druckt auf Standardausgabe mit "\ n" als Standardtrennzeichen.quelle
Python 3, 43 Bytes:
Vielen Dank an @BetaDecay für den Hinweis auf einen Syntaxfehler.
Probelauf:
(Die folgende Zeichenfolge wird als Literal und nicht als Text eingegeben.)
Bonus: vertikales Histogramm
Vielen Dank an @Caridorc für den Hinweis auf meinen Fehler, dass die Boni 1 bis viele Zeilen enthalten.
Demo:
Bonus: vertikales Histogramm (verkehrt herum)
Demo:
quelle
R, 38 Bytes (mit etwas Hilfe in Kommentaren)
Wie es funktioniert
gsub
Ersetzt alle Leerzeichen durch*
gsub
fügt\n
(newline) am Ende jedes Elements hinzucat
druckt entsprechendDemo
quelle
> <> ,
3837 BytesFluch du doppelter Raum Fall * schüttelt Fisch *.
Sie können es online ausprobieren (alles, was Sie tun müssen, ist eine Eingabe über das Feld am unteren Rand und
Give
drücken Sie dann die Taste). Vorschläge für weiteres Golfen sind immer willkommen, insbesondere Ideen, um diese verschwenderischen Räume vor der zweiten und dritten Zeile zu entfernen.Wenn Sie eine zusätzliche neue Zeile für zusätzliche Leerzeichen drucken könnten, könnte der Code ganze 27 Bytes umfassen :
Erläuterung
Anmerkung: Die Reihenfolge der Erklärung entspricht der Position des Zeigers (wenn der Code also in einer anderen Reihenfolge erklärt wird, als dies der Fall wäre, führt der Zeiger ihn in dieser Reihenfolge aus).
Linie 1:
Zeile 2:
Zeile 3:
Hinweis: Diese Zeile verläuft in umgekehrter Reihenfolge. Lesen Sie also von rechts nach links.
Grundsätzlich prüft das Programm, ob die Eingabe (die zeichenweise gelesen wird) kein Leerzeichen ist und gibt dann einen Stern aus. Es wird beendet, wenn keine Eingabe vorliegt (der Eingabewert ist -1). Um sicherzustellen, dass keine zusätzlichen Zeilenumbrüche gedruckt werden, wird der Registerwert verwendet, der entweder auf 0 oder 1 gesetzt wird. Aufgrund der Art und Weise, wie ich ihn einrichte, ist es egal, welche Werte auf den Stapel übertragen werden (z. B. den Wert des Registers, auf den es
1
nach dem Drucken eines Sternchens gesetzt wird); Sie verbleiben auf dem Stapel, wenn das Programm beendet wird, tun aber nichts.Ich weiß , es könnte ein bisschen verwirrend , da ich verwenden ,
84*
und67*
statt" "
und"*"
jeweils, aber das war , weil ich nicht aus irgendeinem Grunde , wie wenn man Strings im Programm fühlen.quelle
Javascript ES6
Funktion, 46 Zeichen
Programm, 55 Zeichen
quelle
"f=s=>s.replace(/\S/g,'*').replace(/\s+/g,'\n')".length
, um die Länge zu messen und vergaß\
.Perl, 16 Bytes (15 Zeichen +
-p
)Rennen wie:
Dank @ThisSuitIsBlackNot wurde ein zusätzliches Byte gespeichert , auf das ich noch nie gestoßen
y///s
war!quelle
y/ /\n/s;
Gema,
119 ZeichenProbelauf:
quelle
PHP 5.3,
55535150 BytesVerbrauch:
Rufen Sie das Script und definieren eine globale Variable ($ a)
php -d error_reporting=0 script.php?a="This is an example histogram of word length"
Ausgabe:
quelle
Java, 102 Bytes
quelle
Haskell, 31 Bytes
Anwendungsbeispiel:
quelle
putStr.
mitf=
der Bytezahl zu senken, oder verwenden Siemain=interact$
stattputStr.
von STDIN zu lesen und ein komplettes Programm zu machenf=unlines.map(>>"*").words
etwas zurück"****\n**\n**\n"
und gibt nicht wie gewünscht ein "horizontales ASCII- Kunstdiagramm " aus.CJam, 11 Bytes
Im Wettbewerb um den zweiten Platz in CJam fand @Optimizer eine clevere 10-Byte-Lösung. Dies ist eine einfache 11-Byte-Lösung:
Probieren Sie es online aus
Alternative Lösung, die anstelle der beiden Maps eine Schleife verwendet, ebenfalls 11 Byte:
Erklärung zur ersten Lösung:
quelle
JavaScript (ES6), 37
Kürzere Version mit nur einer
replace
.quelle
J, 10 Bytes
Bonus: vertikal (12 Bytes)
Bonus: vertikal gespiegelt (14 Bytes)
quelle
Python 3, 72 Bytes
Ein schöner Einzeiler :)
Ausgabe:
Es gibt hier einen nachgestellten Zeilenumbruch. Wenn Sie es ohne wollen, müssen Sie 5 Bytes hinzufügen:
quelle
Julia, 50 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die eine Zeichenfolge als Eingabe verwendet und an STDOUT ausgegeben wird.
Ungolfed:
quelle
JavaScript (ES5)
Programm, 54 Zeichen
Funktion, 60 Zeichen
Anwendungsbeispiel:
quelle
Matlab - 54 Bytes
Dies läuft von der Konsole aus, nimmt einen String in die Eingabe von
stdin
und gibt das horizontale Wortdiagramm aus instdout
:Beispiel:
Oder wir könnten versuchen, ausgefallene Formen zu kreieren:
quelle
Matlab / Octave, 75 Bytes
Verwenden einer anonymen Funktion:
Vielen Dank an Hoki, der einen Fehler entdeckt hat, der verhindert hat, dass das letzte Wort erkannt wird.
Anwendungsbeispiel (Matlab):
Oder versuchen Sie es online (Oktave).
quelle
PowerShell,
35 -31 ByteZur Abwechslung ziemlich konkurrenzfähig. Go go Gadget unären Operatoren. Ich vergesse auch immer wieder, dass das Paren einiger Funktionen, wie der hier verwendeten
-split
und-replace
, optional ist.Wird über die Pipelineeingabe aufgerufen (entspricht stdin für PowerShell):
Als Bonus können wir, wenn wir stattdessen Befehlszeilenargumente verwenden können, bis zu 20 Bytes reduzieren und etwas haben, das sowohl mit als auch ohne eine einzelne Zeichenfolge als Eingabe funktioniert:
quelle
Javascript (ES6)
Neue Lösung (39 Bytes):
Regex-Lösung (42 Byte):
Nicht-Regex-Lösung (71 Byte):
Diese Lösungen definieren anonyme Funktionen. Ordnen Sie sie Variablen zu oder rufen Sie sie wie folgt auf:
quelle
SWI-Prolog, 40 Bytes
Wird mit Code-Strings aufgerufen, z
a(`This is an example histogram of word length`).
quelle
STATA, 72 Bytes
Ungolfed
Beachten Sie, dass dieser Code im Online-Interpreter nicht funktioniert und den nicht-freien proprietären STATA-Interpreter erfordert.
quelle
C ++ 14,
107106 Bytesquelle
K5, 31 Bytes
quelle
O, 22 Bytes
Erläuterung
quelle
Strahl, 92 Bytes
Dies ist überhaupt keine wettbewerbsfähige Antwort und ziemlich spät, aber ich habe in letzter Zeit ein bisschen mit Beam herumgespielt und wollte sehen, ob ich es dazu bringen kann, dies zu tun. Endlich ein paar Erfolge :)
Code-Snippet anzeigen
quelle
AWK
Beispiele
Ausgabe:-
quelle