您現在的位置是:首頁 > 棋牌

盲公頂棍:中國象棋殘局的二進位制數學解法

  • 由 數學有靈犀 發表于 棋牌
  • 2021-07-09
簡介輪到我拿了,我就拿走第1排的1顆石子,此時剩餘石子對應的數值為0011、0100、0111,XOR運算的結果為0000

國棋怎麼玩

盲公頂棍:中國象棋殘局的二進位制數學解法

街頭有時會看到上圖的象棋殘局,查了查它的淵源,果然搜到《楊官璘象棋研究》記載了一個類似的棋局,原來此局就是大名鼎鼎的江湖殘局“盲公頂棍”,賈題韜《象棋殘局新論》也介紹了兩個類似的局面,看來這個殘局還頗有名氣。

來觀察一下,雙方具有對稱的棋局:士與過了河的兵(卒)均不能動,否則輸棋。能動的只有兩個炮和一個兵(卒),且炮只能進不能平,否則會被對方悶宮殺。這局棋制勝的關鍵在於,一路兵卒和兩路跑的空步數,誰先走完最後的空步數,誰就贏棋。大約就是玩左輪手槍一類遊戲技巧吧,把最後一手之前留給自己,讓對方必死。

盲公頂棍:中國象棋殘局的二進位制數學解法

電腦上用象棋軟體計算,結果竟然發現各種棋軟都沒法解開這個殘局。於是人工加電腦反覆演練,才發現這個貌似平淡的殘局沒有和棋。一般都會走成某一方子力被圍困,一動就輸掉的棋形。

喜愛玩象棋的朋友都明白“先行之利”,尤其是殘局,先走一步的優勢就更明顯了。有趣的是,這個殘局的結果竟然是紅先黑勝,換黑棋先走的結果就是紅勝,這是一個註定了誰先走誰輸的象棋殘局。

這個棋局還有蠻多變例,透過改變炮的初始位置和對頭兵的數量,殘局的勝負結果也會發生變化。

反覆研究後,一些似曾相識的規律越來越清晰,沒錯!這些規律不但能給出殘局正確的解法,也能夠指引出決定局面勝負的最深奧義。下面我們來描述這個棋局的數學原理:首先必須建立數學模型,這個說容易也不容易。先來講一個簡單的遊戲。把石子擺成四排,第一排1顆、第二排3顆、第三排5顆、第四排7顆(下圖)。規則是這樣的,兩人輪流來拿石子,每次可以在同一排中拿走任意顆,至少拿走1顆,誰拿到最後一顆石子,誰就贏了。例如:我先來拿,我可以一次拿走第四排的全部7顆;或者在第二排拿走2顆,留下1顆,這都是規則允許的。但是在第二排拿1顆並且在第三排也拿1顆,這種不在同一排內拿石子的方法是違反規則的。因為石子的數量是有限的,每次拿都會造成數量減少,兩人輪流拿,最後一個石子總是會被拿走。拿走最後一個石子的就是勝者。也就是說這個遊戲一定能分出勝負,不會出現平局。

盲公頂棍:中國象棋殘局的二進位制數學解法

下面來說一下這個遊戲的求勝方法:

首先把每一排的石子數量的十進位制數轉化成二進位制數。我們會得到0001、0011、0101、0111。然後我們對這個數連續進行XOR運算(二進位制邏輯異或運算),簡單理解為不進位的二進位制加法運算。即0001 XOR 0011=0010,0010 XOR 0101=0111,0111 XOR 0111=0000。如果初始值為0000就註定誰先拿誰就要輸了。

例如,你先拿了第4排的1顆石子。剩餘石子對應的數值分別為,0001、0011、0100、0111,XOR運算的結果為0001;輪到我拿了,我就拿走第1排的1顆石子,此時剩餘石子對應的數值為0011、0100、0111,XOR運算的結果為0000;這樣依次類推下去,只要你拿完了,XOR運算的結果就不會是0000,我只要再拿掉一些石子,使結果恢復到0000即可。當然,對於不同的局面,使XOR運算結果恢復到0000的方法是不同的,而且也可能同時存在多種恢復方法。反覆使用這種過程,就可以保證我在最後一次拿光剩餘的石子,也就是我贏了。如果你看懂了,再按照上述方法演示幾次,就可以掌握這個遊戲的取勝之道了。

盲公頂棍:中國象棋殘局的二進位制數學解法

言歸正傳,讓我們回頭再看前面的象棋殘局。把棋盤上一路的兵之間可走的步數看作1,把五路炮之間可走的步數看作4,把九路炮之間可走的步數看作5。轉化成對應的二進位制為0001、0100、0101,XOR運算結果為0000。這下明白為啥這個象棋殘局註定是誰先走誰輸了吧!這就是數學的魅力。

當然,象棋的走法相比於石子游戲更復雜,規則也更多。但是隻要抓住它們在邏輯上的共同點,也就可以把這兩個看起來毫不相關的遊戲當作同一個遊戲來玩了。本文到此結束,因為已經“授人以漁”,所以我不會列出破解殘局的棋譜,更無必要講述此局中繁雜的變化。

Top