挑战:
构建一个给定文本中最常用单词的ASCII图表。
规则:
- 只接受
a-z
和A-Z
(字母字符)作为单词的一部分。 - 忽略大小写(
She
==she
,我们的目的是相同的)。 - 忽略以下单词(相当武断,我知道):
the, and, of, to, a, i, it, in, or, is
澄清:考虑到
don't
:在a-z
和A-Z
范围内,这将被视为2个不同的“单词”:(don
和t
)。可选地(现在正式更改规格已经太晚了),您可以选择删除所有单个字母的“单词”(这可能会导致忽略列表缩短)。
解析给定的文本
(通过命令行参数或管道读取指定的文件;假设为us-ascii
),并构建一个以下特征的词频图表
:
- 显示最常见的22个单词的图表(按降序排列)。
- 条形
宽度
表示单词出现的次数(频率比例)。在单词后面添加一个空格并打印单词。 - 确保这些条形图(加上空格-单词-空格)总是适合:
bar
+[space]
+word
+[space]
应始终<=80
个字符(确保您考虑可能不同的条形和单词长度:例如:第二个最常见的单词可能比第一个长得多,而在频率上并没有那么大的差异)。在这些约束条件下最大化条形宽度,并根据它们所代表的频率适当缩放条形。
示例:
示例文本 在这里找到(《爱丽丝梦游仙境》,刘易斯·卡罗尔著)。
此特定文本将产生以下图表:
_________________________________________________________________________ |_________________________________________________________________________| 她 |_______________________________________________________________| 你 |____________________________________________________________| 说 |____________________________________________________| 爱丽丝 |______________________________________________| 是 |__________________________________________| 那个 |___________________________________| 如同 |_______________________________| 她的 |____________________________| 和 |____________________________| 在 |___________________________| 的 |___________________________| 特 |_________________________| 定 |_________________________| 所有 |______________________| 这个 |______________________| 对于 |______________________| 有 |_____________________| 但是 |____________________| 是 |____________________| 不 |___________________| 他们 |__________________| 这么
供您参考:上述图表所建立的频率如下:
与编程相关的内容: 将链接的《爱丽丝梦游仙境》文件中每个“you”替换为“superlongstringstring”:获胜者:
[('她', 553), ('你', 481), ('说', 462), ('爱丽丝', 403), ('是', 358), ('那', 330), ('作为', 274), ('她的', 248), ('与', 227), ('在', 227), ('s', 219), ('t', 218), ('上', 204), ('所有', 200), ('这', 181), ('为', 179), ('有', 178), ('但', 175), ('是', 167), ('不', 166), ('他们', 155), ('如此', 152)]
最短的解决方案(按每种语言的字符计数)。祝玩得愉快!
编辑:总结到目前为止的结果表(2012-02-15)(最初由用户Nas Banov添加):
语言 宽松 严格 ========= ======= ====== GolfScript 130 143 Perl 185 Windows PowerShell 148 199 Mathematica 199 Ruby 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
这些数字代表特定语言中最短解决方案的长度。“严格”是指实现了规范的解决方案(绘制|____|
条,用一条____
线在顶部关闭第一个条,考虑具有高频率的长单词等)。"宽松"意味着采取了某些自由以缩短解决方案。
仅包含长度小于500个字符的解决方案。语言列表按“严格”解决方案的长度排序。“Unix工具链”用于表示使用传统*nix shell 加上一些工具(如grep、tr、sort、uniq、head、perl、awk)的各种解决方案。
s
和t
得到了体现。 - indiv