Écrivez le programme le plus court qui génère un histogramme (une représentation graphique de la distribution des données).
Règles:
- Doit générer un histogramme basé sur la longueur des caractères des mots (ponctuation incluse) entrés dans le programme. (Si un mot fait 4 lettres, la barre représentant le chiffre 4 augmente de 1)
- Doit afficher des étiquettes de barres en corrélation avec la longueur des caractères que les barres représentent.
- Tous les caractères doivent être acceptés.
- Si les barres doivent être mises à l'échelle, il doit y avoir un moyen qui est affiché dans l'histogramme.
Exemples:
$ ./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 |##
Réponses:
K, 35
.
.
Un exemple plus long
la source
R,
5547 caractèresHeureusement, R est livré avec une fonction de tracé
hist
pour les histogrammes, ici fournie avec unbreaks
argument où les ruptures sont de 0,5, 1,5, ... jusqu'à max (entrée) +0,5.sapply(scan(,""),nchar)
prend une entrée (comme stdin), la sépare en suivant les espaces et compte le nombre de caractères de chaque élément.Exemples:
Éditer:
Une variation à 71 caractères avec une étiquette d'axe à chaque valeur possible:la source
Python - 83 caractères
Semble que nous pouvons prendre des entrées de n'importe où, donc cela prend des entrées lors de l'exécution, plutôt que de la ligne de commande, et utilise la suggestion d'Ejrb pour la raccourcir de 8.
Python - 91 caractères
Cela tombera avec des citations.
Contribution:
Production:
la source
exec
et la concaténation de chaînes:c=0;exec'c+=1;print"%3d|"%c+"#"*s.count(c);'*max(s)
Haskell - 126 caractères
Cela prend l'entrée de
stdin
, pas la ligne de commande:la source
Python 3.3 (93)
Sortie:
(la première ligne est la chaîne d'entrée)
Cela ne justifie pas les chiffres en tant que solution Python de Lego Stormtroopr (qui est également plus courte que la mienne), mais c'est ma première entrée dans un concours de golf, alors je pourrais aussi bien laisser ici, je suppose :)
la source
Perl, 56
Ajout de la réécriture de @ manatwork et de la suggestion de nouvelle ligne littérale, merci beaucoup! Ajout des mises à jour de @ chinese_perl_goth.
Utilisation: enregistrer sous hist.pl et exécuter
perl hist.pl This is a test
Exemple de sortie:
la source
printf
? Vous pouvez épargner certains caractères lors du formatage. Et un peu plus en changeant de hachage tableau:$d[y///c]++for@ARGV;shift@d;printf"%2d|%s\n",++$i,"#"x$_ for@d
.printf
ne m'est pas venu du tout à l' esprit et pour une raison quelconque, je ne pensais pas pouvoir obtenir l'effet que je voulais avec un tableau, incroyable! @ syb0rg ajoutant maintenant$d[y///c].='#'for@ARGV;printf"%2d|$d[$_]\n",$_ for+1..$#d
\n
ménager 1 caractère supplémentaire. Je veux dire comme ça: pastebin.com/496z2a0nJ,
4847464543 caractèresUsage:
la source
[:((](;#&'#')"0[:+/=/)1+[:i.>./)#@>@;:
: essayez-le en ligne!Rubis,
9885Pas beaucoup joué au golf. Jouera au golf plus tard.
la source
b ?(?#*b[1].size):''
avecb&&?#*b[1].size
.Powershell,
9793Exemple:
la source
$a=@{};-split$args|%{$a[$_.length]++};1..($a.Keys|sort)[-1]|%{"{0,-2}|"-f$_+"#"*$a[$_]}
APL (42)
Pourrait être plus court si je pouvais omettre des lignes où la valeur est 0.
Explication:
⎕ML←3
: définissez le niveau de migration sur 3 (ce qui rend⊂
(partition) plus utile).I⊂⍨' '≠I←⍞
: lire l'entrée, diviser les espacesM←↑∘⍴¨
: obtenez la taille de la première dimension de chaque élément (longueur des mots) et stockez-la dansM
K←⍳⌈/M
: obtenir les nombres de 1 à la valeur la plus élevée dansM
, stocker dansK
+⌿K∘.=M
: pour chaque valeur dansM
, voyez combien de fois elle est contenue dansK
.⊃⍴∘'▓'¨
: pour chaque valeur, obtenez une liste de ce nombre▓
et formatez-la comme une matrice.K,
: ajoutez chaque valeurK
à chaque ligne de la matrice, en donnant les étiquettes.Production:
la source
Mathematica 97
Lorsque j'entre le texte de la déclaration d'indépendance sous la forme d'une seule chaîne (par couper-coller, bien sûr), la sortie générée est la suivante:
la source
Forth, 201
C'était amusant mais ma soumission Ruby est plus compétitive. ;-)
Exemple d'exécution:
La longueur maximale des mots est de 99.
la source
Rubis, 79
Exemple d'exécution:
Veuillez voir ma soumission pour rire.
la source
Rubis 1.8.7, 74
Une prise légèrement différente des autres solutions rubis:
production:
la source
JavaScript (
159133)Certainement pas compétitif, mais jusqu'à présent la seule solution JavaScript. Merci à @manatwork pour l'astuce sur l'utilisation
String.replace
.Contribution
Production
la source
replace()
lieu desplit()
+for
et auArray
lieu deObject
+ longueur variable séparée peut être réduite avec quelques caractères: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++]||""))
. (Et encore plus court dans Harmonyprompt(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
there.Pure bash 120
Échantillon:
Enregistrez 8 caractères en utilisant une seule fourche pour
tr
: 112Donne le même résultat:
rendre (sur mon hôte :)
la source
PHP, 162
Usage:
la source
8ème , 162 octets
Code
Usage
Production
Code non golfé ( SED est un diagramme d'effet de pile)
la source