Lobsters | 原文链接 | 2026-09-09 收录

247 字节的 JavaScript 扫雷:把游戏状态塞进两个函数、靠 XOR 与位运算通关

来源: yui.dev — 2026-08-26

概述

作者与一位叫 DNEK 的伙伴经过数月结对「代码高尔夫」,把一版功能完整的浏览器扫雷从 658 字节一路压到 247 字符——随机 8×8 棋盘、左键开格、右键插旗、零邻雷递归展开、基础胜负判定,一个功能都没删。文章逐条拆解疯狂的压缩技巧:用递归函数 m 一次性生成并渲染 HTML,靠「<a> 不能嵌套 <a>、<p> 不能嵌套 <p>」的解析规则让浏览器自动补闭合标签,从而省掉所有 </a> 与 </p>;用 onmouseup 加 event.which 一次区分左右键(代价是右键要点两下);把可见棋盘和雷区两个二维状态各存成一张一维数组、塞进 b 和 m 两个函数对象;用 ??= 在首次访问时顺手初始化 10% 概率的雷并递减未开安全格计数;已开格用负整数表示,靠字符串负索引恒为 undefined、再经 ?? 和位非 ~ 还原成数字;遍历邻格时用一排一位数的 deltas([~9, ..."1172711", ~9])把偏移量加加减减。作者坦承这版已接近该功能集的下界,但受 Kolmogorov 复杂度所限,谁也无法证明它最小。

核心要点

金句

Every single byte has been carefully put together and thought of.
返回 Lobsters 首页