Mastermind攻略範例六(數字/顏色按任意次序排列)

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

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

謎底:1425


範例一至範例五的謎底都是按順序排列的,在這五個範例中,我們集中於確定謎底包含哪些數字,無需考慮它 們的位置。但在本範例中,謎底的數字乃按任意次序排列,我們不僅要確定謎底包含哪些數字,也要確定它們 的所在位置,這就令猜謎過程變得複雜了。其實,根據筆者的經驗,我們可以把破解Mastermind的過程分為兩 個階段,第一階段是確定謎底包含哪些數字,第二階段則是確定這些這些數字的次序(註1)。這兩個階段既有區 別又有聯繫。說它們有區別,是因為這兩個階段的推理可以獨立進行,我們在進行其中一個階段的推理時,基 本上可以暫不考慮另一個階段的問題。說它們有聯繫,這是因為第一階段制約著第二階段,我們可以把第二階 段看做一個「輸入輸出」的過程。它的輸入就是第一階段所確定的一組數字,它的輸出就是上述這組數字的一 個排序。反過來,在某些情況下,第二階段也會對第一階段作出「反饋」。若果我們在第二階段已窮盡一切可 能排序方式而仍未能找到一個可與已有全部猜謎結果互相協調(即沒有矛盾)的排序方案,這就表示第一階段的 「輸入」有錯誤,這時第二階段就可以把這訊息「反饋」給第一階段,讓第一階段對它的「輸入」作出修改。 在以下的範例中,讀者將會看到這樣一個「反饋」的例子。

好了,現在就讓我們看看以下的範例。由於讀者在範例一至範例五已能看到進行第一階段的各種技巧,在討論 以下範例時,筆者只會說明第一階段推理的結果,而略去有關解釋,讀者可自行作出推理,看看筆者是如何得 到有關推理結果的。此外,為避免把數字與其位置相混淆,以下筆者採用ABCD來代表數字的位置,即A代表最左 面的位置,B次之,C再次之,D則代表最右面的位置。

開始時第一和第二階段都沒有甚麼限制,可任意輸入4個數字。假設我們輸入0123,並得提示1,1(即猜對了2個 數字,其中一個數字位置正確,另一個位置不正確)。在第一回合結束後,我們得到以下的「推理追蹤表」(請 注意以下的「推理追蹤表」跟範例一至範例五的「推理追蹤表」有所不同,這是因為第二階段的推理特性跟第 一階段有很大分別,以下讀者會看到下表最後一欄的意義):

回合輸入提示假設猜對的數字假設正確的位置
101231,1--

接著我們進入第二回合。經過第一階段後,我們得到0145作為第二階段的輸入。接著我們進行第二階段的推理 ,即確定上述一組數字的位置。如何確定?其原理就是根據已有的猜謎結果作出假設,並且檢驗這些假設是否 能與全部已有的猜謎結果互相協調。現在就讓我們開始進行推理。由於在第一回合我們猜對1個數字的位置,我 們可以假設那個數字就是位置A的數字。這即是說我們假設謎底的第一個數字是0。由於我們已假設位置A是正確 的,那麼其他位置便都是不正確的位置,即1必不在位置B。我們不妨假設它是在位置C。確定了0和1的位置後, 我們便可任意確定4和5的位置,不妨假設4是在位置B,5是在位置D。因此我們在第二回合輸入0415,結果得提 示2,1。在第二回合結束後,我們的「推理追蹤表」變成:

回合輸入提示假設猜對的數字假設正確的位置
101231,101A
204152,14-

接著我們進入第三回合。經過第一階段後,我們得到0146作為第二階段的輸入。接著我們進行第二階段的推理 。由於在第一回合假設猜對的數字(01)沒有改變,我們仍假設在該回合中位置A是正確的。接著我們考慮第二回 合。在第二回合中有2個正確位置,其中一個必是A(因為0在第一和第二回合中都是在位置A)。此外還有一個正 確位置,不妨把它假設為B,即謎底的第二個數字是4。至此位置A和B上的數字已確定了,還有位置C和D上的數 字尚待決定。我們先來確定位置C上的數字。由於我們假設1在第二回合所處的位置(C)不是該回合中正確的位置 ,位置C上的數字不可能是1,因而只可能是6。由此我們亦確定位置D上的數字是1。這樣我們便確定在第三回合 應輸入0461。輸入0461後,我們得提示1,1。在第三回合結束後,我們的「推理追蹤表」變成:

回合輸入提示假設猜對的數字假設正確的位置
101231,101A
204152,14B
304611,1--

接著我們進入第四回合。經過第一階段後,我們得到0245作為第二階段的輸入。接著我們進行第二階段的推理 。由於在第一回合假設猜對的數字現已更改為02,我們要重新進行假設。首先我們假設在第一回合中位置A是正 確的,接著我們假設在第二回合中位置B是正確的。至此我們假設謎底的首兩個數字是04,可是這一假設與第三 回合的猜謎結果互相矛盾(因為第三回合只猜對了1個數字的位置),即上述假設不能通過第三回合的檢驗。因此 我們必須回去修改之前的假設。

我們首先回到第二回合,修改該回合的假設。請注意我們不能把B修改成C,因為在該回合中,位置C上的數字是 1,但現在1並不是我們假設猜對的數字之一。因此我們只能把B修改成D(在該回合中,位置D上的數字是5,而5 是我們假設猜對的數字之一)。好了,至此我們確定了位置A和D上的數字,還有位置B和C尚待決定。我們先來確 定位置B。基於現時的假設和第二回合的猜謎結果,位置B上的數字不可能是4,因而只可能是2。由此我們亦可 確定位置C上的數字是4。由於0245此一排序可通過第三回合的檢驗,我們最後確定在第四回合應輸入0245。輸 入0245後,我們得提示1,2。在第四回合結束後,我們的「推理追蹤表」變成:

回合輸入提示假設猜對的數字假設正確的位置
101231,102A
204152,145D
304611,1--
402451,2--

接著我們進入第五回合。經過第一階段後,我們得到0345作為第二階段的輸入。接著我們進行第二階段的推理 。由於在第一回合假設猜對的數字現已更改為03,我們要重新進行假設。首先我們假設在第一回合中位置A是正 確的。接著我們考慮第二回合。基於先前的推理,我們不能假設在第二回合中位置B是正確的(因為前面已說過 ,這一假設不能通過第三回合的檢驗),我們也不能假設位置C是正確的(因為1不是我們假設猜對的數字之一)。 因此我們只能假設位置D是正確的。至此我們假設謎底的第一個數字是0,最後一個數字是5,可是這一假設不能 通過第四回合的檢驗(因為第四回合只猜對了1個數字的位置)。因此我們必須回去修改之前的假設。

先回到第二回合。由於在該回合假設正確的位置(D)已是最後一個位置,無可更改,所以我們只好再回到第一回 合,修改該回合的假設。請注意我們不能把A修改成B或C,因為在第一回合中,位置B和C的數字1和2都不是我們 假設猜對的數字之一。因此我們只能把A修改成D。接著我們又再考慮第二回合。由於在第二回合中有2個正確位 置,我們必須確定這2個位置。這2個正確位置不可能是D(因為在第二回合中位置D上的數字是5,而現在我們假 設位置D上的數字是3),也不可能是C(因為在第二回合中位置C上的數字是1,而1不是我們假設猜對的數字之一) ,亦不可能是A(因為在第二回合中位置A上的數字是0,但根據我們在第一回合中的假設,位置A上的數字不能是 0)。因此我們無法確定第二回合中的2個正確位置,這說明我們之前的假設有錯。我們只好又回到第一回合,修 改該回合的假設。可是現時第一回合的假設(D)已是最後一個位置,無可更改。至此我們已窮盡一切可能的排序 方式而仍未能找到一個可與已有全部猜謎結果互相協調的排序方案,這說明第一階段的「輸入」0345有錯誤, 這時第二階段把這訊息「反饋」給第一階段,讓第一階段對它的「輸入」作出修改。以下是第二階段作出「反 饋」前「推理追蹤表」的狀況(表中的?號表示在第二回合中我們無法確定正確位置):

回合輸入提示假設猜對的數字假設正確的位置
101231,103D
204152,145?
304611,1--
402451,2--

經第一階段修改後,我們得到1245作為新的輸入。接著我們進行第二階段的推理。由於在第一回合假設猜對的 數字現已更改為12,我們要重新進行假設。現在我們不能假設第一回合的正確位置是A,因為現在0已不是我們 假設猜對的數字之一。我們假設B是第一回合的正確位置。接著我們考慮第二回合。由於在第二回合中有2個正 確位置,我們必須確定這2個位置。這2個正確位置都不可能是A(因為0不是我們假設猜對的數字之一),也不可 能是B(因為在第二回合中位置B上的數字是4,而現在我們假設位置B上的數字是1),亦不可能是C(因為在第二回 合中位置C上的數字是1,而現在我們假設1是在位置B)。因此我們無法確定第二回合中的2個正確位置,這說明 我們之前的假設有錯。我們只好又回到第一回合,修改該回合的假設。

我們把第一回合的假設修改成C。接著又重新考慮第二回合。由於在第二回合中有2個正確位置,我們必須確定 這2個位置。這2個正確位置都不可能是A(因為0不是我們假設猜對的數字之一),也不可能是C(因為位置C上的數 字是1,而現在我們假設位置C上的數字是2),所以只可能是B和D。至此我們確定了謎底的第二個數字是4,第三 個數字是2,第四個數字是5。由此我們亦可確定謎底的第一個數字是1。由於1425此一排序可通過第三和第四回 合的檢驗,我們最後確定在第五回合應輸入1425。輸入1425後,結果破解了謎底。在第五回合結束後,我們的 「推理追蹤表」變成:

回合輸入提示假設猜對的數字假設正確的位置
101231,112C
204152,145B,D
304611,1--
402451,2--
51425WIN--

註1:在某些情況下,我們只需進行其中一個階段。例如,當我們玩一個Order type為Fixed order的遊戲時, 我們便無需進行第二階段。又或者當我們玩一個Order type為Random order的遊戲,而玩到某一階段我們已完 全確定了謎底包含哪些數字(但尚未確定各數字的次序)時,我們便只需集中進行第二階段,無需再進行第一階 段的推理了。
連結至Mastermind Link Page