El reto:
Cree un cuadro ASCII de las palabras más utilizadas en un texto dado.
Las normas:
- Solo acepta
a-z
yA-Z
(caracteres alfabéticos) como parte de una palabra. - Ignorar la carcasa (
She
==she
para nuestro propósito). - Ignora las siguientes palabras (bastante arbitrario, lo sé):
the, and, of, to, a, i, it, in, or, is
Aclaración: considerando
don't
: esto se tomaría como 2 'palabras' diferentes en los rangosa-z
yA-Z
: (don
yt
).Opcionalmente (es demasiado tarde para cambiar formalmente las especificaciones ahora), puede optar por eliminar todas las 'palabras' de una sola letra (esto también podría acortar la lista de ignorados).
Analice un determinado text
(lea un archivo especificado a través de argumentos de línea de comando o entorpecido; presuma us-ascii
) y construya un a word frequency chart
con las siguientes características:
- Muestre la tabla (también vea el ejemplo a continuación) para las 22 palabras más comunes (ordenadas por frecuencia descendente).
- El bar
width
representa el número de ocurrencias (frecuencia) de la palabra (proporcionalmente). Agregue un espacio e imprima la palabra. - Asegúrese de que estas barras (más espacio-palabra-espacio) siempre encajan :
bar
+[space]
+word
+[space]
siempre deben tener <=80
caracteres (asegúrese de tener en cuenta las posibles longitudes de barra y palabra diferentes: por ejemplo: la segunda palabra más común podría ser mucho más larga que el primero aunque no difiere mucho en frecuencia). Maximice el ancho de la barra dentro de estas restricciones y escale las barras adecuadamente (de acuerdo con las frecuencias que representan).
Un ejemplo:
El texto para el ejemplo se puede encontrar aquí ( Alice's Adventures in Wonderland, por Lewis Carroll ).
Este texto específico produciría el siguiente cuadro:
_________________________________________________________________________ | _________________________________________________________________________ | ella | _______________________________________________________________ | tú | ____________________________________________________________ | dijo | ____________________________________________________ | Alicia | ______________________________________________ | estaba | __________________________________________ | ese | ___________________________________ | como | _______________________________ | su | ____________________________ | con | ____________________________ | a | ___________________________ | s | ___________________________ | t | _________________________ | en | _________________________ | todas | ______________________ | esta | ______________________ | para | ______________________ | tenido | _____________________ | pero | ____________________ | ser | ____________________ | no | ___________________ | ellos | __________________ | entonces
Para su información: estas son las frecuencias sobre las que se basa la tabla anterior:
[('ella', 553), ('usted', 481), ('dijo', 462), ('alicia', 403), ('era', 358), ('que ', 330), (' como ', 274), (' ella ', 248), (' con ', 227), (' en ', 227), (' s ', 219), (' t ' , 218), ('on', 204), ('all', 200), ('this', 181), ('for', 179), ('had', 178), (' pero ', 175), (' be ', 167), (' not ', 166), (' they ', 155), (' so ', 152)]
Un segundo ejemplo (para verificar si implementó la especificación completa):
reemplace cada aparición you
en el archivo vinculado Alicia en el país de las maravillas con superlongstringstring
:
________________________________________________________________ | ________________________________________________________________ | ella | _______________________________________________________ | superlongstringstring | _____________________________________________________ | dijo | ______________________________________________ | Alicia | ________________________________________ | estaba | _____________________________________ | ese | ______________________________ | como | ___________________________ | su | _________________________ | con | _________________________ | a | ________________________ | s | ________________________ | t | ______________________ | en | _____________________ | todas | ___________________ | esta | ___________________ | para | ___________________ | tenido | __________________ | pero | _________________ | ser | _________________ | no | ________________ | ellos | ________________ | entonces
El ganador:
La solución más corta (por número de caracteres, por idioma). ¡Que te diviertas!
Editar : Tabla que resume los resultados hasta el momento (15/02/2012) (originalmente agregado por el usuario Nas Banov):
Lenguaje Relajado Estricto ========= ======= ====== GolfScript 130 143 Perl 185 Windows PowerShell 148 199 Mathematica 199 Ruby 185 205 Unix Toolchain 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 PHP 450 F # 452 TSQL 483 507
Los números representan la longitud de la solución más corta en un idioma específico. "Estricto" se refiere a una solución que implementa la especificación por completo (dibuja |____|
barras, cierra la primera barra en la parte superior con una ____
línea, explica la posibilidad de palabras largas con alta frecuencia, etc.). "Relajado" significa que se tomaron algunas libertades para acortar la solución.
Solo se incluyen soluciones de menos de 500 caracteres. La lista de idiomas está ordenada por la longitud de la solución 'estricta'. 'Unix Toolchain' se usa para significar varias soluciones que usan el tradicional * nix shell más una combinación de herramientas (como grep, tr, sort, uniq, head, perl, awk).
s
y t
están representadas.