Schreiben Sie das kürzeste Programm, das ein Histogramm generiert (eine grafische Darstellung der Datenverteilung).
Regeln:
- Es muss ein Histogramm erstellt werden, das auf der Zeichenlänge der in das Programm eingegebenen Wörter (einschließlich Interpunktion) basiert. (Wenn ein Wort 4 Buchstaben lang ist, erhöht sich der Balken für die Zahl 4 um 1)
- Es müssen Balkenbeschriftungen angezeigt werden, die mit der Zeichenlänge korrelieren, die die Balken darstellen.
- Alle Zeichen müssen akzeptiert werden.
- Wenn die Balken skaliert werden müssen, muss es eine Möglichkeit geben, die im Histogramm angezeigt wird.
Beispiele:
$ ./histogram This is a hole in one!
1 |#
2 |##
3 |
4 |###
$./histogram Extensive word length should not be very problematic.
1 |
2 |#
3 |#
4 |##
5 |
6 |##
7 |
8 |
9 |#
10|
11|
12|#
./histogram Very long strings of words should be just as easy to generate a histogram just as short strings of words are easy to generate a histogram for.
1 |##
2 |#######
3 |#
4 |#######
5 |###
6 |#
7 |##
8 |##
9 |##
Antworten:
K, 35
.
.
Ein längeres Beispiel
quelle
R,
5547 ZeichenGlücklicherweise verfügt R über eine Plotfunktion
hist
für Histogramme, die hier mit einembreaks
Argument versehen ist, bei dem die Unterbrechungen 0,5, 1,5, ... bis max (Eingabe) +0,5 betragen.sapply(scan(,""),nchar)
Nimmt eine Eingabe (als stdin), trennt sie nach den Leerzeichen und zählt die Anzahl der Zeichen jedes Elements.Beispiele:
Bearbeiten:
Eine Variation mit 71 Zeichen mit einer Achsenbeschriftung bei jedem möglichen Wert:quelle
Python - 83 Zeichen
Es scheint, dass wir Eingaben von überall nehmen können, also nimmt dies Eingaben während der Ausführung und nicht über die Befehlszeile entgegen und verwendet Ejrbs Vorschlag, um sie um 8 zu verkürzen.
Python - 91 Zeichen
Dies wird mit Anführungszeichen umfallen.
Eingang:
Ausgabe:
quelle
exec
und die Verkettung von Zeichenfolgen:c=0;exec'c+=1;print"%3d|"%c+"#"*s.count(c);'*max(s)
Haskell - 126 Zeichen
Dies erfolgt über die Eingabe
stdin
und nicht über die Befehlszeile:quelle
Python 3.3 (93)
Ausgabe:
(Die erste Zeile ist die Eingabezeichenfolge)
Es rechtfertigt keine Zahlen als Python-Lösung von Lego Stormtroopr (die auch kürzer als meine ist), aber es ist mein erster Eintrag in einem Golfwettbewerb, also könnte ich es genauso gut hier lassen, denke ich :)
quelle
Perl, 56
@ Manatworks Umschreib- und wörtlicher Newline-Vorschlag hinzugefügt, vielen Dank! @ Chinese_perl_goth's Updates hinzugefügt.
Verwendung: Als hist.pl speichern und ausführen
perl hist.pl This is a test
Beispielausgabe:
quelle
printf
? Sie könnten einige Zeichen bei der Formatierung sparen. Und noch mehr, indem Sie von Hash zu Array wechseln :$d[y///c]++for@ARGV;shift@d;printf"%2d|%s\n",++$i,"#"x$_ for@d
.printf
kam mir überhaupt nicht in den Sinn und aus irgendeinem Grund dachte ich nicht, dass ich mit einem Array den gewünschten Effekt erzielen könnte, erstaunlich! @ Syb0rg jetzt hinzufügen$d[y///c].='#'for@ARGV;printf"%2d|$d[$_]\n",$_ for+1..$#d
\n
1 weiteres Zeichen zu sparen . Ich meine , wie diese: pastebin.com/496z2a0nJ,
4847464543 ZeichenVerwendungszweck:
quelle
[:((](;#&'#')"0[:+/=/)1+[:i.>./)#@>@;:
: Probieren Sie es online aus!Ruby,
9885Nicht viel Golf gespielt. Wird später mehr Golf spielen.
quelle
b ?(?#*b[1].size):''
mitb&&?#*b[1].size
.Powershell,
9793Beispiel:
quelle
$a=@{};-split$args|%{$a[$_.length]++};1..($a.Keys|sort)[-1]|%{"{0,-2}|"-f$_+"#"*$a[$_]}
APL (42)
Könnte kürzer sein, wenn ich Zeilen weglassen könnte, in denen der Wert 0 ist.
Erläuterung:
⎕ML←3
: Setzen Sie die Migrationsstufe auf 3 (dies macht⊂
(Partition) nützlicher).I⊂⍨' '≠I←⍞
: Eingabe lesen, auf Leerzeichen aufteilenM←↑∘⍴¨
: Ermittelt die Größe der ersten Dimension jedes Elements (Wortlängen) und speichert inM
K←⍳⌈/M
: Holen Sie sich die Zahlen von 1 bis zum höchsten Wert inM
, speichern Sie inK
+⌿K∘.=M
:M
Sehen Sie für jeden Wert in , wie oft er enthalten istK
.⊃⍴∘'▓'¨
: Holen Sie sich für jeden Wert darin eine Liste mit so vielen▓
s und formatieren Sie sie als Matrix.K,
: Stellen Sie jeden WertK
jeder Zeile in der Matrix voran und geben Sie die Beschriftungen an.Ausgabe:
quelle
Mathematica 97
Wenn ich den Text der Unabhängigkeitserklärung als einzelne Zeichenfolge eingebe (natürlich durch Ausschneiden und Einfügen), wurde folgende Ausgabe generiert:
quelle
Viertens 201
Das hat Spaß gemacht, aber meine Ruby-Einreichung ist wettbewerbsfähiger. ;-);
Probelauf:
Die maximale Wortlänge beträgt 99.
quelle
Ruby, 79
Beispiellauf:
Bitte sehen Sie meine Forth-Einreichung für ein Lachen.
quelle
Ruby 1.8.7, 74
Eine etwas andere Einstellung als die anderen Rubinlösungen:
Ausgabe:
quelle
JavaScript (
159133)Auf keinen Fall wettbewerbsfähig, aber bisher die einzige JavaScript-Lösung. Vielen Dank an @manatwork für den Tipp zur Verwendung
String.replace
.Eingang
Ausgabe
quelle
replace()
anstelle vonsplit()
+for
undArray
anstelle vonObject
+ kann eine separate Längenvariable mit wenigen Zeichen reduziert werden :prompt(o=[]).replace(/\S+/g,function(p){o[l=p.length]=(o[l]||"")+"#"});for(i=1;i<o.length;)console.log(i+(i>9?"|":" |")+(o[i++]||""))
. (Und noch kürzer in Harmony :prompt(o=[]).replace(/\S+/g,p=>o[l=p.length]=(o[l]||"")+"#");for(i=1;i<o.length;)console.log(i+(i>9?"|":" |")+(o[i++]||""))
.).length
dort.Pure Bash 120
Stichprobe:
Speichern Sie 8 Zeichen, indem Sie eine Gabel verwenden, um
tr
: 112Geben Sie das gleiche Ergebnis:
rendern (auf meinem Host :)
quelle
PHP, 162
Verwendungszweck:
quelle
8. 162 Bytes
Code
Verwendungszweck
Ausgabe
Ungolfed Code ( SED ist Stack Effect Diagram)
quelle