诗集古诗网

您现在的位置是:  > 古诗

这首程序员凹非寺量子位报道|梦晨寺

2021-11-10 23:57:03诗集古诗网
不过,他遍历了全唐诗里所有五言诗共二十八万七千句后,也只能得出两个这样的幻方。例如,计算机先从13万行唐诗中,随机找出诗句“风月清江夜”:这位小哥热爱编程和传统文化,还开发过写诗IDE,能自动检查平仄等格律规则,内置韵书和康熙字典做参考。除了诗词古文,他对传统美术也颇有研究,开发过无限生成随机山水画的工具,和多款中文字体。

来自凹庙的梦晨晓晓

量子比特报告 | 公众号QbitAI

你能看出这首诗的美吗?

其实横读是一首诗,竖读还是这首诗!

而且,这首诗也不是随意的,里面的诗句都出自《唐诗》,读起来也颇具艺术性。

创造这个奇妙组合的不是文学研究大师,而是一个小程序员。

他用电脑查找了所有符合规律的古诗词,还在Github上开源了代码。

甚至 README 文件也非常个性化:

程序的其余部分应该像这样用 gcc 编译

gcc -O3 mgsq5.c -o mgsq5

稍等片刻。这种风格似曾相识?

没错,这个程序员就是黄凌东,他开发了流传于网络的文言文编程语言。

△ 文言节目《你好,世界》

他以数学中的三阶幻方(九宫格)为对照,将符合此规律的诗歌命名为“唐诗幻方”。

然而,这首诗真正的奥秘并不止于此。

神秘

乍一看,这首诗只能横竖读,但如果把汉字编码成数字后再读,你会发现:

原来这是一个对称矩阵!

然而,在遍历了全唐诗中所有五言诗的28.7万句之后,他只能画出两个这样的幻方。

除了《风月清江夜》,只有一部,但意境差很多,满足不了他。

在13.56万行七字唐诗中,没有一首符合这一规律的七字“魔方”。

他只能排第二,只求奇数项的对称性,即每个句子1、3、5、的7字对称性,以及偶数项的对称性-numbered 行被空行替换。

放宽标准后,可以找到很多,但如果要选择符合音韵韵律,意思还算流利的,就不多说了。

最后古诗词串讲稿,他选择了其中一个有点过得去的例子,并在空行中添加了单词,也可以写成对称矩阵:

这位小弟弟在学习传统文化时,受到了古代洛书和玄机图的启发。

△洛树

罗写成数字是一个三阶幻方,其特点是每行、每列、对角线上的数字之和相等。

没有文本求和之类的操作。如果按照程序员的想法,字符串是串联且相等的。

这样就达到了要搜索的目标:第n行和第n列的文本相同。

玄机图文共841字,可按序读、逆读、横读、斜读、蛇读、横读、换行、换列、句间转换成诗读。共收录诗歌7958首。

关键是,如果你以不同的顺序阅读它们,这些词可以形成有意义的诗句。他认为自己没有古人写诗的天赋,所以想从唐诗中寻找合格的诗句。

它是通过现代方法编程解决的。

以“暴力”统治

这位小哥首先想到了用“八皇后问题”的电脑解法,找出符合要求的唐诗。

八皇后的问题,简而言之,就是这样:

在8×8的棋盘上,放置8个不同的皇后,使它们不能互相攻击,即在同一行、同一列、同一对角线上。解决放置方法。

这个问题可以通过一种叫做“回溯法”的算法来解决。原理如图:

如果用回溯法找“魔方”,电脑需要随机“找出半首诗”,然后一一寻找合适的诗句。

例如,计算机从13万行唐诗中随机找出“风月清江野”一句:

根据矩阵对称原则,第二首诗的开头应以“月”开头:

(应该还有不少以月为开头的诗句,像月上的柳树)

以此类推,第三行诗的开头应以“清野”开头:

(清野开头的诗句少了很多)

而第四行的开头应该是“江山归”:

(江山贵开头的那首诗……应该少了些选择)

最后一首诗的开头必须与前四首诗《深夜来客》的结尾完全一致:

难度逐渐变成了地狱级别……

在这些步骤中,如果有任何步骤不符合条件,则必须将它们全部推翻并重新开始。

在这种情况下,第一步尤为重要:遍历什么类型的诗句可以最快找到答案?

他为此采用了启发式搜索,从已知的问题信息出发,评估这些空间,找到限制条件最多的位置,也就是最容易“写”的位置,然后从这个位置开始寻找诗歌。

具体写代码来解决问题,就是使用递归方法的结构。

同时使用剪​​枝方法缩小剩余位置的搜索范围。

换句话说,要使用约束函数,在扩展节点切掉不满足约束条件的子树;然后使用bound函数对不能得到最优解的子树进行切割。

这样就可以降低问题的复杂度。

但是在运行代码的时候,作者发现这样效率不高。