程序员用脚战胜棋友:树莓派连鞋垫上作弊,懂技术真的为所欲为啊
- 量子位
2022-09-10 13:18
有一个棋力很好的朋友,总是下不赢怎么办?英国程序员小哥詹姆斯想出奇招:把电脑连在鞋垫上。
比赛现场,詹姆斯(左)看起来像是聚精会神地在思考下一步动作,他的对手也没发现哪里不对劲。但在桌面之下,他正努力用脚底板和树莓派电脑沟通。
在没有显示器也不能发出声音的情况下,输入要靠鞋里安装的压力传感器,输出则靠振动马达。成功赢下一盘后,詹姆斯坦白自己其实是「用脚」赢的。
他的朋友欧文一开始还不信,直到他把身上的设备都掏出来,欧文才露出一副见了鬼的表情。
如何用脚战胜对手
詹姆斯作弊的方法并不复杂:对手怎么走自己就在电脑上怎么走,轮到自己时再把电脑的走法在桌面上重复一遍。只不过没有鼠标键盘的情况下,输入和反馈都要靠摩斯电码。
国际象棋 8x8 的格子一般横向编为小写的 a-h、纵向编为 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
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。