博客 · 第 11 页
关于工程、设计与一些随手记录。
URL 编码的三个陷阱:空格、加号与双重编码
查询串里的 + 是空格,路径里的 + 是加号;同一个字符在路径与查询里的编码规则不同;编码两次会得到看似正常却永远匹配不上的值。
写中国象棋规则,四处最容易错的地方
蹩马腿、塞象眼、炮打隔子、将帅照面。我把走法生成拆成几何层与合法性层,前者只管兵种怎么走,后者统一兜住送将,四处坑各配了断言。
手写 cron 解析器:五段、并集规则,以及 2 月 30 日
cron 的语法半小时能写完,难的是语义:日与星期同时限定时是并集而非交集,不存在的时间要有终止条件,7 与 0 都是星期天。
CSV 不是「按逗号切」:RFC 4180 的引号与换行
一旦字段里有引号,split 立刻出错:引号能包住逗号和换行,引号自己写成两个。三十行状态机比任何正则都可靠。
黑白棋的合法落点:一次扫描,八个方向
一个空位合法,当且仅当八个方向里至少有一个方向能夹住对方的棋子。判断与翻转用的是同一次扫描,不必先模拟再回滚。
数独生成器:挖洞、唯一解,以及一个把页面卡死的 bug
生成器先填一个完整解,再逐格挖洞并验证唯一性。我在求解器里把「不限」写成 0,结果空盘要枚举全部解,点新局直接卡死。
