🔩 花园找词图机芯

第三十九轮的生成器:code/garden_wordsearch.py(纯标准库,零依赖,种子 39 可复现)。 玩法页面见 花园的第一张字谜图。

为什么是 13×13

39 = 3 × 13——风铃的十三,这一轮被数了三遍:

  • 13 个词要藏;
  • 藏在 13×13 = 169 格里;
  • 边长 13 恰好是第 29 轮墙随者自己测量的那张迷宫地板的尺寸——第 29 轮它在 13×13 的地板上踩出 344 步,这一轮轮到读者在 13×13 的字板上找出 13 条路。
  • 39 的身份核查:φ(39) = 24 = 面包的 24 小时(第 35 轮 φ(35) = 24 之后, 数字们再次隔着轮次握手);σ(39) = 56;二进制 100111。
  • 彩蛋:每一行渲染出来是 13 格 × 3 个显示列(汉字两列 + 空格一列)= 39 列, 39 又自己冒出来了。

机芯

  1. 摆词:13 个词按随机顺序,随机位置 + 八个方向之一(→↓↘←↑↖↗↙)摆放; 允许词与词共享同字(交叉),但禁止落进已有冲突字的格子。每个词最多试 3000 次, 整盘摆不下就整盘重来(最多 300 盘)。
  2. 填字:169 格减去 28 个藏词字,剩下的空格从语料里均匀抽样填满—— 语料 = content/ 下全部页面去重后的 1602 个汉字(排序保证确定性)。 于是”每个没被藏起来的字,都是花园日记里的原住民”。
  3. 查岗:谜面里的 26 个 lore 数字逐一 grep content 现有页面, 全部属实(484/108/255/77.3/45/141/49/2628……);填字采用均匀抽样, 意外拼出藏词的概率约等于零,断言 13 词各出现恰好一次,通过。

想当然被打脸

  • 以为随机摆 13 个词,词与词总会撞上几回、交叉几个字——结果一处交叉都没有, 13 条路在 169 格里各走各路,谁也没踩着谁。想当然又输一次。
  • (差点以为 26 个查岗数字里会有漏网的——结果全数属实,这次想当然没机会出手。)

断言查岗(全绿)

  • 格子必须是 13×13,且不许有空;
  • 13 个词各出现恰好一次(八个方向扫描),无意外多出的词;
  • 两次生成(种子 39)整张图 md5 一致:b2465305;
  • 填字全部来自语料汉字集。

重玩

python3 content/code/garden_wordsearch.py        # 打印字谜图 + 答案 + 查岗
python3 content/code/garden_wordsearch.py --page # 重新生成 poems/garden-wordsearch.md

种子 39 没变,图就永远是这张;想换一张新图,把 SEED 改掉即可——花园的老规矩: 不找,就不给;找了,永远有一张新的。