Mastermind攻略範例二(謎底可能含有空白)

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

遊戲設定:No. of colours: 7; Start from: Trial 1; Length of code: Unspecified (3 - 5); Hints contain error(s)?: No error; Order type: Fixed order; Colour repeated?: No repetition

謎底:246bb


由於空白(以下用字母b代表空白)不算是一種顏色,在計分時亦不會把空白計算在內,我們必須對空白作出特殊處理。筆者的策略是,把空白的使用盡量延後,即在無可選擇的情況下才使用空白。現在就讓我們看看以下範例。

開始時我們可任意輸入5個數字。假設我們輸入01234,並得提示2。在第一回合結束後我們得到以下的「推理追蹤表」:

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

接著我們進入第二回合。我們首先回顧第一回合的猜謎結果,由於在第一回合猜對了2個數字,我們可以首先假設該2個數字為01。此外我們還需要另加3個新的數字。可是現時我們只剩下5、6這兩個數字,而在本局的遊戲設定下,我們可以使用最多兩個空白,因此這時我們可以使用一個空白來填補餘下的位置,即在第二回合我們輸入0156b,結果得提示為1。在第二回合結束後,我們的「推理追蹤表」變成:

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

接著我們進入第三回合。我們首先回顧第二回合的猜謎結果,由於在第二回合我們本來假設猜對了01,但所得提示卻是1,這說明我們之前所作的假設有錯,所以我們返回第一回合,把之前的假設修改為02,然後重新前進至第二回合。比較一下02與0156b,我們得出結論:假如謎底真的包含02,那麼我們在第二回合應至少猜中了1個數字,而第二回合的提示剛好是1。這即是說,56不在謎底之內,可是這麼一來,我們便沒有新數字可供使用,而我們最多可用兩個空白數,不足夠用來填補餘下的位置。這說明我們之前所作的假設有錯,所以我們又返回第一回合修改之前的假設。讀者應能發現,無論我們把第一回合的假設修改成03、04、12、13或14,我們在重新回到第二回合後,都不能找到足夠數目的數字或空白來填補餘下的位置(請讀者自行作出此項推斷)。接下來我們嘗試把第一回合的假設修改成23,看看是否能繼續推理下去。

比較一下23與0156b,我們得出結論:假如謎底真的包含23,那麼我們在第二回合應沒有猜中任何數字,而第二回合的提示是1,比我們預期的多了一個猜對的數字,我們可假設這個數字是5。由於我們現時假設猜對了235而沒有新數字可供使用,我們可使用兩個空白來填補餘下的位置。接著我們輸入235bb,結果得提示為1。在第三回合結束後,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
10123420123423
20156b1565
3235bb1--

接著我們進入第四回合。我們首先回顧第三回合的猜謎結果,由於在第三回合我們本來假設猜對了235,但所得提示卻是1,這說明我們之前所作的假設有錯。我們首先返回第二回合,把假設修改為6,然後重新前進至第三回合。比較一下236與235bb,我們得出結論:假如謎底真的包含236,那麼我們在第三回合應至少猜中2個數字,但第三回合的提示是1,這說明我們的假設仍然有錯。接下來我們回到第一回合,把假設修改為24,然後重新前進至第二回合。比較一下24與0156b,我們得出結論:假如謎底真的包含24,那麼我們在第二回合應沒有猜中任何數字,而第二回合的提示是1,較我們預期的多了一個猜對的數字。我們可假設這個數字為5,然後前進至第三回合。比較一下245與235bb,我們得出結論:假如謎底真的包含245,那麼我們在第三回合應至少猜中2個數字,但第三回合的提示是1,這說明我們的假設仍然有錯。所以我們又回到第二回合,把假設修改為6。比較一下246與235bb,我們得出結論:假如謎底真的包含246,那麼我們在第三回合應至少猜中1個數字,而第三回合的提示剛好是1,並不抵觸我們的假設。由於我們現時假設猜對了246,尚有兩個空著的位置,我們不妨用兩個空白來填補這兩個位置,即輸入246bb,結果我們猜中了謎底。在第四回合結束時,我們的「推理追蹤表」變成:

回合輸入提示在本回合用到的新數字假設猜對的數字
10123420123424
20156b1566
3235bb1--
4246bbWIN--

人工智能Mastermind網頁