讀者在瀏覽本範例前請先瀏覽「Mastermind攻略範例一」,以便對破解Mastermind謎底的基本原理有一概括認識。 |
遊戲設定:No. of colours: 7; Start from: Trial 1; Length of code: 4; Hints contain error(s)?: May contain error(s); Order type: Fixed order; Colour repeated?: No repetition
謎底:0136
筆者破解Mastermind的原理就是作出假設和不斷因應提示修正假設。假如出謎者的提示有錯誤,我們便不可能破解謎底,因為錯誤的提示與正確的謎底在邏輯上是互相矛盾的(除非我們的推理也有錯,在錯有錯著的情況下「誤中」謎底)。但是由於在某種遊戲設定下,Mastermind的可能謎底數目是一個有限數,上述修正假設的過程在進行到某一階段時,便會窮盡所有可能性而仍然未能找到謎底,這時我們便可斷定出謎者的提示有錯誤。現在就讓我們看看以下範例。
開始時我們可任意輸入4個數字。假設我們輸入0123,並得提示3。在第一回合結束後我們得到以下的「推理追蹤表」:
| 回合 | 輸入 | 提示 | 在本回合用到的新數字 | 假設猜對的數字 |
|---|---|---|---|---|
| 1 | 0123 | 3 | 0123 | - |
接著我們進入第二回合。我們首先回顧第一回合的猜謎結果,由於在第一回合猜對了3個數字,我們可以首先假設該3個數字為012,此外我們需要另加一個新的數字4。輸入0124後,我們得提示為2。在第二回合結束後,我們的「推理追蹤表」變成:
| 回合 | 輸入 | 提示 | 在本回合用到的新數字 | 假設猜對的數字 |
|---|---|---|---|---|
| 1 | 0123 | 3 | 0123 | 012 |
| 2 | 0124 | 2 | 4 | - |
接著我們進入第三回合。我們首先回顧第二回合的猜謎結果,由於在第二回合我們本來假設猜對了012,但所得提示卻是2,這說明我們之前所作的假設有錯,所以我們必須返回去修改之前的假設。我們返回第一回合,把假設修改為013,然後重新前進至第二回合。比較一下013與0124,我們可得出結論:假如謎底真的包含013,那麼我們在第二回合應至少猜中2個數字,而第二回合的提示剛好是2,並不抵觸我們的假設。
由於我們現時假設猜對了013,我們需要另加一個新的數字5。輸入0135後,我們本應得到提示為3,但假設出謎者給予我們的提示為2,即提示有錯誤。我們試看這樣推理下去會有甚麼結果。在第三回合結束後,我們的「推理追蹤表」變成:
| 回合 | 輸入 | 提示 | 在本回合用到的新數字 | 假設猜對的數字 |
|---|---|---|---|---|
| 1 | 0123 | 3 | 0123 | 013 |
| 2 | 0124 | 2 | 4 | - |
| 3 | 0135 | 2 | 5 | - |
接著我們進入第四回合。我們首先回顧第三回合的猜謎結果,由於在第三回合我們本來假設猜對了013,但所得提示卻是2,這說明我們之前所作的假設有錯,所以我們必須返回去修改之前的假設。我們返回第一回合,把假設修改為023,然後重新前進至第二回合。比較一下023與0124,我們可得出結論:假如謎底真的包含023,那麼我們在第二回合應至少猜中了2個數字,而第二回合的提示剛好是2,並不抵觸我們的假設。接著我們又繼續前進至第三回合。比較一下023與0135,我們可以得出結論:假如謎底真的包含023,那麼我們在第三回合應至少猜中2個數字,而第三回合的提示剛好是2,並不抵觸我們的假設。由於我們現時假設猜對了023,我們需要另加一個新的數字6。輸入0236後,我們得到提示為3。在第四回合結束時,我們的「推理追蹤表」變成:
| 回合 | 輸入 | 提示 | 在本回合用到的新數字 | 假設猜對的數字 |
|---|---|---|---|---|
| 1 | 0123 | 3 | 0123 | 023 |
| 2 | 0124 | 2 | 4 | - |
| 3 | 0135 | 2 | 5 | - |
| 4 | 0236 | 3 | 6 | - |
接著我們進入第五回合。我們首先回顧第四回合的猜謎結果,由於在第四回合我們本來假設猜對了023,而所得提示剛好是3,這時有兩個可能,要麼我們的假設正確,要麼我們的假設錯誤。如果我們的假設正確,那麼6不在謎底內。可是這麼一來,我們便再沒有新數字可以填補餘下的位置了(本局遊戲設定的顏色數為7)。由此可見我們的假設有錯,所以我們必須返回去第一回合,把假設修改成123。接下來請讀者自行證明我們的新假設123並不抵觸第二和第三回合的猜謎結果。接著我們前進至第四回合。比較一下123與0236,我們可得出結論:假如謎底真的包含123,那麼我們在第四回合應至少猜中2個數字,而第四回合的提示是3,較我們預期的多了一個猜對的數字,這個數字必定是6。由於我們現時假設猜對了1236,剛好是4個數字,我們就輸入1236,結果得提示為3。在第五回合結束時,我們的「推理追蹤表」變成:
| 回合 | 輸入 | 提示 | 在本回合用到的新數字 | 假設猜對的數字 |
|---|---|---|---|---|
| 1 | 0123 | 3 | 0123 | 123 |
| 2 | 0124 | 2 | 4 | - |
| 3 | 0135 | 2 | 5 | - |
| 4 | 0236 | 3 | 6 | 6 |
| 5 | 1236 | 3 | - | - |
接著我們進入第六回合。我們首先回顧第五回合的猜謎結果,由於在第五回合我們本來假設猜對了1236,但所得提示卻是3,這說明我們的假設有錯,所以我們必須返回去修改之前的假設。先回到第四回合,由於在第四回合我們已用了唯一一個可能猜對的數字(6),無可更改,所以我們只能返回到第一回合。可是我們在第一回合的假設123已是最後一組可能猜對的數字,無可更改。至此我們已窮盡所有可能性而仍然未能找到謎底,這時我們便可斷定出謎者的提示有錯誤(至於究竟存在多少錯誤以及這些錯誤究竟是在哪一步出現,單憑上述推理無法斷定)。

