用 Linux 命令行解决 Wordle 问题
创始人
2024-03-02 09:57:50
0

使用 Linux 的 grep 和 fgrep 命令来赢得你最喜欢的基于单词的猜测游戏。

我最近有点迷恋上了一个在线单词猜谜游戏,在这个游戏中,你有六次机会来猜一个随机的五个字母的单词。这个词每天都在变化,而且你每天只能玩一次。每次猜测后,你猜测中的每个字母都会被高亮显示:灰色表示该字母没有出现在神秘单词中,黄色表示该字母出现在单词中,但不在那个位置,绿色表示该字母出现在单词中的那个正确位置。

下面是你如何使用 Linux 命令行来帮助你玩像 Wordle 这样的猜测游戏。我用这个方法来帮助我解决 1 月 6 日的谜题:

第一次尝试

Linux 系统在 /usr/share/dict/words 文件中保存了一个单词词典。这是一个很长的纯文本文件。我的系统的单词文件里有超过 479,800 个条目。该文件既包含纯文本,也包含专有名词(名字、地点等等)。

为了开始我的第一次猜测,我只想得到一个长度正好是五个字母的纯文本词的列表。要做到这一点,我使用这个 grep 命令:

$ grep '^[a-z][a-z][a-z][a-z][a-z]$' /usr/share/dict/words > myguess

grep 命令使用正则表达式来进行搜索。你可以用正则表达式做很多事情,但为了帮助我解决 Wordle 问题,我只需要基本的东西。^ 表示一行的开始,$ 表示一行的结束。在两者之间,我指定了五个 [a-z] 的实例,表示从 a 到 z 的任何小写字母。

我还可以使用 wc 命令来查看我的可能单词列表,“只有” 15,000 个单词:

$ wc -l myguess
15034 myguess

从这个列表中,我随机挑选了一个五个字母的单词:acresa 被设置为黄色,意味着该字母存在于神秘单词的某处,但不在第一位置。其他字母是灰色的,所以我知道它们并不存在于今天的单词中。

acres word attempt

第二次尝试

对于我的下一个猜测,我想得到一个包含 a 的所有单词的列表,但不是在第一位置。我的列表也不应该包括字母 cres。让我们把这个问题分解成几个步骤。

为了得到所有带 a 的单词的列表,我使用 fgrep(固定字符串 grep)命令。fgrep 命令也像 grep 一样搜索文本,但不使用正则表达式:

$ fgrep a myguess > myguess2

这使我的下一个猜测的可能列表从 15,000 个字下降到 6,600 个字:

$ wc -l myguess myguess2
 15034 myguess
  6634 myguess2
 21668 total

但是这个单词列表中的第一个位置也有字母 a,这是我不想要的。游戏已经表明字母 a 存在于其他位置。我可以用 grep 修改我的命令,以寻找在第一个位置包含其他字母的词。这就把我可能的猜测缩小到了 5500 个单词:

$ fgrep a myguess | grep '^[b-z]' > myguess2
$ wc -l myguess myguess2
 15034 myguess
  5566 myguess2
 20600 total

但我知道这个神秘的词也不包括字母 cres。我可以使用另一个 grep 命令,在搜索中省略这些字母:

$ fgrep a myguess | grep '^[b-z]' | grep -v '[cres]' > myguess2
$ wc -l myguess myguess2
15034 myguess
 1257 myguess2
16291 total

-v 选项意味着反转搜索,所以 grep 将只返回不符合正则表达式 [cres] 或单列字母 cres 的行。有了这个额外的 grep 命令,我把下一个猜测的范围大大缩小到只有 1200 个可能的单词,这些单词在某处有一个 a,但不在第一位置,并且不包含 cre、或 s

在查看了这个列表后,我决定尝试一下 balmy 这个词。

balmy word attempt

第三次尝试

这一次,字母 ba 被高亮显示为绿色,意味着我把这些字母放在了正确的位置。字母 l 是黄色的,所以这个字母存在于单词的其他地方,但不是在那个位置。字母 my 是灰色的,所以我可以从我的下一个猜测中排除这些。

为了确定下一个可能的单词列表,我可以使用另一组 grep 命令。我知道这个词以 ba 开头,所以我可以从这里开始搜索:

$ grep '^ba' myguess2 > myguess3
$ wc -l myguess3
77 myguess3

这只有 77 个词! 我可以进一步缩小范围,寻找除第三位外还包含字母 l 的词:

$ grep '^ba[^l]' myguess2 > myguess3
$ wc -l myguess3
61 myguess3

方括号 [^l] 内的 ^ 表示不是这个字母列表,即不是字母 l。这使我的可能单词列表达到 61 个,并非所有的单词都包含字母 l,我可以用另一个 grep 搜索来消除这些单词:

$ grep '^ba[^l]' myguess2 | fgrep l > myguess3
$ wc -l myguess3
10 myguess3

这些词中有些可能包含字母 my,而这些字母并不在今天的神秘词中。我可以再进行一次反转 grep 搜索,将它们从我的猜测列表中删除:

$ grep '^ba[^l]' myguess2 | fgrep l | grep -v '[my]' > myguess3
$ wc -l myguess3
7 myguess3

我的可能的单词列表现在非常短,只有七个单词!

$ cat myguess3
babul
bailo
bakal
bakli
banal
bauld
baulk

我选择 banal 作为我下一次猜测的可能的词,而这恰好是正确的。

banal word attempt

正则表达式的力量

Linux 的命令行提供了强大的工具来帮助你完成实际工作。grepfgrep 命令在扫描单词列表方面提供了极大的灵活性。对于一个基于单词的猜测游戏,grep 帮助识别了一个包含 15000 个可能的单词的列表。在猜测并知道哪些字母出现在神秘的单词中,哪些没有,grepfgrep 帮助将选项缩小到 1200 个单词,然后只剩下 7 个单词。这就是命令行的力量。


via: https://opensource.com/article/22/1/word-game-linux-command-line

作者:Jim Hall 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

原创 ...
《绊爱 AI:悦动音符!》Switch NSP,准备好沉浸在令人心...
2026-05-25 04:39:57
网易2026Q1财报公布:...
快科技5月21日消息,今日,网易发布2026年第一季度财报,净收入...
2026-05-21 23:10:41
李飞飞做AI游戏,拿了4个...
李飞飞又拿到钱了。5600万美元。 不是做世界模型的World L...
2026-05-09 16:14:24
人机博弈背后的战略推理:推...
Gabriele Farina成长于意大利北部一个盛产葡萄酒的丘陵...
2026-05-09 10:35:22
“AI+游戏”叙事空间有多...
2025年以来,AI成为企业财报中的高频词,“AI+游戏”的叙事似...
2026-05-07 12:27:32
当AI成为你的Game J...
边界 “我正在骂AI。”热水指着电脑对我说。 这是4月26日在深圳...
2026-05-06 20:25:46

热门资讯

为什么计量 IT 的生产力如此... 在某些行业里,人们可以根据一些测量标准判定一个人的生产力。比如,如果你是一个零件制造商,可以通过一个...
硬核观察 #885 苹果 AR... 苹果 AR 眼镜被无限期推迟据报道,由于技术上的挑战,苹果公司已经无限期推迟了其轻型增强现实(AR)...
8 个提升你的隐私防护的开源密... 使用一些顶级开源密码管理器,确保你的登录凭证安全无虞。密码管理器是一项非常有用的实用程序。在你想寻找...
PHP最佳实践(译) 简介PHP是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些bug。 每个版本都...
值得收藏的 27 个机器学习的... 机器学习 ( Machine Learning ) 有很多方面,当我开始研究学习它时,我发现了各种各...
8个有趣的Linux提示与技巧... 我们时不时给你带来关于Linux的提示与技巧。和这个系列保持一致,这里有8个我们从读者收到最有趣的提...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...