妙哉!那个用文言文编程的小哥,竟从28万行唐诗中找出了对称矩阵

梦晨 萧箫 发自 凹非寺
量子位 报道 | 公众号 QbitAI

你能看出来,这首诗妙在哪里吗?

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

而且,这首诗可不是乱编的,其中的诗句都来自《全唐诗》,读起来也颇有意境。

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

他用计算机,找出了所有符合规律的古诗,还在Github上开源了代码。

就连README文件,也颇具个性:

余所用之程序,當以gcc編譯之如是

gcc -O3 mgsq5.c -o mgsq5

等一下。这个风格好像很熟悉?

没错,这位程序员,正是之前开发了火遍全网的文言文编程语言的Huang Lingdong。

文言文编程的“Hello,World”

他用数学中的3阶幻方(九宫格)作比,把符合这种规律的诗命名为“唐诗幻方”

然而,这首诗真正的玄妙之处,还不止在这里。

玄妙之处

这首诗,初看只是横竖都能读,但如果把其中汉字编码成数字再看的话,会发现:

原来,这是个对称矩阵

不过,他遍历了全唐诗里所有五言诗共二十八万七千句后,也只能得出两个这样的幻方。

除了“风月清江夜”以外,还只有一个,不过意境上差了许多,不能令他满意。

135600行七言唐诗中,符合这个规律的七言“幻方”,更是一个都没有。

他只能退而求其次,只寻找奇数项对称的,即每句第1、3、5、7个字对称,偶数行用空行代替。

放宽标准后倒是能找出不少,但再想从其中挑选符合音韵格律、意思上还通顺的,就不多了。

最后,他选择了其中一个还稍微过得去的做例子,把空行中的字也加上,也能写成对称矩阵:

这位小哥,是在研究传统文化时,从古代的洛书璇玑图中获得的灵感。

洛书

洛书写成数字就是三阶幻方,特点是每一行、每一列及对角线中的数字之和都相等。

文字没有求和这种操作,如果按照程序员思维,那就是字符串拼接起来相等。

就这样,得出了要寻找的目标:第n行和第n列的文字相同。

璇玑图中共841个字,按顺读、逆读、横读、斜读、蛇行读、交叉读、换行读、换列读、间句读都能成诗,总共包含了7958首诗。

其中的关键之处在于,按照不同顺序读,其文字都能组成有意义的诗句。他自认没有古人作诗的才华,就想到从唐诗中寻找符合条件的诗句。

而且是用现代人的方法——编程来解决。

以“暴力”治之

这位小哥,先是想到了用“八皇后问题”的计算机解法,来找出符合要求的唐诗。

八皇后问题,简单来说是这样的:

8×8的国际象棋棋盘上,摆放8个不同的皇后,使其不能互相攻击,即处在同一行、同一列、同一斜线上,求解摆放方法。

这个问题,可以用到一种名为“回溯法”的算法来求解,原理如图:

如果用回溯法来找“幻方”,计算机需要先随机“找出半句诗”,再挨个儿往后面搜索合适的诗句。

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

根据对称矩阵的原理,第二句诗的开头,就应该以“月”为首:

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

以此类推,第三句诗的开头,就应该以“清夜”为首:

(以清夜开头的诗句,就少了许多)

而第四句诗的开头,就应该以“江山归”打头:

(江山归开头的诗……可选范围应该更少了)

最后一句诗的开头,就必须与前4句诗的结尾完全一致,“夜深来客”:

难度逐渐变成地狱级……

在这几步操作中,要是有任何一步无法满足条件,就得全部推倒重来。

这样的话,最初的第一步,就显得尤为重要:从什么类型的诗句开始遍历,才能最快地找到答案?

他为此用上了启发式搜索,从已知问题信息入手,对这些空格进行评估,找到限制条件最多、即最容易“下笔”的那个位置,再从这个位置开始找诗。

具体写成代码求解的话,就是利用递归法的结构。

同时,用上剪枝法,缩小剩下位置的查找范围。

也就是说,要用到约束函数,在扩展节点处剪去不满足约束条件的子树;再用限界函数,剪去得不到最优解的子树。

这样一来,就能降低问题复杂度。

然而在运行代码时,作者却发现,这样做效率并不高

这种方法,虽然可以求解“N”皇后问题,却不太适合求汉字矩阵。

因为,要填进格子里的,可不止8个皇后,每一格可以填的汉字,就有5000+种选择!

采用递归法的话,计算机在填上前面的汉字时,实际上就缩小了剩下汉字可以搜查的范围。

如果没有找到最初那个合适的字,往往搜到一半后,能用的诗句就没了,又得重新再猜,效率不升反降。

越想越烦躁,这位小哥干脆一拍大腿:不如暴力搜索

当然,也不是普通的暴力搜索。

会有两个搜索条件:

其一,以五言诗为例,第五列的前4个字,和第五行的前4个字,内容是否完全一样?如果不一样,就扔掉。

 第五行和第五列的前4个字

其二,这首诗是不是对称矩阵?不是的话,就扔掉。

利用C语言写好后,不用1小时就能跑出所有的“对称诗”。

作者表示,自己并非文学研究的专家,也不是算法专家,因此,这种方法可能并不是最好的办法。

诸君若有更好的求解思路,可以来找他玩耍~

作者介绍

作者Huang Lingdong,在发布文言文编程语言时还在卡耐基梅隆大学上本科。现在已毕业,在母校的Studio for Creative Inquiry做研究助理,为博物馆和学校等组织开发交互媒体项目。

这位小哥热爱编程和传统文化,还开发过写诗IDE,能自动检查平仄等格律规则,内置韵书和康熙字典做参考。

还能通过机器学习分析用户作品,并与《全唐诗》中的诗句做比对,看你写的诗像哪位诗人的风格。

除了诗词古文,他对传统美术也颇有研究,开发过无限生成随机山水画的工具,和多款中文字体。

就是不知道为什么山水画里有个电线杆

项目地址:
https://github.com/LingDong-/magic-square-poems

Huang Lingdong主页:
https://lingdong.works/

—  —

本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

点这里????关注我,记得标星,么么哒~

加入AI社群,拓展你的AI行业人脉

量子位「AI社群」招募中!欢迎AI从业者、关注AI行业的小伙伴们扫码加入,与50000+名好友共同关注人工智能行业发展&技术进展

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62415.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题

文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题 三、要求用最小堆实现最小优先队列,请写出 HEAP-MINIMUM、HEAP-EXTRACT-MIN、HEAP DECREASE-KEY 和 MIN-HEAP-INSERT 的伪代码。 文心一言: 以下是使用最小堆实现最小…

chatgpt赋能Python-mac系统的python

在Mac系统上运行Python:一个简介 介绍 Python是一种流行的、易于学习的编程语言,被广泛用于各种用途,从数据分析到机器学习。如果您是Mac用户,那么您已经安装了Python,因为它是系统的一部分。本文将介绍如何在Mac系统…

微软 Copilot “杀疯了”,太刺激了...

1 刺激 这段时间真是太刺激了。 就在最近,微软宣布了 Copilots for Windows 11 以及其他一系列产品。作为AI助手,Windows Copilot将直接集成到Windows 11中,在所有应用和程序中都可使用,就像我们在Edge、Office程序和GitHub中看到…

GPT-4来了,计算机视觉科研,何去何从?

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 作者:Mike Shou |(已授权转载)编辑:CVer https://zhuanlan.zhihu.com/p/616966879 最近上课被…

【chatGpt】关于websocket连接中对未授权的捕捉问题

目录 问题 有效提问 有效的细节提问 问题 一路上,通过简单的error进行判断弹出授权,会有很多乱弹的现象: (1)链路正常切换会断 (2)服务器没有启动会连接不上 (3)没…

Vscode 用MarkDown画流程图

效果图 start>start: 开始 input>inputoutput: 输入 operation>operation: 操作 condition>condition: 操作出错? output>inputoutput: 输出 error>operation: 请重新输入 end>end: 结束start->input input->operation operation->co…

chatgpt赋能python:Python画图设置背景颜色

Python画图设置背景颜色 在Python中使用Matplotlib和Seaborn等库来生成数据可视化图表非常方便。但是,这些图表默认使用白色背景。有时,我们需要在制作图表时更改背景颜色以匹配我们的主题或品牌标识。本文将介绍如何在Matplotlib和Seaborn中设置不同的…

chatgpt赋能Python-python3如何画图

Python3如何画图? Python是一种高级编程语言,它有着多种用途,包括数据分析和可视化。Python3是Python的最新版本,它具有更好的性能和易用性。在这篇文章中,我们将介绍如何使用Python3来画图,并探讨其优势和…

chatgpt赋能python:Python画图坐标轴大小

Python画图坐标轴大小 Python是一种广泛使用的编程语言,它在科学计算和可视化方面得到了广泛的应用。在可视化中,坐标轴的大小和比例对于展现数据的真实性和清晰性至关重要。在本文中,我们将介绍如何使用Python画图坐标轴大小,并…

“烧钱”的大模型:初探成本拆解与推理优化方法

编者按:大模型的成本问题一直以来是大家重点关注的问题,本文重点讨论了训练大型语言模型(LLMs)需要的成本,并简要介绍什么是LLM以及一些用于优化大模型推理表现的技术。 虽然很难准确预测LLMs未来会怎么发展&#xff0…

Spring Cloud 优惠最后 1 天!

大家好,我是栈长。 关注了一段时间公众号的小伙伴都知道,栈长的 Spring Cloud 微服务课程每月都会给小伙伴搞一波活动。 61活动来了,很多小伙伴都在等 61 的活动,这次活动,福利全新升级,千万不要错过&#…

微信公众号文章是否违规怎么检测?

在写文章的时候,会遇到以下3种情况: 1、你所编辑的图文消息可能含有敏感内容,你可以继续保存或发布该图文消息(发布等待时长约3-4小时),若保存或发布后,经核实含有敏感内容的,将可能…

如何发现并分析APP个人信息收集是否违规?

移动互联网的发展以及智能终端的兴起,手机已然成为了我们生活中不可或缺的“日用品”,各种手机APP开启霸屏模式,例如常见的支付APP、聊天APP、金融APP、交通APP等,这些APP虽然给我们生活带来了便利,但是其收集的用户信…

新闻稿的制作流程:从确定新闻稿目的到将其分发给媒体

对于任何希望向媒体和公众传达具有新闻价值的信息的组织来说,新闻稿都是必不可少的工具。精心制作的新闻稿可以帮助您宣传您的业务、产品或服务,并可以产生有价值的媒体报道。在本文中,我们将指导您完成新闻稿的制作过程,从确定新…

如何写新闻稿?写好新闻稿的技巧与步骤

新闻稿是传递新闻事件和信息的重要手段,是传媒工作中不可或缺的一部分。写好一篇新闻稿可以让受众了解更多信息,进一步提高他们的关注度。以下是一些写好新闻稿的技巧和步骤,帮助你有效地传达新闻。 1、确定新闻的核心信息 在开始写新闻稿之前…

怎么向新闻媒体投稿?新闻稿投稿渠道哪个比较好

在互联网众多媒体网站中,各大小中新闻媒体网站都拥有一定的权威性和知名度,作为网 媒,这些新闻网站相比纸类报刊更容易被大众网民接触,甚至有不少人还想联系网站将新闻或 者软文投放上去。当然了,如果是个人联系媒体…

国际学校入学考试MAP语法测试题真题讲解

本月,贝赛思各校区举行了四月的入学考试,部分校区采取了线上评估模式,而4月考试流程形式题型均与3月大同小异。 非常多的家庭会选择在中学阶段转入贝赛思,并且对国际学校了解的家长肯定对MAP测试不陌生,MAP测试既作为…

高考题改成IB试题,会是什么样子?

从2019年浙江高考语文卷的一篇现代文阅读说起的,振语看过了这道题和推文作者的解读后,一时兴起,就想着能不能把它改成一道IB考题,顺带着也把这篇选文细读评点了一番。 (一)高考试题再现: 这道高…

AI开始卷高考了,英语已被卷到134分??

文 | 天于刀刀 AI 真的太卷了!不但模型之间互相卷,现在直接开始和人类学生一起卷高考了! 近期,来自 CMU 两位学者提出的重构预训练模型(reStructured Pre-training, RST)在只有 GPT-3 十六分之一参数量的情…

第一试卷网(网站)

首先,站内涵盖了有语文,数学,英语,物理,化学,政治,历史,地理,生物等等的试卷,从小学到高三的都有非常的全面。 点开需要的试卷,显示资源还是比较新…