Contribution
Une liste de mots séparés par un nombre quelconque d'espaces.
Sortie
Un graphique ASCII horizontal, où la n-ième ligne est composée d'autant d'astérisques ( *
) que le n-ième mot est long.
Exemple d'utilisation
L' >
entrée des signaux utilisateur, vous ne devez pas la saisir lors du test du programme.
> This is an example histogram of word length
****
**
**
*******
*********
**
****
******
> a aa aaa aaaa aaaaa
*
**
***
****
*****
> double space example
******
*****
*******
Implémentation de référence
En cas de doute sur la spécification, la sortie de votre programme doit correspondre exactement à celle du programme ci-dessous sous toutes les entrées.
puts gets.chomp.split.map{|word| '*' * word.length}.join("\n")
Réponses:
Rétine , 5 + 3 = 8 octets
Chaque ligne va dans son propre fichier, j'ai donc ajouté 1 octet pour chaque fichier supplémentaire. En outre, le
\n
doit être remplacé par un véritable retour à la ligne.Chaque paire de lignes est une paire de remplacement de modèle.
+
correspond à un ou plusieurs espaces et le remplace par une nouvelle ligne..
correspond à n'importe quel caractère sauf une nouvelle ligne, et il le remplace par un*
. Ceci est appliqué globalement, donc chaque caractère est remplacé par un*
.la source
Pyth, 9 octets
Explication:
la source
CJam, 10 octets
Comment ça marche :
Essayez-le en ligne ici
la source
R - 33
où
scan(,"")
lit à partir de stdin et divise l'espace blanc en un vecteur de caractères.gsub(".", "*", ...)
remplace tous les caractères dans*
.write(..., "")
imprime sur stdout avec "\ n" comme séparateur par défaut.la source
Python 3, 43 octets:
Merci à @BetaDecay d' avoir signalé une erreur de syntaxe.
Exemple d'exécution:
(La chaîne ci-dessous est entrée comme un littéral, plutôt que comme du texte)
Bonus: histogramme vertical
Merci à @Caridorc d' avoir signalé mon erreur qui faisait que les bonus comportaient 1 à plusieurs lignes.
Démo:
Bonus: histogramme vertical (à l'envers)
Démo:
la source
R, 38 octets (avec un peu d'aide dans les commentaires)
Comment ça marche
gsub
remplace tous les espaces sans*
gsub
ajoute\n
(nouvelle ligne) à la fin de chaque élémentcat
imprime en conséquenceDémo
la source
> <> ,
3837 octetsMalédiction vous double cas d'espace * secoue le poisson *.
Vous pouvez l' essayer en ligne (tout ce que vous avez à faire est de donner votre avis via le champ près du bas, puis d'
Give
appuyer sur le bouton). Les suggestions pour continuer à jouer au golf sont toujours les bienvenues, en particulier les idées pour éliminer ces espaces inutiles devant les deuxième et troisième lignes.Si vous étiez autorisé à imprimer une nouvelle ligne supplémentaire pour des espaces supplémentaires, le code pourrait être un énorme 27 octets :
Explication
Remarque: l'ordre de l'explication correspondra à l'emplacement du pointeur (donc si le code est expliqué hors de ce que l'on considérerait comme de l'ordre, c'est parce que c'est l'ordre dans lequel le pointeur l'exécute).
Ligne 1:
Ligne 2:
Ligne 3:
NB Cette ligne va en sens inverse, alors lisez de droite à gauche.
Fondamentalement, le programme teste pour s'assurer que l'entrée (qui est lue un caractère à la fois) n'est pas un espace, puis imprime un astérisque. Il se termine s'il n'y a pas d'entrée (la valeur d'entrée est -1). Pour être sûr qu'il n'imprime pas de sauts de ligne supplémentaires, il utilise la valeur de registre, qu'il définit soit à 0 soit à 1. En raison de la façon dont je le configure, il ne se soucie pas des valeurs étrangères poussées sur la pile (par exemple la valeur du registre lorsqu'il le définit
1
après l'impression d'un astérisque); ils restent sur la pile à la fin du programme mais ne font rien.Je sais que cela peut être un peu déroutant depuis que j'ai utilisé
84*
et67*
au lieu de" "
et"*"
respectivement, mais c'était parce que je n'avais pas envie de mettre des chaînes dans le programme pour une raison quelconque.la source
Javascript ES6
Fonction, 46 caractères
Programme, 55 caractères
la source
"f=s=>s.replace(/\S/g,'*').replace(/\s+/g,'\n')".length
pour mesurer la longueur et j'ai oublié\
.Perl, 16 octets (15 caractères +
-p
)Courir comme:
Enregistré un octet supplémentaire, grâce à @ThisSuitIsBlackNot , je n'avais jamais rencontré
y///s
auparavant!la source
y/ /\n/s;
Gema,
119 caractèresExemple d'exécution:
la source
PHP 5.3,
55535150 octetsUtilisation:
appelez le script et définissez une variable globale ($ a)
php -d error_reporting=0 script.php?a="This is an example histogram of word length"
Sortie:
la source
Java, 102 octets
la source
Haskell, 31 octets
Exemple d'utilisation:
la source
putStr.
parf=
pour réduire le nombre d'octets, ou utilisermain=interact$
au lieu deputStr.
pour lire à partir de STDIN et en faire un programme completf=unlines.map(>>"*").words
renvoie quelque chose comme"****\n**\n**\n"
et ne génère pas de "graphique graphique ASCII horizontal" comme demandé.CJam, 11 octets
En concurrence pour la deuxième place dans CJam après que @Optimizer ait trouvé une solution intelligente de 10 octets. Il s'agit d'une solution simple de 11 octets:
Essayez-le en ligne
Solution alternative qui utilise une boucle au lieu des deux cartes, également 11 octets:
Explication de la première solution:
la source
JavaScript (ES6), 37
Version plus courte en utilisant une seule
replace
.la source
J, 10 octets
Bonus: vertical (12 octets)
Bonus: inversé vertical (14 octets)
la source
Python 3, 72 octets
Une belle doublure :)
Sortie:
Il y a un retour à la ligne ici. Si vous le voulez sans, vous devez ajouter 5 octets:
la source
Julia, 50 octets
Cela crée une fonction sans nom qui prend une chaîne en entrée et imprime sur STDOUT.
Non golfé:
la source
JavaScript (ES5)
Programme, 54 caractères
Fonction, 60 caractères
Exemple d'utilisation:
la source
Matlab - 54 octets
Cela s'exécute à partir de la console, prendra une chaîne en entrée
stdin
et produira le graphique de mots horizontal dansstdout
:Exemple:
Ou nous pourrions essayer de créer des formes fantaisistes:
la source
Matlab / Octave, 75 octets
Utilisation d'une fonction anonyme:
Merci à Hoki d'avoir repéré une erreur qui a empêché la détection du dernier mot.
Exemple d'utilisation (Matlab):
Ou essayez-le en ligne (Octave).
la source
PowerShell,
3531 octetsAssez compétitif pour un changement. Go go gadget unary operators. J'oublie également que les parens sur certaines fonctions, comme
-split
et-replace
utilisées ici, sont facultatifs.Appelé via une entrée de pipeline (équivalent à stdin pour PowerShell):
En prime, si nous pouvons à la place utiliser des arguments de ligne de commande, nous pouvons descendre à 20 octets et avoir quelque chose qui fonctionne à la fois avec et sans une seule chaîne en entrée:
la source
Javascript (ES6)
Nouvelle solution (39 octets):
Solution Regex (42 octets):
Solution non regex (71 octets):
Ces solutions définissent des fonctions anonymes. Attribuez-les à des variables ou appelez-les ainsi:
la source
SWI-Prolog, 40 octets
Appelé avec des chaînes de code, par exemple
a(`This is an example histogram of word length`).
la source
STATA, 72 octets
Non golfé
Notez que ce code ne fonctionne pas dans l'interpréteur en ligne et nécessite l'interpréteur STATA propriétaire non libre.
la source
C ++ 14,
107106 octetsla source
K5, 31 octets
la source
O, 22 octets
Explication
la source
Faisceau, 92 octets
Ce n'est pas une réponse compétitive du tout et vraiment assez tard, mais j'ai joué un peu avec Beam ces derniers temps et je voulais voir si je pouvais le faire faire. J'ai enfin eu du succès :)
Afficher l'extrait de code
la source
AWK
exemples
sortie:-
la source