Tic-Tac-Chec:規則與已被解決的遊戲
簡而言之
- Tic-Tac-Chec(4×4 棋盤,雙方各四枚西洋棋棋子,四子連線者勝)在其 1998 年原始規則下已被強解:雙方最佳著法的結果是和棋。
- 殘局庫涵蓋 2,476,597,610 個局面,全部 64 種首次放置都能保持和棋,而開局階段之後的局面有 91.5% 是和棋。
- 這是一場注意力的遊戲。一個實際威脅會把保持和棋的著法比例從 93% 壓到 25%,而和棋局面中的每個威脅都有解法。
- 被吃掉的棋子會回到手中,因此局面會重複;求解程式從已結束的棋局逆向推算,並把無止盡的對局判為和棋。
Tic-Tac-Chec 讓雙方各持四枚西洋棋棋子,目標是在 4×4 棋盤上連成四子。吃子會把棋子重新投入對局,兵會在棋盤兩端之間來回轉向,局面也可能永無止盡地重複。
我強解了 1998 年的 Dream Green 原版遊戲。雙方最佳著法的結果是和棋。 殘局庫涵蓋 2,476,597,610 個已編索引的局面,給出每一個合法著法的精確結果,並為每個必勝或必敗局面提供到結束的距離。
可在下方探索。每個著法都以當前行棋方的角度標示結果。距離以著(一方走一步)為單位;和棋沒有有限距離。
拖曳棋子或點擊排序後的著法即可跟進變化。綠色為勝,灰色為和棋,紅色為負。
規則
每位玩家擁有一兵、一馬、一主教與一車。把四枚棋子排成一橫列、一直行或長對角線即獲勝。
- 開局: 棋盤一開始是空的。前六著中,雙方各放置三枚棋子。
- 回合: 一旦解鎖移動,玩家可以放置手中的棋子,或移動盤上的棋子。之後發生吃子後,移動仍保持解鎖。
- 西洋棋走法: 馬、主教與車的走法與吃子方式照常。沒有王,也沒有將軍或將死。
- 回收棋子: 吃子會把棋子送回其擁有者的手中,而不是從對局中移除。
- 兵: 兵直走一格,斜前方吃子,並在任一棋盤邊緣反轉方向。重新放置會把它的方向重設為朝向對手。
結果
空盤是和棋,而全部 64 種首次放置都能保持和棋。 在強制放置的開局階段之後,本局仍以和棋為主:已編索引的開局後局面中有 91.51% 是和棋。
| 區段 | 勝 | 負 | 和棋 |
|---|---|---|---|
| 開局後 | 184,895,598 | 24,178,920 | 2,253,286,227 |
| 僅放置的開局階段 | 147,472 | 30,468 | 14,058,925 |
數值皆以行棋方為準。勝表示該方能強制連成四子;負表示所有防守都失敗。開局後最深的必勝在 41 著結束,而從必敗局面出發的最長抵抗可持續 40 著。僅放置的開局階段中,最深的決定性局面達到 39 著。
和棋長什麼樣子
我從空盤中抽出一條確定性的和棋變化。它走了 32 著之後進入一個精確的 18 著循環。棋盤、行棋方、手中棋子與兵的方向全都重複。
這條變化上的某個局面,比開局結果所暗示的要銳利得多:
| 黑方的選擇 | 著法 |
|---|---|
| 合法 | 18 |
| 保持和棋 | 3 |
| 兩著內敗北 | 15 |
黑方行棋。只有
a1-b2、d2-c2 與 c3-a2 是和棋;其餘 15 個選擇都在兩著內敗北。
這條變化只是把結果具體呈現出來。完整的勝/負/和棋表才是證明,而且它為每個和棋局面都提供至少一條保持和棋的續著。
一場注意力的遊戲
殘局庫可以檢驗一種更貼近人類感受的描述:這個遊戲通常相當寬容,但當對手排出三枚棋子時,你必須察覺到。
只有當對手擁有一個能立刻連成四子的合法著法時,我才算它是實際威脅。這排除了那些具誤導性的三子連線,例如第四格被阻擋、兵的方向不對,或移動仍未解鎖的情況。兩個彼此獨立的偵測器在每個已編索引的局面中都找出了完全相同的獲勝著法。
| 在開局後的和棋局面中 | 結果 |
|---|---|
| 能保持和棋的合法著法 | 93.20% |
| 多數著法皆為和棋的局面 | 94.63% |
| 所有著法皆為和棋的局面 | 77.45% |
| 存在實際威脅的和棋局面 | 108,060,290 |
| 遭受威脅時能保持和棋的著法 | 25.12% |
| 只有唯一一個和棋應手的受威脅局面 | 15.23% |
這個模式相當鮮明:
- 通常寬鬆: 在大多數和棋局面中,大多數著法都沒問題。
- 局部強制: 一個實際威脅會把保持和棋的選擇從 93.20% 的著法壓到 25.12%。
- 並非總能防守: 開局後所有實際威脅中有 96.89% 存在安全應手。剩下的 3,762,536 個恰好就是殘局庫中的兩著內敗北局面。
和棋局面中的每個實際威脅都有解法。至於「所有局面中的所有威脅都能被阻止」這個更強的說法則不成立。
這些是對完整結構索引的計數,而不是對局面在人類對局中出現頻率的估計。它們支持「注意力遊戲」這個解讀,但並未把它變成一項機率主張。
求解一個帶環的遊戲
回收棋子使對局不會逐步縮減成殘局。這張圖含有環,因此搭配簡單轉置快取的前向 minimax 並不安全:一個與路徑相關的重複判定,可能會滲入某個局面所儲存的數值。
所有數值都以行棋方的角度為準。走完一著後,子局面屬於對手。我以明確處理這個視角轉換的方式,逆向求解整張圖:
- 把已完成的四子連線標記為下一位該行棋者的敗北。
- 若某局面存在任一著法能讓對手陷入敗北,則將該局面標記為勝。
- 若所有合法著法都讓對手取得勝勢,則將其標記為負。
- 重複直到沒有數值再改變。所有未定的局面都是和棋:雙方都無法強迫這張圖走向終局結果。
原始規則並未規定重複次數上限。殘局庫把無限的非獲勝對局判為和棋;人類可自訂的重複規則能提供停止條件。
| 表 | 局面數 | 表示法 |
|---|---|---|
| 開局後 | 2,462,360,745 | 帶環的圖,以顏色互換與 180° 旋轉正規化 |
| 僅放置的開局階段 | 14,236,865 | 獨立的六著無環表 |
每個局面都能由其盤面排列與兵的方向直接映射成一個整數。工作結果每個局面使用一個位元組:距離的奇偶性編碼勝或負,並以一個代碼表示和棋。
- 原始表: 2.48 GB,含每個局面的結果與剩餘距離。
- 瀏覽器用表: 463 MiB,僅為決定性局面儲存距離。
- 打包稽核: 每一筆精簡條目都與原始表比對過。
驗證結果
正式求解在一台 M3 Max 上使用平坦位元組陣列完成。它按需產生 28,730,418,180 個有向的開局後著法,而不儲存邊的圖結構,因此整個求解可在一台筆電上完成。
結果隨後通過了幾項獨立檢查:
- 數值稽核: 針對全部 24.6 億個開局後局面重新產生每個合法後繼局面,並在不使用求解程式前驅計數器的情況下驗證 minimax 方程式。
- 距離稽核: 以獨立的一次掃描檢查全部 209,074,518 個決定性的開局後局面。
- 開局重播: 使用另一套可讀性較高的規則引擎。
- 表示法檢查: 獨立測試編號/反編號、顏色正規化、兵的方向,以及產生的前驅邊。
- 威脅普查: 兩個獨立偵測器在每個已編索引的局面中,對確切的立即獲勝著法達成一致。
發佈的表也帶有自己的身分標記。一個規則標籤指明它是在哪一個確切變體下求解的,並以內部 CRC-64/XZ 檢查碼涵蓋所有條目,因此局面瀏覽器絕不可能在無聲無息中用某套規則的局面去查另一套規則的表。
| 欄位 | 數值 |
|---|---|
| 規則標籤 | 0x54544303 |
| 開局後局面數 | 2,462,360,745 |
| 僅放置階段局面數 | 14,236,865 |
| 表的 CRC-64/XZ | 0xeb952765179a695e |
在先前技術的檢索中,我沒有找到更早的公開強解或弱解。這是一個有範圍限制的否定結果,並不證明沒有人私下解過它。
哪一套規則?
這次求解屬於 1998 年的 Dream Green 版本。這個名稱如今涵蓋不只一套規則:
| 規則版本 | 兵/開局的解讀 | 空盤 | 狀態 |
|---|---|---|---|
| 1998 年,行進方向 | 回頭的兵依其當前方向吃子 | 和棋 | 標準殘局庫 |
| 1998 年,僅去程 | 回頭的兵不能吃子 | 和棋 | 替代殘局庫 |
| 2025 年鮑比·菲舍爾重製版 | 宣稱有新的兵首著與開局規則 | 未知 | 需要完整規則書並另行求解 |
原始規則單說兵在遠端邊緣反轉,且只在「向前」移動時吃子,但從未以圖示說明回頭時的吃子。我採用行進方向的解讀:它的吃子斜線會隨之轉向。一份詳細的法文轉錄與一個獨立的可玩實作都與此一致。若設計者或出版者給出直接裁定,即可定案。
更嚴格的「僅去程」解讀移除了 426,173,880 個合法著法,並改變了 16,529,908 個局面的數值。其中有些直接翻轉:9,366 個標準版的勝在僅去程版變成負,另有 810 個負變成勝。開局結果仍是和棋,但局面瀏覽器依然能辨識變體,因為有數百萬筆表中條目不同。
結論
十六格之所以能撐出 24.8 億個已編索引的局面,是因為吃子會回收兵力而非把它移除。正是這條規則造就了和棋背後的環,以及讓守住和棋變得困難的戰術。
到 tic-tac-chec.brianhliou.com 與完整解法對弈。
資源:
- Tic-Tac-Chec 殘局庫局面瀏覽器:每個合法著法都依精確結果與決定性距離排序。
- 標準殘局庫 v1:463 MiB 的精簡殘局庫與 SHA-256 檢查碼。
- 求解程式與研究紀錄:Rust 求解程式、規則帳本、驗證測試與重現指令。
- 正式求解紀錄:局面計數、計時、稽核與檢查碼。
- 自動產生的策略報告:完整的剩餘距離直方圖與重播的變化。
- 威脅與防守普查:窮盡式的著法寬度與立即威脅統計。
- 兵規則變體比較:兩種兵解讀之間的精確轉換計數。
- Dream Green 原始規則:用於標準求解的主要規則單。