挑战:
构建给定文本中最常用单词的 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
一个例子:
示例文本可在此处找到(刘易斯卡罗尔的《爱丽丝梦游仙境》)。
该特定文本将产生以下图表:
_______________________________________________________________ |_________________________________________________________________________| 她 |_______________________________________________________________| 你 |____________________________________________________________| 说 |__________________________________________________________________| 爱丽丝 |______________________________________________| 曾是 |____________________________________________________| 那 |___________________________________| 作为 |_______________________________| 她 |____________________________| 和 |____________________________| 在 |_______________________________| 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), (' but', 175), ('be', 167), ('not', 166), ('they', 155), ('so', 152)]
第二个示例(检查您是否实现了完整的规范):you
将链接的爱丽丝梦游仙境文件中的
每个出现替换为superlongstringstring
:
________________________________________________________________ |________________________________________________________________| 她 |_______________________________________________________| 超长弦 |_____________________________________________________| 说 |______________________________________________| 爱丽丝 |________________________________________| 曾是 |_____________________________________| 那 |______________________________| 作为 |_______________________________| 她 |_________________________| 和 |_________________________| 在 |________________________| s |________________________| 吨 |______________________| 上 |_____________________| 全部 |___________________| 这个 |___________________| 为了 |___________________| 有 |__________________| 但 |_________________| 是 |_________________| 不是 |________________| 他们 |________________| 所以
获胜者,冠军:
最短的解决方案(按字符数,每种语言)。玩得开心!
编辑:总结迄今为止结果的表格(2012-02-15)(最初由用户 Nas Banov 添加):
语言宽松严格 ========= ======= ====== 高尔夫脚本 130 143 Perl 185 Windows PowerShell 148 199 数学 199 红宝石 185 205 Unix 工具链 194 228 蟒蛇 183 243 Clojure 282 斯卡拉 311 哈斯克尔 333 第 336 节 298 Javascript 304 354 时髦的 321 MATLAB 404 C# 422 小话386 450 比索 F# 452 TSQL 483 507
数字代表特定语言中最短解的长度。“严格”是指完全实现规范的解决方案(绘制|____|
条形图,用一条线关闭顶部的第一个条形图____
,考虑高频长词的可能性等)。“放松”意味着采取了一些自由来缩短解决方案。
仅包含少于 500 个字符的解决方案。语言列表按“严格”解决方案的长度排序。'Unix Toolchain' 用于表示使用传统 *nix shell和混合工具(如 grep、tr、sort、uniq、head、perl、awk)的各种解决方案。