挑战:
建立给定文本中最常用单词的ASCII图。
规则:
- 仅接受
a-z
和A-Z
(字母字符)作为单词的一部分。 - 忽略大小写(出于我们的目的
She
= =she
)。 - 忽略以下单词(我知道很蛮横):
the, and, of, to, a, i, it, in, or, is
澄清:考虑
don't
:在a-z
和和A-Z
(don
和t
)中,这将被视为2个不同的“单词” 。可选(为时已晚将正式改变规格现在),你可以选择丢弃所有的单字母“词”(这可能做出的忽略列表也缩短)。
解析给定text
的文件(读取通过命令行参数指定的文件或通过管道输入;假定us-ascii
),并为我们构建一个word frequency chart
具有以下特征的文件:
- 显示22个最常用单词的图表(也请参见下面的示例)(按降序排列)。
- 条形图
width
(按比例)代表单词的出现次数(频率)。附加一个空格并打印单词。 - 确保这些小节(加上空格-单词-空格)始终适合:
bar
+[space]
+word
+[space]
始终应为<=80
字符(请确保您考虑到可能不同的小节和单词长度:例如:第二个最常见的单词可能要长得多,然后第一个频率差异不大)。在这些限制范围内最大化条形宽度并适当地缩放条形(根据它们表示的频率)。
一个例子:
可以在此处找到示例文本(Lewis Carroll的《爱丽丝梦游仙境》)。
此特定文本将产生以下图表:
_________________________________________________________________________ | _________________________________________________________________________ | 她 | _______________________________________________________________ | 您 | ____________________________________________________________ | 说过 | ____________________________________________________ | 爱丽丝 | ______________________________________________ | 原为 | __________________________________________ | 那 | ___________________________________ | 如 | _______________________________ || 她的 | ____________________________ | 与 | ____________________________ | 在 | ___________________________ | s | ___________________________ | Ť | _________________________ | 上 | _________________________ | 所有 | ______________________ | 这个 | ______________________ | 对于 | ______________________ | 有 | _____________________ | 但 | ____________________ | 是 | ____________________ | 不 | ___________________ | 他们 | __________________ | 所以
供您参考:以上图表基于以下频率:
[('she',553),('you',481),('said',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),(' 但是”,175),(“ be”,167),(“非”,166),(“他们”,155),(“ so”,152)]
第二个示例(检查您是否实施了完整的规范):
将you
链接的“ 爱丽丝梦游仙境”文件中所有出现的内容替换为superlongstringstring
:
________________________________________________________________ | ________________________________________________________________ | 她 | _______________________________________________________ | 超长弦 | _____________________________________________________ | 说过 | ______________________________________________ | 爱丽丝 | ________________________________________ | 原为 | _____________________________________ | 那 | ______________________________ | 如 | ___________________________ | 她的 | _________________________ | 与 | _________________________ | 在 | ________________________ | s | ________________________ | Ť | ______________________ | 上 | _____________________ | 所有 | ___________________ | 这个 | ___________________ | 对于 | ___________________ | 有 | __________________ | 但 | _________________ | 是 | _________________ | 不 | ________________ | 他们 | ________________ | 所以
获胜者,冠军:
最短的解决方案(按字符数,每种语言)。玩得开心!
编辑:表总结了到目前为止的结果(2012-02-15)(最初由用户Nas Banov添加):
语言宽松严格 ====================== 高尔夫脚本130143 Perl 185 Windows PowerShell 148199 Mathematica 199 红宝石185205 Unix工具链194228 Python 183243 Clojure 282 斯卡拉311 哈斯克尔333 AWK 336 R 298 Javascript 304354 Groovy 321 Matlab 404 C#422 Smalltalk 386 PHP 450 F#452 TSQL 483507
数字代表特定语言中最短解决方案的长度。“严格”是指完全实施规范的解决方案(画出|____|
条形,用____
线条将顶部的第一个条形闭合,考虑长单词出现频率高的可能性等)。“放松”是指采取一些自由来缩短解决时间。
仅包含少于500个字符的解决方案。语言列表按“严格”解决方案的长度排序。“ Unix工具链”用于表示使用传统* nix shell 以及各种工具(例如grep,tr,sort,uniq,head,perl,awk)混合使用的各种解决方案。
s
和t
被代表。