Mastermind攻略範例五(數字/顏色可重覆)

讀者在瀏覽本範例前請先瀏覽「Mastermind攻略範例一」,以便對破解Mastermind謎底的基本原理有一概括認識。

遊戲設定:No. of colours: 7; Start from: Trial 1; Length of code: 5; Hints contain error(s)?: No error; Order type: Fixed order; Colour repeated?: Each colour at most 4 times

謎底:23336


在這種遊戲設定下,遊戲變得頗為複雜,這是因為我們不單要考慮謎底包含哪些數字,而且還要考慮這些數字重覆出現的次數。此外由於我們無法辨別相同的數字,在某些情況下,我們難以判斷哪些數字是「在本回合用到的新數字」。例如,假設我們在第一回合用了3個0,在第二回合又用了5個0,那麼在第二回合中哪些0算是新數字,哪些算是舊數字?對於此一問題,筆者採取「保守原則」,即把猜謎過程中用到的數字盡量視為舊數字。根據此原則,在上述例子的第二回合的5個0中,我們把其中3個0視為舊數字,只有其餘2個0算作新數字。現在就讓我們看看以下範例。

開始時我們可任意輸入5個數字。這時我們遇到一個問題,輸入的一組數字應否包含重覆的數字呢?如果答案是肯定的,每個數字應重覆多少次呢?對於這個問題,並無確定的答案,純粹是個人喜好的問題。筆者選擇了00012作為第一回合的輸入。輸入後得提示為1。第一回合結束後的「推理追蹤表」如下:

回合輸入提示在本回合用到的新數字假設猜對的數字
100012100012-

接著我們進入第二回合。我們首先回顧第一回合的猜謎結果,由於在第一回合我們猜對了1個數字,我們假設這個數字是0。此外我們還需另加4個新的數字,例如3345。輸入03345後,我們得提示為2。在第二回合結束後,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
1000121000120
20334523345-

接著我們進入第三回合。我們首先回顧第二回合的猜謎結果,由於第二回合較第一回合增多了一個猜對的數字,我們假設這個猜對的數字為3。由於我們現時假設猜對了03,我們仍需另加3個新的數字。由於現在只剩下6可供使用,而在此遊戲設定下,每個數字最多可出現4次,所以在第三回合我們輸入03666,並得提示為2。在第三回合結束後,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
1000121000120
203345233453
3036662666-

接著我們進入第四回合。我們首先回顧第三回合的猜謎結果,由於在第三回合我們本來假設猜對了03,而所得提示剛好是2,03可能是對的。但如果03真是對的,則根據第一至三回合的結果,可以推斷1、2、4、5、6必不在謎底中。而且,在第一回合中我們本來猜謎底共有3個0,結果卻只猜對1個數字,這說明謎底只可能包含1個0,0不可能重覆。另外,在第二回合中我們本來猜謎底共有1個0和2個3,結果卻只猜對2個數字,所以謎底只可能包含1個3,3也不可能重覆。這樣03不可能再跟任何數字組合成謎底,這說明我們之前所作的假設有錯,所以我們必須返回去修改之前的假設。先返回至第二回合,把假設改為4,然後重新前進至第三回合。比較一下04與03666,我們可得出結論:假如謎底真的包含04,那麼在第三回合應至少猜中1個數字,而第三回合的提示是2,較我們預期的多了一個數字,這個數字必定是6。

由於我們現時假設猜對了046,還差兩個數字。可是這時我們已沒有新數字可用,難道我們的假設有錯嗎?且慢,不要忘記在此遊戲設定下,數字是可以重覆的。現在讓我們來分析一下哪些數字可重覆,哪些不可重覆。根據第一至三回合的猜謎結果,我們可以推斷,如果046是對的,則1、2、3、5必不在謎底中。其次,由於在第一回合中只猜對1個數字,所以謎底只可能包含1個0,0不可能重覆。另外由於在第三回合中只猜對2個數字,所以謎底只可能包含1個6,6也不可能重覆。至此我們已斷定0、1、2、3、5、6都不能在謎底中出現或重覆,現在還剩下4。4能夠重覆嗎?答案是肯定的。因為在第二回合中我們本來猜謎底包含1個4,這並不排除謎底包含多於1個4的可能性。事實上,如果我們把04446作為第四回合的輸入,此一數字組合並不抵觸第一至三回合的猜謎結果(請讀者自行驗證)。因此在第四回合我們便輸入04446,結果得提示為1。在第四回合結束後,我們的「推理追蹤表」變成(請注意在第四回合我們只把其中2個4算作新數字,這是因為第二回合曾經使用1個4,現在第四回合用了3個4,我們把其中一個4視為舊數字,所以在該回合只有2個新數字):

回合輸入提示在本回合用到的新數字假設猜對的數字
1000121000120
203345233454
30366626666
404446144-

接著我們進入第五回合。我們首先回顧第四回合的猜謎結果,由於在第四回合我們假設猜對了046,而所得提示卻是1,這說明我們的假設有錯,所以我們必須返回去修改之前的假設。如果我們返回第二回合,把假設修改為5,仍然無濟於事(請讀者自行證明這一點),所以我們必須返回第一回合。

把第一回合的假設修改成1後,我們重新前進至第二回合。比較一下1與03345,我們可得出結論:假如謎底真的包含1,那麼在第二回合我們沒有猜中任何數字,但第二回合的提示是2,較我們預期的多了兩個數字,假設這兩個數字是33。接著我們前進至第三回合,在這回合我們假設猜對了一個6(解釋從略)。之後我們繼續前進至第四回合,發覺該回合的猜謎結果並不抵觸我們的假設1336。由於我們現時假設猜對了1336,還差一個數字,我們必須判斷哪些數字可以重覆。根據第一至第四回合的猜謎結果,我們可以斷定0、2、4、5、6都不可以在謎底中出現或重覆,只剩下1和3可以重覆(請讀者自行檢驗這一點)。我們選擇1,並輸入11336,結果得提示為3。在第五回合結束後,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
1000121000121
2033452334533
30366626666
404446144-
51133631-

接著我們進入第六回合。我們首先回顧第五回合的猜謎結果,由於在第五回合我們假設猜對了1336,而所得提示卻是3,這說明我們的假設有錯,所以我們返回去修改之前的假設。我們回到第二回合,把假設修改成34,然後重新前進。在第三回合我們假設猜對了一個6(解釋從略)。可是1346這個假設與第四回合的猜謎結果互相矛盾,所以我們又返回第二回合,把假設修改成35,然後又重新前進。同樣,在第三回合我們假設猜對了一個6。今次我們的假設1356順利通過第四和第五回合的檢驗。由於我們現時假設猜對了1356,還差一個數字,我們必須判斷哪些數字可以重覆。根據第一至第五回合的猜謎結果,我們可以斷定0、1、2、3、4、6都不可以在謎底中出現或重覆,只剩下5可以重覆(請讀者自行檢驗這一點),所以我們輸入13556,結果得提示為2。在第六回合結束後,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
1000121000121
2033452334535
30366626666
404446144-
51133631-
61355625-

接著我們進入第七回合。我們首先回顧第六回合的猜謎結果,由於在第六回合我們假設猜對了1356,而所得提示卻是2,這說明我們的假設有錯,所以我們返回去修改之前的假設。我們回到第二回合,把假設修改成45,然後重新前進。在第三回合我們假設猜對了2個6(請讀者自行判斷為甚麼要假設2個6)。可是14566這個假設與第四回合的猜謎結果互相矛盾,所以我們只好又返回第二回合。現在第二回合的假設45已是最後一個可能的假設,無可更改,所以我們只好返回第一回合。

我們把第一回合的假設修改成2,接著重新前進。在第二和第三回合我們分別假設猜對了33和6(解釋從略)。今次我們的假設2336順利通過第四至第六回合的檢驗。由於我們現時假設猜對了2336,還差一個數字,我們必須判斷哪些數字可以重覆。根據第一至第六回合的猜謎結果,我們可以斷定0、1、4、5、6都不可以在謎底中出現或重覆,只剩下2和3可以重覆(請讀者自行檢驗這一點),我們選擇2。輸入22336後我們得提示為4。在第七回合結束後,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
1000121000122
2033452334533
30366626666
404446144-
51133631-
61355625-
72233642-

接著我們進入第八回合。我們首先回顧第七回合的猜謎結果,由於在第七回合我們假設猜對了2336,而所得提示剛好是4,所以我們的假設不一定有錯。那麼為何我們仍然未猜中謎底?原因可能是我們在上一回合選錯了2作為重覆的數字,因此現在我們改選3,輸入23336。這次我們終於破解謎底(如果這次我們仍未能破解謎底,這有兩個可能,要麼我們之前的假設仍然有錯,我們只好又返回去修改之前的假設;要麼出謎者的提示有錯,我們最終必會發現這一點)。在第八回合結束後,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
1000121000122
2033452334533
30366626666
404446144-
51133631-
61355625-
72233642-
823336WIN3-

人工智能Mastermind網頁