不行,在 Dominosa 中,同一組不分順序的數字配對,不能使用兩次。你把兩塊磚組合成一張骨牌時,這組數值組合,必須是棋盤上其他地方都沒出現過的,而且順序不重要,這代表一張 1-2 骨牌與一張 2-1 骨牌,會被視為同一組配對,只有其中一個能被允許。這個公開題目的二乘三棋盤,上排讀作 0 0 1,下排讀作 1 2 2,而乾淨的解法,是把三個直欄各自配對成 0-1、0-2,與 1-2,這三組互不相同、不分順序的配對,合起來正好覆蓋全部六個格子。因為「不分順序配對必須唯一」這條規則,任何想重複用到這些配對的嘗試都會被禁止——因為在拿走一組 0-1 配對之後,剩下的磚裡仍然還有一個 0 與一個 1,在物理上可以再組成第二組配對,但這個遊戲會拒絕任何重複使用先前已接受過的不分順序組合。這個瀏覽器遊戲執行這條規則的方式,是把每一組已接受的不分順序配對,記錄成一個排序過的鍵值,拒絕任何鍵值已經存在於那個集合中的新選擇,並在出現兩次無效選擇後,把這一局標記為失敗。這正是讓 Dominosa 成為一個限制條件解謎遊戲、而不是一個自由拼貼練習的原因:光是覆蓋整個棋盤還不夠,配對集合的唯一性,才是真正的目標。

如果你想親自體驗這條規則,這個以鍵盤操作為主的Dominosa棋盤,就用預設的六格題目,把它清楚地呈現了出來。

can the same number pair be used twice when i play dominosa
can the same number pair be used twice when i play dominosa

為什麼同一組數字配對不能出現兩次

Dominosa 是一個圍繞單一硬性規則打造的小型限制條件解謎遊戲:你放置的每一張骨牌,所帶的數值配對,都必須是目前這一局裡從未出現過的。這個棋盤由六塊編了號的磚組成,排成一個 2 乘 3 的網格,你的任務,是用三張相鄰的骨牌,覆蓋全部六個格子。因為這個棋盤有六個格子,而每張骨牌恰好覆蓋兩個,所以任何有效的解法,都恰好需要三張骨牌。既然總共只用得到三組不分順序的配對,重複其中一組,就會迫使剩下兩張骨牌,用不到三種不同的不分順序數值,去覆蓋四個格子,而這在唯一性規則之下是不可能的。這個遊戲的設計,讓這條規則能自動被執行:每接受一張骨牌之後,這組新配對就會被加進一個排序鍵集合裡,之後任何一次選擇,只要它兩個數值排序後對應到一個已存在的鍵,就會被判定為無效動作而遭到拒絕。

正是這條規則,把 Dominosa 與一般的「配對相鄰磚塊」練習區分開來。當一組重複的配對會違反唯一性時,光是覆蓋整個棋盤是不夠的,而正是這唯一一條規則,讓某些看起來很誘人的開局,可能悄悄地讓整個棋盤變得無解。舉例來說,這個預設棋盤上排相鄰的兩個 0,會讓一組橫向的 0-0 配對,看起來像是個很自然的開局。放下它,就等於用掉了數值配對 [0, 0],這樣一來,剩下的四塊磚 1、1、2、2,就必須只用尚未使用過的不分順序配對,再用另外兩張骨牌拼完。而那個剩餘部分無法完成,所以這個遊戲所使用的遞迴求解器,會把這個棋盤標記為死鎖,並結束這一局。這正是重複或誤用一組配對的實際代價:它不只是讓你損失一個回合,還可能結束整場遊戲。

「同一組配對」實際上是什麼意思

在 Dominosa 中,「同一組數字配對」這個說法,指的具體來說是不分順序的數值配對。順序不重要,所以 1-2 會被當成與 2-1 相同的數值配對,而 0-0 不管你按哪個方向讀那兩塊磚,都會被視為相同。這個實作,會在把兩塊磚的數值加進已使用配對集合之前,先把它們排序成一個標準化的鍵,例如 [1, 2] 或 [0, 0],這代表玩家絕不可能靠反過來選那兩塊磚的視覺順序,來偷偷混進一組重複的配對。這正是這條規則裡最容易讓新手中招的部分,因為眼睛自然會先讀到第一個選取的磚塊,再讀到第二個,很容易讓人誤以為只要調換選取順序,配對就會不一樣。事實並非如此。

為了讓這條不分順序的規則更具體,以下是這個公開題目的棋盤,在每一種解讀方式下的表現:

選取順序磚塊數值排序後的鍵算作
左上、中上0、0[0, 0]0-0
中上、左上0、0[0, 0]與 0-0 相同
右上、右下1、2[1, 2]1-2
右下、右上2、1[1, 2]與 1-2 相同

所以,在第一次被接受之後,再嘗試第二次 1-2,並不是一組不同的配對,而是同一組不分順序的配對,遊戲會拒絕它。已經被覆蓋的磚塊會被停用、無法再被使用,這也堵死了「用不同順序重新選取同樣兩個格子」這個變通做法。想確認相關的相鄰規則的讀者,可以參閱在 Dominosa 中配對對角磚塊這篇指南,它說明了讓一次放置合法的另外一半條件。

如何用三組獨一無二的配對覆蓋 2x3 棋盤

要在預設棋盤上完成一局 Dominosa,請依序照著以下步驟進行。

  1. 用方向鍵,把外框游標移到左上角、顯示 0 的那個格子。
  2. 按下 Space 或 Enter,錨定這第一塊磚。游標外框會改變樣式,表示已錨定一個選取項目。
  3. 用向右鍵往右移一步,讓游標停在中上方那個同樣顯示 0 的格子上。
  4. 再按一次 Space 或 Enter,組成 0-0 骨牌。這組配對會被記錄成 [0, 0],這兩個格子也會被覆蓋。
  5. 注意到剩下的四塊磚是 1、1、2、2,而在剩餘的格子位置上,唯一可能的相鄰配對,要不是會重複 1-2 這組不分順序的配對,就是會讓剩下的 1 磚彼此不相鄰,所以這個遞迴求解器,會把這個棋盤標記為死鎖。請重新開始,改用直向的做法。
  6. 重新開始之後,錨定左上角格子(0),接著往下移到左下角格子(1),按下 Space 或 Enter,組成 0-1 配對。
  7. 錨定中上方格子(0),往下移到中下方格子(2),按下 Space 或 Enter,組成 0-2 配對。
  8. 錨定右上角格子(1),往下移到右下角格子(2),按下 Space 或 Enter,組成 1-2 配對,完成整個棋盤。

這個順序,會把每一個直欄各自配上不同的不分順序配對,覆蓋全部六個格子,並讓這一局恰好以 1,200 分結束。滑鼠與觸控使用者,可以透過點擊或輕觸來選取同樣看得到的格子,而再次選取已錨定的磚塊,會在你確定組成一張骨牌之前,取消那個錨定狀態。如果兩個格子不是正交相鄰,或它們的不分順序配對已經被使用過,這次選取就會失敗;連續兩次這樣的失敗,會造成一個終局失敗狀態。

公開解法解析

這個公開的解法,把三個直欄各自配對起來。左欄把左上角的 0 與左下角的 1 組合起來,形成配對 0-1。中欄把中上方的 0 與中下方的 2 組合起來,形成 0-2。右欄把右上角的 1 與右下角的 2 組合起來,形成 1-2。這三組不分順序的配對彼此都不相同,合起來恰好覆蓋每一個格子一次。它們同時滿足這條規則的兩個部分:覆蓋,加上唯一性。

一個很誘人的替代方案,是從上排橫向的 0-0 開始,但這個開局會失敗,因為在剩餘的格子位置上,1、1、2、2 這四塊磚,不管怎麼拼,要不是會重複 1-2 這組不分順序的配對,就是會讓剩下的 1 磚彼此不相鄰。Dominosa 所使用的遞迴求解器,會窮舉地確認這一點:它測試這個空棋盤,確認存在一個完整解,接著接受 0-0 這個開局,並證明剩下的部分不存在任何有效的拼法,這正是為什麼這一步,會讓這一局以死鎖告終,而不只是一次無效的選擇。要記取的教訓是:選擇最顯而易見的局部配對,可能會悄悄摧毀唯一合法的整體拼法。

死鎖偵測如何抓出無解狀態

Dominosa 不只在一次選擇無效時才執行窮舉式的完成度搜尋,而是在每一次骨牌被接受之後都會執行。這個求解器會找出第一個尚未覆蓋的磚塊,逐一嘗試每一個未被覆蓋、且不分順序配對尚未被使用過的正交相鄰磚塊,並在同一條規則之下,遞迴檢查棋盤剩餘的部分。如果沒有任何一個分支,能找到一個完美的唯一配對拼法,這一局就會立刻被標記為死鎖,棋盤也會凍結。這能避免一種令人沮喪的情況:棋盤上明明還有空格,游標也還能移動,但卻沒有任何合法的放置順序,能完成這個謎題。這個死鎖檢查,作用在與介面所使用的相同狀態上,所以玩家看到的、與求解器看到的,絕不會出現落差。

這兩種失敗模式是不同的。當兩個格子不是正交相鄰,或它們的不分順序配對已經被使用過時,就會發生一次無效選擇,而累積兩次這樣的情況,就會構成一個終局失敗。而死鎖,則是發生在每一個剩下的放置選項,都會走向死路的時候,即使個別來看,每一次放置本身都是合法的。上面那個公開解法,同時避開了這兩種情況,因為每一組被接受的配對都是全新的,每一組配對都正交相鄰,而且從起始狀態出發的每一個遞迴分支,最終都能到達一個由三組互不相同的不分順序配對,完全覆蓋的棋盤。

計分、失誤,與重新開始的行為

每一張被接受的骨牌,會獲得 400 分。三張有效骨牌,會讓棋盤恰好以 1,200 分完成,這也是預設題目上可能得到的最高分數。兩次無效選擇,會造成一個終局失敗狀態,把棋盤鎖住,而求解器偵測到的死鎖,也會造成同樣的結果。「重新開始」控制項,會清除每一張骨牌、每一次選取、每一次失誤,與每一分,讓棋盤回到起始狀態,同時不改變底層的數值。最佳分數會留在瀏覽器本機儲存空間裡,不會被傳送到任何地方,所以你可以自由實驗,而不會影響到任何其他人的紀錄。

這個棋盤使用語意化的按鈕與 CSS 網格,搭配這個頁面其他地方所使用的同一套介面底色、前景色、線條、強調色,與危險狀態代符。這裡沒有 canvas、沒有圖片、不需要拖曳、沒有隨機產生器、沒有計時器、沒有音訊、沒有上傳、沒有帳號、不需要硬體權限、沒有下載,也沒有網路請求,所以整個遊戲,包括選取、取消、重新開始,以及共用的 Boss Key,全部都能只靠鍵盤完成。連按兩次 Escape,會把遊戲畫面替換成試算表樣式的 Boss Key 畫面,再連按兩次同樣的按鍵,就能還原成未變動的棋盤。一個實用的解題習慣,是先列出已經用過的不分順序配對,再檢視限制最多的未覆蓋格子,然後才確定一張骨牌。在這個預設的教學棋盤上,直向配對清楚地呈現了這條核心規則,同樣的推理方式,也適用於更大的 Dominosa 棋盤——當一組重複的配對會違反唯一性時,光靠覆蓋整個棋盤是不夠的。

延伸閱讀:依序連接數字?Numberlink 改用配對的方式