追尋多年的三角棋

image 44

三角棋或三角殺棋[1],開始時共有 15 個圈圈,每個回合玩家可以畫一個直線,消掉相鄰的一到三顆
輪流畫到最後一顆的人輸

這篇文

代表了長達至少六年的追尋,而現在的我終於可以為這件事畫下句點了

三角棋,是我從國小就常常玩的遊戲,一直玩到高中畢業
雖然整理出一些規則之後就沒有輸過,但我清楚知道心裡一直有一個疑問沒有被滿足

這真的是最終解答了嗎?

在這之前,我想先描述一下這一切的開始

殘局理論

因為規則是畫到最後一顆輸,那如果往前看前幾個步驟,就會發現把一些特定形狀留給對手是一定會贏的
最常見的就是

2 2

image 45

3 1

image 46

1 2 3

image 47

等等的…大概十種殘局可以背
其實用到殘局理論就等於比對手多思考幾步,實戰下來勝率已經很高了

但這遠遠還不夠

先手必勝理論

這個理論是假定有某個開局存在必勝路徑,但是還不會寫程式驗證的我
只能花時間去追尋不知道存不存在的必勝開局

下面這個開局,我贏了高中兩年多的時間,概念上是盡可能畫多一點,盡快進入殘局
image 48

根據程式分析這個開局勝率有 95 %

直到我的高中兼大學同學狗勾,找到完美應對
image 49

這個應對後來也被程式驗證為 100 % 勝率,無解

後來下面的開局,開啟了無敗紀錄
概念是使用最小化的開局,根據對方的應對,在我的第二手就決定勝負!
透過之前的殘局理論讓對手沒辦法留下會讓我輸的殘局給我
image 50

不過,每贏一局
那個疑問都會再一次浮在我的心裡

這是我追尋的終點嗎?

當時我知道我還沒有辦法解開這個謎團
這個問題只能放在心裡,留待未來的我來解答

程式解答

直到 2018 年的某一天,我回想起三角棋並順利地把程式寫出來

沒想到

除了驗證無敗紀錄用的開局,是真的存在必勝路徑
還額外找到兩種開局都存在必勝路徑

終於,走到了終點

以下是存在必勝路徑的九種開局(包括旋轉的情況)

  • 0
  • 3
  • 4
  • 5
  • 7
  • 8
  • 10
  • 12
  • 14

大家可以到專案位置,實際玩玩看也可以跑跑看所有開局的獲勝機率
https://github.com/PttCodingMan/TriangularNim

僅以此文獻給陪我玩三年的高中兼大學同學狗勾

也許你也會想看看