用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)

用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)的图1

当任何人在需要一个简单、友好的挑战游戏来暂时逃避其他现实问题时,都可以去试试免费在线游戏 Wordle(https://www.powerlanguage.co.uk/wordle/)。

Josh Wardle(https://powerlanguage.co.uk/)发明了 Wordle并于 2021 年 10 月进行全球发布。然后,2022 年 1 月 31 日有消息称,他已将该应用程序卖给了《纽约时报》(https://www.engadget.com/wordle-nyt-new-york-times-sale-215510156.html),预计后者最终会将其发布在付费墙中。

游戏的概念简单而引人入胜:您需要在六次机会中猜测一个五个字母的单词。以下是 Wordle 网站上的规则:

用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)的图2

每天只发布一个新的 Wordle 挑战是一个明智的设计选择——Wordle 每天仅提供一次新游戏,这样能保护您不会控制不住想要一遍又一遍地玩游戏……

(至少是这样想的。)

( 佛系周末的挑战 )
THE CHALLENGE OF A SLOW WEEKEND

一月初,我和几天前给我介绍了 Wordle 的女儿发短信:

我和 Wolfram Solutions(https://www.wolframsolutions.com/)的同事为客户构建了一些相当大且复杂的用户界面。(最新的一个界面仅是用于用户界面部分的 Wolfram 语言代码就达到了大约 25000 行。)因此,在快速组合 UI 方面,我非常有信心。我决定接受挑战,同时也可以在那个佛系周末保持忙碌。

几个小时后,我给女儿回复了一个初始版本:

用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)的图3

你可以看到,我受到了来自单词拼写的挑战。(这个在后面会提到,以及会提到我女儿是一位语言病理学家的事情......)

现在,在创建界面的过程中,我不可避免违反了“一天只有一个 Wordle”这一神圣不可侵犯的原则。我只能希望任何对此上瘾的人都可以原谅我。

我在 Wolfram 社区写了一篇文章(https://community.wolfram.com/groups/-/m/t/2445356,译者注:该社区文章有更详尽的代码分享及其他)分享我的代码,这样读者可以使用代码以及应用程序本身。(您可以阅读完整代码并从该帖子下载包,以及查看其他人的评论。)这也是设计和编写 Wolfram 语言包(https://reference.wolfram.com/language/tutorial/ModularityAndTheNamingOfThings.html)的一种方法的示例。

在接下来的一周里,我花了一些时间调整应用程序,让用户选择单词被限制在哪个词性,以及让他们选择单词的长度是 4、5、6 还是 7 个字符长。

(在 Wolfram 社区上这个 GIF 的原始版本中,应用程序的“speech”拼写错误为“speak”;鉴于我女儿是语言病理学家,我本应该会发觉这一错误!而且她没有说出来也不是她的错,因为我还没有给她更新的版本。)

与最初的 Wordle 相比,这些额外的功能部分与其原本设计(出色的)简单特色格格不入。但这同时也说明 Wolfram 语言的算法和用户界面功能都可以让您探索各种变化和方法来满足您的需求。

MWordle.m 安装包包含 400 多行 Wolfram 语言代码。网页版的 JavaScript 代码远不止于此,但坦白说,它比我编写的 Wolfram 语言版本具有更多功能。使用 Wolfram 语言的海量资源,您可以无限且高效地自定义、修改和调试版本。这是一个佛系的周末,在我创建了第一个版本之后,我仍然有足够的时间洗衣服并赶上 Netflix 的节目,然后再回来调整代码。


(还有更多……)

AND MORE...

除了编写小游戏之外,还有一些有趣的问题是关于玩 Wordle 游戏的策略。正如预期的那样,互联网上有很多关于此的讨论。如,第一次猜测时最好使用哪些词?如何优化后续猜测?等等等等…。

Arnoud Buzing (https://blog.wolfram.com/author/arnoud-buzing/)快速创建(https://www.wolframcloud.com/obj/arnoudb/DeployedResources/Data/Wordle-Word-List)了一个 ResourceObject,其中包含 Wordle 的 Web 版本使用的实际单词列表。(我的代码通过 WordData 函数因此使用了 Mathematica 的字典。)

虽然我个人更喜欢在玩游戏时希望游戏可以保留一丝神秘感,也希望在玩在线版本时忘记那些算法逻辑,但其实使用 Wolfram 语言探索它非常简单。像 Wordle 这样的简单游戏可以被视为探索特定计算世界的起点。

这里有些例子。在我的 Wolfram 社区帖子中有人说:“我认为最好根据 WordData、字母频率和字母位置频率来计算 Wordle 的最佳起始词是什么。”

所以我接受了挑战,并写了以下作为一个可能起点的例子——最初没有考虑字母的位置。

以下是应用程序中使用的所有五个字母的单词:

共有7,517个:

以下是这五个字母单词的英文字母频率排序:

那么,让我们看看这五个字母的单词列表中是否有任何单词与频率排序最高的五个字母匹配(并且要求单词中没有重复的字母):

只有一个!它还考虑了另一种可能的方法——尝试使用尽可能多的元音。

让我们稍微放宽约束,从频率排序列表中最高的 nLetters 字符中提取内容,但仍然要确保没有重复的字母:

和上例一样,从前五个字母开始:

用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)的图4

从前六个字母开始:

用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)的图5

从前七个字母开始:

用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)的图6

Arnoud 还写了一篇文章(https://towardsdatascience.com/tips-and-tricks-for-solving-wordle-efficiently-28ab67a52dbf),介绍了一种优化您在完成 Wordle 挑战时可能做出的猜测的方法。其中,他根据单词中字母的位置考虑了字母频率。

Peter Barendse (https://blog.wolfram.com/author/peter-barendse/)建议可以使用我在 MWordle 应用程序中的代码来训练智能代理来玩 Wordle。这也很有趣。

可能性是无穷无尽的,Wolfram 语言是探索 Wordle 计算世界(https://www.wolfram.com/wolfram-science/)的理想工具。

购买软件/免费试用【13.1.0中英文 Wolfram 软件】

请扫码申请
用 Wolfram 的方式来玩 Wordle(编写程序包顺带记单词)的图7

默认 最新
当前暂无评论,小编等你评论哦!
点赞 评论 收藏
关注