La sfida:
Costruisci un grafico ASCII delle parole più comunemente usate in un dato testo.
Le regole:
- Accetta
a-z
eA-Z
(caratteri alfabetici) solo come parte di una parola. - Ignora involucro (
She
==she
ai nostri scopi). - Ignora le seguenti parole (abbastanza arbitrario, lo so):
the, and, of, to, a, i, it, in, or, is
Chiarimento: considerando
don't
: questo verrebbe preso come 2 "parole" diverse negli intervallia-z
eA-Z
: (don
et
).Opzionalmente (è troppo tardi per essere formalmente cambiando le specifiche ora) si può scegliere di abbandonare 'espressione' tutta la singola lettera (questo potrebbe potenzialmente fare per un accorciamento della lista ignora troppo).
Analizza un dato text
(leggi un file specificato tramite argomenti della riga di comando o reindirizzato; presume us-ascii
) e creaci un word frequency chart
con le seguenti caratteristiche:
- Visualizza il grafico (vedi anche l'esempio seguente) per le 22 parole più comuni (ordinate per frequenza decrescente).
- La barra
width
rappresenta il numero di occorrenze (frequenza) della parola (proporzionalmente). Aggiungi uno spazio e stampa la parola. - Assicurati che queste barre (più spazio-parola-spazio) si adattino sempre :
bar
+[space]
+word
+[space]
deve essere sempre <=80
caratteri (assicurati di tenere conto di possibili barre diverse e lunghezze delle parole: ad esempio: la seconda parola più comune potrebbe essere molto più lunga di il primo pur non differendo molto in frequenza). Massimizza la larghezza della barra all'interno di questi vincoli e ridimensiona le barre in modo appropriato (in base alle frequenze che rappresentano).
Un esempio:
Il testo per l'esempio è disponibile qui ( Alice's Adventures in Wonderland, di Lewis Carroll ).
Questo testo specifico produrrebbe il seguente diagramma:
_________________________________________________________________________ | _________________________________________________________________________ | lei | _______________________________________________________________ | tu | ____________________________________________________________ | disse | ____________________________________________________ | alice | ______________________________________________ | era | __________________________________________ | quello | ___________________________________ | come | _______________________________ | sua | ____________________________ | con | ____________________________ | a | ___________________________ | S | ___________________________ | t | _________________________ | sopra | _________________________ | tutti | ______________________ | Questo | ______________________ | per | ______________________ | aveva | _____________________ | ma | ____________________ | essere | ____________________ | non | ___________________ | essi | __________________ | così
Per tua informazione: queste sono le frequenze su cui si basa la tabella sopra:
[('she', 553), ('you', 481), ('detto', 462), ('alice', 403), ('was', 358), ('that ', 330), (' as ', 274), (' her ', 248), (' with ', 227), (' at ', 227), (' s ', 219), (' t ' , 218), ('on', 204), ('all', 200), ('this', 181), ('for', 179), ('had', 178), (' ma ', 175), (' be ', 167), (' not ', 166), (' they ', 155), (' so ', 152)]
Un secondo esempio (per verificare se sono state implementate le specifiche complete):
Sostituisci tutte le occorrenze nel file Alice nel paese delle meraviglieyou
collegato con :superlongstringstring
________________________________________________________________ | ________________________________________________________________ | lei | _______________________________________________________ | superlongstringstring | _____________________________________________________ | disse | ______________________________________________ | alice | ________________________________________ | era | _____________________________________ | quello | ______________________________ | come | ___________________________ | sua | _________________________ | con | _________________________ | a | ________________________ | S | ________________________ | t | ______________________ | sopra | _____________________ | tutti | ___________________ | Questo | ___________________ | per | ___________________ | aveva | __________________ | ma | _________________ | essere | _________________ | non | ________________ | essi | ________________ | così
Il vincitore:
Soluzione più breve (per numero di caratteri, per lingua). Divertiti!
Modifica : tabella riassuntiva dei risultati finora (15/02/2012) (originariamente aggiunta dall'utente Nas Banov):
Lingua rilassata rigorosa ========= ======= ====== GolfScript 130 143 Perl 185 Windows PowerShell 148 199 Mathematica 199 Rubino 185 205 Unix Toolchain 194 228 Python 183 243 Clojure 282 Scala 311 Haskell 333 Awk 336 R 298 Javascript 304 354 Groovy 321 Matlab 404 C # 422 Smalltalk 386 PHP 450 F # 452 TSQL 483 507
I numeri rappresentano la lunghezza della soluzione più breve in una lingua specifica. "Strict" si riferisce a una soluzione che implementa completamente la specifica (disegna |____|
barre, chiude la prima barra in cima con una ____
linea, tiene conto della possibilità di parole lunghe ad alta frequenza ecc.). "Rilassato" significa che alcune libertà sono state prese per accorciare alla soluzione.
Sono incluse solo soluzioni inferiori a 500 caratteri. L'elenco delle lingue è ordinato in base alla lunghezza della soluzione "rigorosa". 'Unix Toolchain' è usato per indicare varie soluzioni che usano la tradizionale shell * nix più un mix di strumenti (come grep, tr, sort, uniq, head, perl, awk).
s
e t
sono rappresentate.