Le défi:
Construisez un graphique ASCII des mots les plus couramment utilisés dans un texte donné.
Les règles:
- N'acceptez
a-z
etA-Z
(caractères alphabétiques) que dans le cadre d'un mot. - Ignorez le boîtier (
She
==she
pour notre propos). - Ignorez les mots suivants (assez arbitraires, je sais):
the, and, of, to, a, i, it, in, or, is
Clarification: considérant
don't
: cela serait considéré comme 2 «mots» différents dans les plagesa-z
etA-Z
: (don
ett
).Facultativement (il est trop tard pour modifier formellement les spécifications maintenant), vous pouvez choisir de supprimer tous les «mots» à une seule lettre (cela pourrait également réduire la liste des ignorés).
Analysez un donné text
(lisez un fichier spécifié via des arguments de ligne de commande ou insérez-le; présume us-ascii
) et construisez-nous un word frequency chart
avec les caractéristiques suivantes:
- Affichez le graphique (voir également l'exemple ci-dessous) pour les 22 mots les plus courants (classés par fréquence décroissante).
- La barre
width
représente le nombre d'occurrences (fréquence) du mot (proportionnellement). Ajoutez un espace et imprimez le mot. - Assurez-vous que ces barres (plus espace-mot-espace) correspondent toujours :
bar
+[space]
+word
+[space]
doit toujours être <=80
caractères (assurez-vous de prendre en compte les différentes longueurs de barre et de mot possibles: par exemple: le deuxième mot le plus courant pourrait être beaucoup plus long alors le premier tout en ne différant pas tellement en fréquence). Maximisez la largeur de la barre dans ces contraintes et mettez à l'échelle les barres de manière appropriée (en fonction des fréquences qu'elles représentent).
Un exemple:
Le texte de l'exemple peut être trouvé ici ( Alice's Adventures in Wonderland, par Lewis Carroll ).
Ce texte spécifique donnerait le graphique suivant:
_________________________________________________________________________ | _________________________________________________________________________ | elle | _______________________________________________________________ | tu | ____________________________________________________________ | m'a dit | ____________________________________________________ | Alice | ______________________________________________ | était | __________________________________________ | cette | ___________________________________ | comme | _______________________________ | sa | ____________________________ | avec | ____________________________ | à | ___________________________ | s | ___________________________ | t | _________________________ | sur | _________________________ | tout | ______________________ | ce | ______________________ | pour | ______________________ | eu | _____________________ | mais | ____________________ | être | ____________________ | ne pas | ___________________ | ils | __________________ | alors
Pour votre information: voici les fréquences sur lesquelles le tableau ci-dessus est construit:
[('elle', 553), ('vous', 481), ('a dit', 462), ('alice', 403), ('était', 358), ('que ', 330), (' as ', 274), (' her ', 248), (' with ', 227), (' at ', 227), (' s ', 219), (' t ' , 218), ('on', 204), ('all', 200), ('this', 181), ('for', 179), ('had', 178), (' mais ', 175), (' être ', 167), (' pas ', 166), (' ils ', 155), (' so ', 152)]
Un deuxième exemple (pour vérifier si vous avez implémenté la spécification complète):
remplacez chaque occurrence de you
dans le fichier Alice in Wonderland lié par superlongstringstring
:
________________________________________________________________ | ________________________________________________________________ | elle | _______________________________________________________ | superlongstringstring | _____________________________________________________ | m'a dit | ______________________________________________ | Alice | ________________________________________ | était | _____________________________________ | cette | ______________________________ | comme | ___________________________ | sa | _________________________ | avec | _________________________ | à | ________________________ | s | ________________________ | t | ______________________ | sur | _____________________ | tout | ___________________ | ce | ___________________ | pour | ___________________ | eu | __________________ | mais | _________________ | être | _________________ | ne pas | ________________ | ils | ________________ | alors
Le gagnant:
Solution la plus courte (par nombre de caractères, par langue). S'amuser!
Edit : Tableau résumant les résultats à ce jour (15/02/2012) (initialement ajouté par l'utilisateur Nas Banov):
Langue Relaxed Strict ========= ======= ====== GolfScript 130 143 Perl 185 Windows PowerShell 148 199 Mathematica 199 Rubis 185205 Chaîne d'outils Unix 194228 Python 183 243 Clojure 282 Scala 311 Haskell 333 Awk 336 R 298 Javascript 304 354 Groovy 321 Matlab 404 C # 422 Smalltalk 386 450 PHP F # 452 TSQL 483 507
Les nombres représentent la longueur de la solution la plus courte dans une langue spécifique. «Strict» fait référence à une solution qui implémente complètement la spécification (dessine des |____|
barres, ferme la première barre en haut avec une ____
ligne, tient compte de la possibilité de mots longs avec une fréquence élevée, etc.). «Relaxed» signifie que certaines libertés ont été prises pour se raccourcir en solution.
Seules les solutions plus courtes que 500 caractères sont incluses. La liste des langues est triée par la longueur de la solution «stricte». «Unix Toolchain» est utilisé pour désigner diverses solutions qui utilisent le shell * nix traditionnel plus un mélange d'outils (comme grep, tr, sort, uniq, head, perl, awk).
s
et t
sont représentés.