局面從哪裡來

這三本書都在 dpxq.com 上,兩本古譜是根據二十世紀八九十年代明清木刻本的註釋重印本錄入的。我們挖掘了它兩個古譜書架上的每一部公有領域棋譜,共2,938局,並在告知網站站長之後,把能夠逐著演示的那些作為研究發佈在這裡,每局都附有原棋譜的連結。圖和著法是幾百年前的;現代編者的每一條註釋都留在 dpxq 上,因為那部分不該由我們轉載。

一局棋譜到手時是兩個字串。《適情雅趣》第011局 群鼠爭穴的局面是每個棋子兩位數字,從黑方底線讀起,著法列表用同樣的座標。兩者在檔案裡都是一整行;這裡把它們拆開,每組四個棋子:

[DhtmlXQ_binit]
72999999 59999957 22771799 99999941
12994299 30996099 68028229 48999999

[DhtmlXQ_movelist]
22204220 72320232 77706042 17373222
57362232 36443222 4432

[DhtmlXQ_comment0]
红弃双车,双炮胜
dpxq 提供的第011局棋譜,只保留承載局面、解法和書中結論(紅方棄掉雙車,靠雙炮取勝)的三個標籤。

把它在本站對局所用的同一套規則核心上重新走一遍,就得到一個局面和一條著法。這次重放首先檢驗的是棋譜,而不是書:一個解法記短了仍然能順利重放,但錄錯的棋子通常會在某處產生非法著法,這些棋譜會被整局剔除,而不是截短。然後皮卡魚逐一掃描每個局面,尋找與書中結論相矛盾的判斷,引擎能在這裡說出「這不是紅勝」,然後到此為止。

這次掃描說不出解法是否唯一。那需要窮盡搜尋:每一回合紅方的每一步合法著法,黑方的每一種應著,一直搜到所稱的步數為止。在這些局面上,二十個棋子、九到十三步的解法,每局只需幾秒到幾分鐘。下面的整個審校在筆電上跑了幾個小時。

什麼算毛病

一個仍能成殺的解法可能有四種毛病。第二首著:另一個首著在同樣著數內強制成殺,於是這張圖有兩個答案。雙解:再往後,在黑方某種防守之後,紅方有兩種取勝續著。更快的殺法:書中印的是七著殺,而存在五著殺,這直接違反了題意。更長的殺法:書中對勝負的判斷是對的,對著數的判斷是錯的,因為黑方有一步比所印著法更好的防守。

雙解正是兩種傳統分歧的地方。西方西洋棋排局自十九世紀起就把它當作毛病。朱鶴洲評判排局的十字標準要求「新深妙多走少美無趣名」:新穎、深刻、巧妙、變化多、攻子都要走動、子少、圖形美觀、無閒子、有趣味、題名貼切。唯一性不在其中。

172局中有45局無瑕

書審校無瑕雙解第二首著更快更長
適情雅趣 (1570)11128457521
渊深海阔 (1808)391012644
林幼如作品集(20世紀)22713100
十三步以內的連將殺排局,每局都做了窮盡求解:每一個首著,每一種防守之後的每一種取勝續著。每局只按最嚴重的毛病計一次。不在任何一欄中的九局,是一局書中首著在所記步數內殺不了,以及五局紅方能勝但超出搜尋範圍(分佈在《適情雅趣》和《林幼如作品集》中),還有《淵深海闊》中的三局錯譜。

雙解才是重點,而且都不是勉強算數的情況。《適情雅趣》第011局 群鼠爭穴是七著殺:雙車都棄掉,由雙炮和馬完成其餘部分。紅方第六著書中走傌六進五,而在同一局面上傌六進七也能在同樣著數內成殺。

書中著法走到紅方第六著,然後把另一種殺法走出來。編者和讀者都沒有去找它,因為在這一傳統裡它從來不算毛病。研究裡的這一章兩種都收了。

第二首著才是排局作者會在意的。第015局 妙振兵鈴以車將開局,六著成殺;把 d9 上的兵推到將旁邊,同樣六著成殺,只是同樣的子換了一種排列。僅《適情雅趣》一書就有七局這樣的情況。

第二首著走出來:不同的首著,同樣六著成殺。

《適情雅趣》第108局 爭舟走渡印的是七著殺,共十三步。紅方第一著改用兵吃將旁邊的士,兵四平五,六著就能成殺。172局中有9局存在比所印更快的殺法。

書中著法,紅方第一著處另有分枝兵四平五:吃士,早一著成殺。

當棋譜本身錄錯時

《淵深海闊》第217局 疾誅文醜聲稱連將五著殺,所印著法也確實成殺。之所以成殺,是因為黑方第四著自己走進了殺局。黑方在那裡還有另一步合法著法:車5退8,把原圖中就停在 e2 的車調回 e10;走了這步之後,紅方一步將軍都沒有,連將殺就此結束,任何不將軍的著法也殺不了。

書中著法走到紅方第四著,然後是棋譜沒有給出的那一著:以車5退8代替士6進5。紅方沒有將可走了。

沒有哪位編者會在紅方必敗的局面上印紅勝,所以錄入的這張圖很可能不是原排局。錯的是哪個子,機器可以幫忙回答:對圖做每一種單子改動,看哪些能讓書中自己的著法成為五著強制殺。154種改動中,有四種可以。其中三種涉及 e2 的黑車,第四種是在 e3 放一個黑卒,正好在那個車的線上。

remove the black chariot on e2
the black piece on e2 is a horse, not a chariot
the black piece on e2 is a soldier, not a chariot
black soldier on d2 belongs on e3
能恢復書中解法的每一種單子改動。三種是去掉 e2 的黑車,或把它換成較弱的子;第四種是用 d2 的卒擋住它的線。

我們把局面和著法用中文發給了維護 dpxq 棋譜的人,並附上我們的猜測:書中那個車原本是卒。他的回答是「古譜就有錯呀」。他沒有核對印本,所以這個車究竟是古書的錯還是轉錄的錯,仍無定論。如果你有《淵深海闊》的印本,要看的格子是 e2。

另外兩局,第202局和第265局,情況更糟。沒有任何單子改動能恢復其中任何一局,所以出錯的不止一個子,或者著法列表也錄錯了。三局都按 dpxq 的記錄原樣留在《淵深海闊》的研究裡,審校研究則收錄了這一發現。

這三局是172局之內的。在整個語料庫中,有34局棋譜被標為錯譜:錄入的圖支撐不了旁邊印著的結論。其中十局聲稱連將殺,九局在書中自己的著法之內就被駁倒,分佈在四部棋譜中;每一局的搜尋都比所記步數多走了六著,也找不到連將殺。它們單獨收在一個研究裡,連結在下面,按駁倒的乾脆程度排序:第217局中紅方一步將軍都沒有,最後一局裡紅方仍有十步將軍,卻都殺不了。

精確搜尋報告沒有強制殺時,排局本身有缺陷和棋譜錄錯看起來一模一樣,而在根局面上做一次引擎評估,幾秒鐘就能區分兩者。我們原本標為有缺陷的五個局面,這樣一查就沒問題:紅方確實能強制成殺,只是比所印著法晚。

四大名局:沒有一局不成立

七星聚會、蚯蚓降龍、野馬操田和千里獨行是江湖排局,自1801年的《百局象棋譜》起就爭論不休。它們的結論是和棋,而不借助重複局面的規則,和棋是證明不了的。能檢驗的是這個結論會不會被打破,即某一方能否強制成殺。在這四局及其變體的二十九份棋譜中,搜尋沒有找到與書相矛盾的殺法。其中八份證明了雙方在搜尋深度內都殺不了;其餘的,在得出結論之前,一方或雙方的搜尋預算就用完了。

《淵深海闊》所印的七星聚會:雙車、一炮、三兵對一車、一象、四卒。書中著法共五十四步。在搜尋範圍內紅方無法強制成殺;黑方這邊,搜尋在得出結論前就用完了預算。

審校先錯了三次

上面的數字來自第四版審校。第一版檢驗的是不連將的排局,它在首著之後的局面上搜尋時,當成了紅方連走兩步。結果報告190局中176局無瑕。這個數字毫無意義,因為每一次搜尋都從錯誤的一方開始。

第二版把每一局都當成國際象棋排局裡的「n著殺」來判。不連將的排局只聲稱紅先勝,對這樣的結論來說,第二首著和更快的殺法都不算毛病。那一輪算出的毛病大約有一半就此作廢。這兩個錯誤都出在不連將排局的審校裡,那部分已經擱置,原因見下一節;上面的172局都是連將殺排局,著數本身就是書中結論的一部分。

第三個錯誤是沒有先做上面說的引擎篩查,就直接跑精確搜尋。有八局起初被判為排局本身有缺陷:其中五局是表中那些紅方能勝但超出搜尋範圍的,另外三局是上面的錯譜。

第四個錯誤出在協作殺裡,也就是雙方合作走成殺局的題。生成這些題的程式只檢驗將死,而象棋把困斃,即一方無子可動,同樣判負。以困斃結束的著法也是一種解,所以我們當作唯一解發布的186道協作殺裡,有22道含有生成程式看不到的解,最多的一道有64種。按困斃計算的複查程式已經寫好,還沒有上線。

四個錯誤,每一個都是我們本來知道、卻沒有寫進工具的規則:輪到哪一方走,排局聲稱的是什麼,錄錯的棋譜看起來和有缺陷的排局一樣,以及困斃判負。

我們沒有檢查的部分

不是連將的排局,也就是語料庫的大部分。一局寬緊殺在二十個子的局面上要走二十步以上,能算清九步題的窮盡搜尋在那裡算不完。證明數搜尋能走得更遠,但在長局上還是會算不完。上面的一切都只涉及連將殺排局。

這些都不是對這些排局作為作品的評價。《適情雅趣》裡的雙解,是按一個《適情雅趣》本來就不為之而寫的標準算出的雙解;讓這些局面四百年來值得抄錄的那種幾何之美,絲毫不受這個計數影響。

逐著演示每一項發現九局被駁倒的棋譜古譜原書