用于生成和操作字谜词的库。
赛伊诺西图 | UT TENSIO、SIC UIS
罗伯特·胡克, 《De Potentia Restitutiva》
(需要 '[d4hines/anagramaton.core:as]);该库需要一个字典作为输入,采用数组字符串的形式。这是一个例子。(def Words (str/split (slurp "/usr/share/dict/words") #"n"));;接下来我们需要对字典进行一些预处理(def word-map (a/dict->word-map Words));;现在你可以开始形成字谜!(a/字谜词图“读”) =>#{[“亲爱的”] [“敢”] [“读”] [“A”“红色”] [“广告”“回复”]}
心理学研究人员正在调查受试者解决字谜的能力。因此,他们需要一种生成和验证字谜解决方案的方法。
出于本项目的目的,让以下定义成立:
单词:标准 Unix 单词集之一。
Anagram:通过重新排列另一个字符串的字母而形成的单词或单词序列,例如由carpenter形成的rant Creep 。
Anagram Puzzle:一个字符串,它不是一个单词,而是一个 anagram。
字谜解决方案:由给定字谜的相同字母组成的单词。
无法解析的 Anagram:一个既不是单词也不是 anagram 的字符串(有点用词不当,是吗?)。
解决方案必须:
成为 Clojure 库...
这可以生成字谜谜题..
难度各异...
并验证给定的单词是否是给定字谜的解决方案......
同时速度足够快,可以在 REPL 上交互使用。
Wordsmith 的服务拥有数量惊人的旋钮,您可以转动这些旋钮来创建出色的字谜词。这东西太棒了。所以很想为他们的 api 制作客户端库并完成......
https://en.wikipedia.org/wiki/Scrabble_letter_distributions 谁会想到
http://norvig.com/mayzner.html - 非常好的解释,更新了双字母表 https://stackoverflow.com/a/12477976 - 查找单字字谜的基本算法 http://pi.math.cornell.edu /~mec/2003-2004/cryptography/subs/digraphs.html - 我正在使用的二元组表https://web.stanford.edu/class/cs9/sample_probs/Anagrams.pdf - 很好的算法解释 http://www.ssynth.co.uk/~gay/anagabout.html - 实现,但细节很差
https://stackoverflow.com/a/881367 - 灵感
感谢@seancorfield、@dpsutton 和@porkostomus 在部分字谜算法方面的帮助!
我们要处理字谜短语(多字字谜)吗?
到目前为止,我读过的每个定义都将字谜定义为“单词、短语或名称”。虽然我对多词字谜会增加的复杂性(数量级更多)并不感到兴奋,但我认为必须处理它们才能真正解决问题。
我们要做什么来优化速度?
尽可能少。过早的优化等等。
我们如何衡量“难度”?
请参阅下一节。
你到底是如何衡量字谜难度的?事实证明,这是一个引起大量学术研究和争论的主题。
这是我迄今为止的研究的快速而粗略的总结:
梅兹纳和特雷塞尔特似乎是这一问题的历史权威,并被许多此类研究引用。
他们有大量的研究来检验不同研究的效果,例如这项研究。
其中很多都超出了我的想象,但二元词频率似乎是其中之一