利用Python破解猜字游戲Wordle

游戲鏈接:https://www.powerlanguage.co.uk/wordle/

年前同學(xué)給我安利了一款猜字游戲,該游戲每天會(huì)指定5位字母單詞謎底,玩家有6次機(jī)會(huì)猜中這個(gè)單詞鸠珠。如果字母在謎底中出現(xiàn)且位置對(duì)了就顯示綠色,字母出現(xiàn)了但位置不對(duì)就顯示黃色秋麸,字母在答案的單詞中沒(méi)出現(xiàn)就顯示灰色渐排。


image.png

我屬于人菜癮大,單詞量本就薄弱灸蟆,被這些生僻單詞折磨的死去活來(lái)驯耻,我是怒了,反正玩不起就耍流氓炒考,天下武功唯窮舉不破可缚,用代碼暴力破解吧。

一斋枢、代碼思路

1帘靡、找到一份英文單詞詞庫(kù),我把詞庫(kù)分享到網(wǎng)盤(pán)瓤帚。
鏈接:https://pan.baidu.com/s/1lvHw28i9NMxtXuEJkFP3YQ
提取碼:6666
2描姚、對(duì)詞庫(kù)進(jìn)行預(yù)處理涩赢,刪除有標(biāo)點(diǎn)符號(hào)的單詞、統(tǒng)一單詞的大小寫(xiě)轩勘。
3筒扒、依次猜詞:每次猜詞時(shí)盡量保證選擇的單詞的字母是不重復(fù)的,這樣能保證最大化試錯(cuò)概率绊寻;每次猜詞根據(jù)反饋的顏色縮小單詞詞庫(kù)花墩,然后每次從詞庫(kù)中隨機(jī)選擇單詞,選擇的原則還是從重復(fù)單詞數(shù)少的單詞組中選擇一個(gè)榛斯。此外观游,盡可能選擇有元音的單詞,這樣命中率會(huì)高些驮俗。

代碼如下:

## 后面根據(jù)猜中情況篩選:orange懂缕、black、green    
def apd_col(color_lst,char,location=0):
    color_lst.append([char,location-1])
    return color_lst
        
def select_word_lst(word_lst,org_lst,blk_lst,grn_lst):
    next_word_lst = []
    for word in word_lst:
        org_mark,blk_mark,grn_mark=1,0,1
        ## 黑名單篩選
        for blk_word in blk_lst:
            if word.find(blk_word[0])>=0:
                blk_mark=1
        #綠名單圈選        
        for grn_word in grn_lst:
            if word[grn_word[1]]!=grn_word[0]:
                grn_mark=0
        #黃名單圈選        
        for org_word in org_lst:
            if word[org_word[1]]==org_word[0] or word.find(org_word[0])==-1:
                org_mark=0        
                
        if blk_mark==0 and grn_mark==1 and org_mark==1:
            next_word_lst.append(word)
    return next_word_lst 

if __name__=="__main__":
    import os 
    import random
    os.chdir(r"C:\Users\bingo\Desktop\wordle")
    
    # 讀取單詞庫(kù)
    word_lst=[]
    for line in open("data/dic.txt",encoding="utf-8"):
        word=line.split("\uf8f5")[0]
        if len(word.strip())==5 and word.find("-")<0:
            word = word.lower()
            word_lst.append(word)
            
    ## 第一輪 初始化英文字母:包含元音aeiou王凑、盡可能出現(xiàn)所有字母
    init_lst=[]
    for word in word_lst:
        word=word.lower()
        if (word.find("a")>=0 or word.find("e")>=0 or word.find("i")>=0 or word.find("o")>=0 or word.find("u")>=0) and len(set(word))==5 and word.find("-")<0:
            init_lst.append(word)

    init_word = init_lst[random.randrange(len(init_lst))]
    print(init_word)
    
    #第二輪
    org_lst,blk_lst,grn_lst=[],[],[] #初始化
    
    
    
    blk_lst=apd_col(blk_lst,"p",-1)
    blk_lst=apd_col(blk_lst,"a",-1)
    blk_lst=apd_col(blk_lst,"s",-1)
    blk_lst=apd_col(blk_lst,"t",-1)
    blk_lst=apd_col(blk_lst,"e",-1)
    
    grn_lst=apd_col(grn_lst,"e",2)
    word_lst_2 = select_word_lst(word_lst,org_lst,blk_lst,grn_lst)
    #初始兩輪盡可能多的選出詞匯

    #第三輪
    org_lst=apd_col(org_lst,"o",1)
    org_lst=apd_col(org_lst,"c",3)
    
    blk_lst=apd_col(blk_lst,"r",1)
    blk_lst=apd_col(blk_lst,"i",4)
    blk_lst=apd_col(blk_lst,"n",5)
    word_lst_3 = select_word_lst(word_lst_2,org_lst,blk_lst,grn_lst)

二搪柑、改進(jìn)空間

1、交互做的很垃圾索烹,每次都是在手機(jī)里猜單詞工碾,然后在電腦上根據(jù)反饋結(jié)果輸入到單詞組中,不過(guò)我是不想改了百姓,代碼能用就行渊额。
2、猜中的單詞輪數(shù)略多垒拢,平均要四-五輪旬迹,我看網(wǎng)上有人能做到三輪,我感覺(jué)深深的慚愧求类,這道題就是極大似然概率知識(shí)點(diǎn)的典型應(yīng)用奔垦,話說(shuō)用上算法得多花半天時(shí)間,我是沒(méi)有折騰的勁了尸疆,有緣人看到可以嘗試下椿猎。思路就是每個(gè)單詞之間是有一定相關(guān)概率,每次猜詞時(shí)可以根據(jù)反饋的情況寿弱,選擇詞庫(kù)中單詞中出現(xiàn)概率最高的即可犯眠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市症革,隨后出現(xiàn)的幾起案子筐咧,更是在濱河造成了極大的恐慌,老刑警劉巖地沮,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗜浮,死亡現(xiàn)場(chǎng)離奇詭異羡亩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)危融,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)畏铆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吉殃,你說(shuō)我怎么就攤上這事辞居。” “怎么了蛋勺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵瓦灶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我抱完,道長(zhǎng)贼陶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任巧娱,我火速辦了婚禮碉怔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禁添。我一直安慰自己撮胧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布老翘。 她就那樣靜靜地躺著芹啥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铺峭。 梳的紋絲不亂的頭發(fā)上墓怀,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音逛薇,去河邊找鬼捺疼。 笑死疏虫,一個(gè)胖子當(dāng)著我的面吹牛永罚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卧秘,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呢袱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了翅敌?” 一聲冷哼從身側(cè)響起羞福,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚯涮,沒(méi)想到半個(gè)月后治专,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卖陵,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年张峰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泪蔫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喘批,死狀恐怖撩荣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饶深,我是刑警寧澤餐曹,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站敌厘,受9級(jí)特大地震影響台猴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俱两,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一卿吐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锋华,春花似錦嗡官、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至纳猫,卻和暖如春婆咸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芜辕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工尚骄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侵续。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓倔丈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親状蜗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子需五,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容