博客 · 第 15 页
关于工程、设计与一些随手记录。
2048:把四个方向归一成同一个操作
滑动、合并、计分只需要写一遍,其余三个方向靠转置与反转复用。真正的难点是「每个方块一回合只能合并一次」,写错就得到不该出现的数字。
扫雷:把布雷推迟到第一次点击
第一下就踩雷的扫雷是没写完的扫雷。把布雷推迟到首次点击、并排除点击点周围 3×3,是这类实现最重要的一处设计。
把孔版套印的约束翻译成设计令牌
这个站点的视觉方向是孔版套印。我真正做的事是把印刷的物理限制写成令牌,于是换观感只动了两个文件,组件一行没改。
进制与单位换算:唯一非线性的是温度
2 到 36 任意进制互转要用 BigInt 兜住精度;十类单位换算中前九类是线性比例,唯独温度是仿射变换,写成一个倍率就一定会错。
颜色与对比度:相对亮度不是通道平均值
三种记法互转只是入口,真正容易写错的是 WCAG 对比度:先做 gamma 还原再加权求和。以及「这上面该用黑字还是白字」为什么不能看亮度是否大于 128。
纯静态站的全文搜索:构建期索引,运行时零后端
静态站做搜索不一定非得接 Algolia。把索引放到构建期生成,搜索完全跑在浏览器里,代价只有构建慢几秒。
