懂技術真的可以為所欲為:樹莓派連鞋墊上作弊程序員用腳戰勝棋友
有一個棋力很好的朋友,總是下不贏怎麼辦?英國程序員小哥詹姆斯想出奇招:把電腦連在鞋墊上。比賽現場,詹姆斯(左)看起來像是聚精會神地在思考下一步動作,他的對手也沒發現哪裡不對勁。但在桌面之下,他正努力用腳底板和樹莓派電腦溝通。
在沒有顯示器也不能發出聲音的情況下,輸入要靠鞋里安裝的壓力傳感器,輸出則靠振動馬達。成功贏下一盤後,詹姆斯坦白自己其實是“用腳”贏的。
他的朋友歐文一開始還不信,直到他把身上的設備都掏出來,歐文才露出一副見了鬼的表情。
如何用腳戰胜對手
詹姆斯作弊的方法並不復雜:對手怎麼走自己就在電腦上怎麼走,輪到自己時再把電腦的走法在桌面上重複一遍。只不過沒有鼠標鍵盤的情況下,輸入和反饋都要靠摩斯電碼。
國際象棋8×8 的格子一般橫向編為小寫的ah、縱向編為1-8,棋子則根據英文單詞首字母命名,如後(Queen)就是大寫Q,象(Bishop)就是大寫B,另外小寫x 代表吃子。
這樣一來,每一步棋都可以寫成類似“Bxg2”(把象移動到g2 格子並吃子)的簡短編碼形式,這也是一種通用的國際象棋記譜方法。
將記譜碼轉換成摩斯電碼的長短脈衝組合後,就能像發電報一樣的節奏用腳踩踏板了。
雖然原理很簡單,但操作起來還是很困難。程序員小哥詹姆斯遇到的實際問題就是腳踩編碼和感受振動都不能出錯,一旦失誤桌面上的棋盤局勢就和電腦裡的不一樣了。
雖然電腦有悔棋返回上一步這個操作,但關鍵不一定能及時意識到錯誤,等好幾步過後再想撤銷那就“無從下腳”了。
在第一盤棋中詹姆斯就把電腦的反饋給翻譯錯了,他意識到後半盤沒有幫手只能靠自己了,最終輸給水平更高的歐文。第二盤棋詹姆斯其實也犯了同樣的錯誤,但因為當時局面優勢已經很大,幾步之後歐文只能認輸。
△ 詹姆斯出錯時的局面
贏下一盤比賽后,詹姆斯向歐文坦白,並介紹了設備的具體細節。一台樹莓派Zero 只有信用卡大小,詹姆斯額外加裝了三個組件後也能裝進褲兜里。
需要添加的有:讀取力敏電阻的數模轉換電路,控制震動馬達的晶體管,以及減少震動噪聲的可變電阻。
軟件方面他安裝了國際象棋程序Stockfish,並自己寫了Python 腳本和Perl 腳本,用於翻譯摩斯電碼。為了贏下一盤棋,詹姆斯甚至還在褲兜里打了個洞,好讓信號線可以順著褲腿連到鞋上,也是很拼了。
而鞋墊則是他自己3D 打印的,使用了有彈性的TPU 塑料,甚至不會妨礙走路。
會有人在正經比賽中用鞋作弊麼?
雖然已經贏了一次,但詹姆斯表示還沒玩過癮。下一步他打算把設備做得再隱蔽一些,到當地的酒吧里去整蠱更多朋友。他計劃把所有設備都集成到一個電路板並配上電池和藍牙模塊,粘在鞋的內底,這樣即使被搜身都不會露餡了。
詹姆斯還開玩笑說想招募一個水平還不錯的人,讓他用這雙鞋看能不能真的贏一個世界冠軍回來。
雖然詹姆斯並不打算真的這樣做,但還是在網友之中掀起一番討論。正式比賽,真的可以這樣作弊麼?有人指出,用電子設備作弊在棋牌比賽和賭場中已有多年曆史,甚至上世紀七十年代就有人在鞋里安裝過輪盤賭預測裝置。
不過對於國際象棋來說,用電腦作弊還有一個額外問題。電腦的思維方式畢竟和人類不一樣,沒準就下出一手人類根本想不到的棋,在事後很容易被分析發現。
剛好最近就有這麼一個例子。世界冠軍Magnus Carlsen 在錦標賽中輸給一位積分遠不如他的對手,這名對手還有線上比賽的作弊史。雖然這次有沒有作弊行為還沒出調查結果,不過冠軍老哥直接宣布退賽了。
雖然吃瓜群眾對這場比賽中可能的作弊方式有諸多猜測,某種振動裝置的可能性最大,流傳比較廣的一個說法是…… 放在肛門裡。
參考鏈接:
- [1]https://incoherency.co.uk/blog/stories/sockfish.html
- [2]https://news.ycombinator.com/item?id=32729105
- [3]https://twitter.com/MagnusCarlsen/status/1566848734616555523
- [4]https://twitter.com/Babble____/status/1567437910361751552