技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 算法 --> 蛋疼研究之单词等式

蛋疼研究之单词等式

浏览:895次  出处信息
先给大家看两个“单词等式”:

ACT + DEAL = DONE
COIN + TRY = DIAL

    除了意义上说得通以外,从另外一个角度来看,这两个等式也是成立的。大家能猜到是什么吗?


 
    答案是:这两个等式真的就是成立的――如果把单词看作 36 进制数的话。把 ACT 转换成 10 进制就是 13421 ,把 DEAL 转换成 10 进制就是 625053 ,而 DONE 的 10 进制正好就是 638474 。类似地, COIN 加 TRY 也真的等于 DIAL ,对应的 10 进制算式为 591647 + 38590 = 630237 。

    其实,蛋疼的数学家们已经干过类似的事情了。数学家们对质数的热爱如此疯狂,以至于他们甚至搞出了一份质数单词表。最近我偶然看到 N 年前自己的一篇罗列质数单词的日志,立即想到了这个更蛋疼的主意――单词等式。于是写程序小小地搜索了一下,很快便出现了上面两个式子。

    我把 ACT + DEAL = DONE 加上引号拿到 Google 里去搜,没有结果。哈哈,似乎我是第一个蛋疼到想要研究这种 36 进制单词等式的人。于是我用 Mathematica 写了一个程序,在所有字母个数为 3 到 5 的常用单词中寻找等式:

minWordNetID[word_] := 
  If[Head[WordData[word, "WordNetID"]] === WordData, \[Infinity], 
   Min[FromDigits[#, 10] & /@ 
     WordData[word, "WordNetID"][[All, 2]]]];
v = DictionaryLookup[RegularExpression["[a-z]{3,5}"]];
v = Select[v, minWordNetID[#] < 10000000 &];
n = Sort[FromDigits[#, 36] & /@ v];
partiton[word_] := {BaseForm[#, 36], 
     BaseForm[FromDigits[word, 36] - #, 36]} & /@ 
   Intersection[FromDigits[word, 36] - n, n];
result = {#, partiton[#]} & /@ v;
result = Select[result, Length[#[[2]]] > 0 &];
TableForm[result]

    人工筛选有意义的等式并不是一件容易的事。我找到了下面三个很漂亮的单词等式:

MAP + LOOP = MAZE
DYE + BLADE = BLOBS
MAN + ROAR = SALE

    另外还有一些不那么好的单词等式,我也写出来吧:

BUG + BUG = NOW
SHOWN + BLUR = STARE
ACT + HEAR = HONK

    我也尝试过搜索字母更多的单词等式,以及包含乘法的单词等式,但结果数量极少,很难出现意义正好也相符的式子。我有没有错过什么更为绝妙的单词等式呢?欢迎蛋疼的网友们也来找一找。

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1