编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵


编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
你能看出来 , 这首诗妙在哪里吗?
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
其实 , 横着读是一首诗 , 竖着读还是这首诗!
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
而且 , 这首诗可不是乱编的 , 其中的诗句都来自《全唐诗》 , 读起来也颇有意境 。
创造这个奇妙组合的 , 不是文学研究大师 , 而是一位程序员小哥 。
他用计算机 , 找出了所有符合规律的古诗 , 还在Github上开源了代码 。
就连README文件 , 也颇具个性:
余所用之程序 , 當以gcc編譯之如是gcc -O3 mgsq5.c -o mgsq5
等一下 。这个风格好像很熟悉?
没错 , 这位程序员 , 正是之前开发了火遍全网的文言文编程语言的Huang Lingdong 。
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
△ 文言文编程的“Hello , World”
他用数学中的3阶幻方(九宫格)作比 , 把符合这种规律的诗命名为“唐诗幻方” 。
然而 , 这首诗真正的玄妙之处 , 还不止在这里 。
玄妙之处
这首诗 , 初看只是横竖都能读 , 但如果把其中汉字编码成数字再看的话 , 会发现:
原来 , 这是个对称矩阵!
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
不过 , 他遍历了全唐诗里所有五言诗共二十八万七千句后 , 也只能得出两个这样的幻方 。
除了“风月清江夜”以外 , 还只有一个 , 不过意境上差了许多 , 不能令他满意 。
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
在135600行七言唐诗中 , 符合这个规律的七言“幻方” , 更是一个都没有 。
他只能退而求其次 , 只寻找奇数项对称的 , 即每句第1、3、5、7个字对称 , 偶数行用空行代替 。
放宽标准后倒是能找出不少 , 但再想从其中挑选符合音韵格律、意思上还通顺的 , 就不多了 。
最后 , 他选择了其中一个还稍微过得去的做例子 , 把空行中的字也加上 , 也能写成对称矩阵:
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
这位小哥 , 是在研究传统文化时 , 从古代的洛书和璇玑图中获得的灵感 。
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
△洛书
洛书写成数字就是三阶幻方 , 特点是每一行、每一列及对角线中的数字之和都相等 。
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
文字没有求和这种操作 , 如果按照程序员思维 , 那就是字符串拼接起来相等 。
就这样 , 得出了要寻找的目标:第n行和第n列的文字相同 。
璇玑图中共841个字 , 按顺读、逆读、横读、斜读、蛇行读、交叉读、换行读、换列读、间句读都能成诗 , 总共包含了7958首诗 。
编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵
文章图片
其中的关键之处在于 , 按照不同顺序读 , 其文字都能组成有意义的诗句 。他自认没有古人作诗的才华 , 就想到从唐诗中寻找符合条件的诗句 。
【编程|妙哉!用文言文编程 竟从28万行唐诗中找出了对称矩阵】而且是用现代人的方法——编程来解决 。
以“暴力”治之
这位小哥 , 先是想到了用“八皇后问题”的计算机解法 , 来找出符合要求的唐诗 。


推荐阅读