自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用 Linux 命令行解決 Wordle 問題

系統(tǒng) Linux
使用 Linux 的 grep 和 fgrep 命令來贏得你最喜歡的基于單詞的猜測游戲。


使用 Linux 的 grep 和 fgrep 命令來贏得你最喜歡的基于單詞的猜測游戲。


我最近有點(diǎn)迷戀上了一個在線單詞猜謎游戲,在這個游戲中,你有六次機(jī)會來猜一個隨機(jī)的五個字母的單詞。這個詞每天都在變化,而且你每天只能玩一次。每次猜測后,你猜測中的每個字母都會被高亮顯示:灰色表示該字母沒有出現(xiàn)在神秘單詞中,黃色表示該字母出現(xiàn)在單詞中,但不在那個位置,綠色表示該字母出現(xiàn)在單詞中的那個正確位置。

下面是你如何使用 Linux 命令行來幫助你玩像 Wordle 這樣的猜測游戲。我用這個方法來幫助我解決 1 月 6 日的謎題:

第一次嘗試

Linux 系統(tǒng)在 ??/usr/share/dict/words?? 文件中保存了一個單詞詞典。這是一個很長的純文本文件。我的系統(tǒng)的單詞文件里有超過 479,800 個條目。該文件既包含純文本,也包含專有名詞(名字、地點(diǎn)等等)。

為了開始我的第一次猜測,我只想得到一個長度正好是五個字母的純文本詞的列表。要做到這一點(diǎn),我使用這個 ??grep?? 命令:

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

??grep?? 命令使用正則表達(dá)式來進(jìn)行搜索。你可以用正則表達(dá)式做很多事情,但為了幫助我解決 Wordle 問題,我只需要基本的東西。??^?? 表示一行的開始,??$?? 表示一行的結(jié)束。在兩者之間,我指定了五個 ??[a-z]?? 的實(shí)例,表示從 a 到 z 的任何小寫字母。

我還可以使用 ??wc?? 命令來查看我的可能單詞列表,“只有” 15,000 個單詞:

$ wc -l myguess
15034 myguess

從這個列表中,我隨機(jī)挑選了一個五個字母的單詞:??acres??。??a?? 被設(shè)置為黃色,意味著該字母存在于神秘單詞的某處,但不在第一位置。其他字母是灰色的,所以我知道它們并不存在于今天的單詞中。

acres word attempt

第二次嘗試

對于我的下一個猜測,我想得到一個包含 ??a?? 的所有單詞的列表,但不是在第一位置。我的列表也不應(yīng)該包括字母 ??c??、??r??、??e?? 或 ??s??。讓我們把這個問題分解成幾個步驟。

為了得到所有帶 a 的單詞的列表,我使用 ??fgrep??(固定字符串 grep)命令。??fgrep?? 命令也像 ??grep?? 一樣搜索文本,但不使用正則表達(dá)式:

$ fgrep a myguess > myguess2

這使我的下一個猜測的可能列表從 15,000 個字下降到 6,600 個字:

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

但是這個單詞列表中的第一個位置也有字母 ??a??,這是我不想要的。游戲已經(jīng)表明字母 ??a?? 存在于其他位置。我可以用 ??grep?? 修改我的命令,以尋找在第一個位置包含其他字母的詞。這就把我可能的猜測縮小到了 5500 個單詞:

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

但我知道這個神秘的詞也不包括字母 ??c??、??r??、??e?? 或 ??s??。我可以使用另一個 ??grep?? 命令,在搜索中省略這些字母:

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

??-v?? 選項(xiàng)意味著反轉(zhuǎn)搜索,所以 ??grep?? 將只返回不符合正則表達(dá)式 ??[cres]?? 或單列字母 ??c??、??r??、??e?? 或 ??s?? 的行。有了這個額外的 ??grep?? 命令,我把下一個猜測的范圍大大縮小到只有 1200 個可能的單詞,這些單詞在某處有一個 ??a??,但不在第一位置,并且不包含 ??c??、??r??、??e??、或 ??s??。

在查看了這個列表后,我決定嘗試一下 ??balmy?? 這個詞。

balmy word attempt

第三次嘗試

這一次,字母 ??b?? 和 ??a?? 被高亮顯示為綠色,意味著我把這些字母放在了正確的位置。字母 ??l?? 是黃色的,所以這個字母存在于單詞的其他地方,但不是在那個位置。字母 ??m?? 和 ??y?? 是灰色的,所以我可以從我的下一個猜測中排除這些。

為了確定下一個可能的單詞列表,我可以使用另一組 ??grep?? 命令。我知道這個詞以 ??ba?? 開頭,所以我可以從這里開始搜索:

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

這只有 77 個詞! 我可以進(jìn)一步縮小范圍,尋找除第三位外還包含字母 ??l?? 的詞:

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

方括號 ??[^l]?? 內(nèi)的 ??^?? 表示不是這個字母列表,即不是字母 ??l??。這使我的可能單詞列表達(dá)到 61 個,并非所有的單詞都包含字母 ??l??,我可以用另一個 ??grep?? 搜索來消除這些單詞:

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

這些詞中有些可能包含字母 ??m?? 和 ??y??,而這些字母并不在今天的神秘詞中。我可以再進(jìn)行一次反轉(zhuǎn) ??grep?? 搜索,將它們從我的猜測列表中刪除:

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

我的可能的單詞列表現(xiàn)在非常短,只有七個單詞!

$ cat myguess3
babul
bailo
bakal
bakli
banal
bauld
baulk

我選擇 ??banal?? 作為我下一次猜測的可能的詞,而這恰好是正確的。

banal word attempt

正則表達(dá)式的力量

Linux 的命令行提供了強(qiáng)大的工具來幫助你完成實(shí)際工作。??grep?? 和 ??fgrep?? 命令在掃描單詞列表方面提供了極大的靈活性。對于一個基于單詞的猜測游戲,??grep?? 幫助識別了一個包含 15000 個可能的單詞的列表。在猜測并知道哪些字母出現(xiàn)在神秘的單詞中,哪些沒有,??grep?? 和 ??fgrep?? 幫助將選項(xiàng)縮小到 1200 個單詞,然后只剩下 7 個單詞。這就是命令行的力量。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2022-02-08 17:19:05

Linux命令grep

2010-11-24 15:22:51

MySQL命令行

2009-08-07 10:33:53

linux命令行亂碼linux命令行解決方式

2009-12-24 14:51:39

Linux命令行

2010-09-01 14:23:54

Linux命令行開發(fā)

2009-12-09 09:25:52

Linux命令行svn命令

2009-12-23 14:14:09

Linux高級命令行

2010-06-21 15:51:29

Linux命令Google服務(wù)

2013-01-29 14:08:58

UbuntuUbuntu手機(jī)Ubuntu手機(jī)操作系

2017-03-08 19:00:59

Linuxsudo命令

2014-01-24 09:09:32

Linux命令行網(wǎng)速

2018-07-10 14:29:05

Linux命令行

2018-04-23 08:45:05

Linux命令行

2010-09-03 09:18:23

LinuxUNIX命令行

2010-06-01 19:14:53

SVN命令行

2011-08-22 11:51:13

Linuxconfigure

2011-07-11 13:20:13

linuxuniq

2017-08-29 15:15:40

Linux命令公網(wǎng)IP

2018-02-10 17:30:41

Linux命令

2019-12-09 09:23:04

Linux命令sort
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號