使用方法
- 在「单词表」里每行填一个词,也接受逗号或空格分隔。默认示例是 ORION、COMET、NEBULA、GALAXY、METEOR 五个太空词,最长 6 个字母。
- 在「方阵边长」里填 5 到 25 的整数,默认 12。12×12 共 144 格,五个词共 28 个字母,占用率 19.4%,余量充足。
- 在「藏词方向」里选 8 方向或 4 方向。8 方向含两条对角线,难度更高;4 方向只有横竖,适合低龄。
- 点「生成方阵」,或在单词表里按 Ctrl+Enter(Mac 是 Cmd+Enter)。Enter 键保留给换行,不会误触发生成。
- 结果区输出字母网格和答案键;对照表默认 12 行,点「加载更多」补齐 17 边长一行,「导出 CSV」带 BOM 头,Excel 打开中文不乱码。
这个词搜索生成器能解决什么
英语课或单词记忆打卡要一份找词练习:把本周词表贴进来,30 秒拿到一张可打印的字母方阵和答案键,不用手工排版和对位。
需要控制难度:边长、方向数和占用率三件事决定难度。同一个五词表,12×12 占用率 19.4% 属于简单,改到 8×8 就变成 43.8%,藏词密度明显上升。
怕出「无解题」:词长超过边长的词一定放不下(6 字母的 GALAXY 在 5×5 里必失败),本页会点名是哪个词放不下,而不是输出一张缺词的网格让你自己发现。
要给答案做对账:答案键给出每个词的起点行列和方向,行从上往下、列从左往右、都从 1 起数,批改时可以直接核对。
本页只生成英文 26 个字母的方阵,不处理中文词、不自动出提示语,也不把网格转成图片。填空用的随机字母来自随机字母生成器同一类均匀抽取,需要单独抽字母时可以直接用那个页面。
原理与规则说明
词搜索生成器用的是贪心随机放置:对每个词,从 8 个方向向量 (0,±1)、(±1,0)、(±1,±1)(即 Moore 邻域的 8 个方向)里随机取一个,再在合法起点范围内随机取一个起点,逐格检查「目标格为空或字母相同」,通过就写入;一次尝试失败就换位置重试,每个词最多试 200 次,全失败才记为放不下。
为什么词表先按长度降序排:长词的合法起点少,先放长词、后放短词能显著降低失败率;短词几乎总能塞进剩余空隙。演示词表里 NEBULA、GALAXY、METEOR 三个 6 字母词排在 ORION、COMET 前面就是这个原因。
为什么边长默认 12:经验上藏词字母占方阵 40% 以内时,8 方向加 200 次重试几乎不会失败。实测同一份五词表在 12×12 下换 200 个随机种子,出现「至少一个词放不下」的次数是 0;而把总字母推到 145(超过 144 格)时,48 个词只能放下 35 个。12×12 的 57 字母上限对常用词表留足了余量。
为什么剩余格子用 Math.random() 填 A~Z:26 个字母等概率填充让藏词不被「非常用字母暴露」。填充是均匀独立抽取,不刻意避免无意间拼出别的词——这也是所有找词游戏的通用做法,完全避免偶然词需要整行整列查词典,代价不成比例。
字母冲突时允许共用:目标格已有字母且与待写字母相同时允许交叉,这会让网格更紧凑,也是纸面找词游戏的惯例;不同字母的交叉才判为冲突并换位重试。
完整示例(数值仅作演示)
默认输入五个太空词、边长 12、8 方向:ORION(5)、COMET(5)、NEBULA(6)、GALAXY(6)、METEOR(6),共 28 个字母,占 144 格的 19.44%,需要随机填充 116 格,两者之和恰好 144。
打开页面看到的那张网格是一份真实输出:NEBULA 从第 10 行第 11 列向上排,GALAXY 从第 12 行第 6 列向上排,METEOR 从第 4 行第 9 列向下排,ORION 与 COMET 都从第 1 列向右上斜排。填充字母随机,你重新生成会得到不同的排布,但五个词一定都在。
把边长改到 8:面积 64,28 个字母的占用率升到 43.75%,超过 40% 的经验线,仍能生成但交叉共用会明显变多;改到 5:GALAXY 这类 6 字母词超过边长,会被点名放不下。
换成 4 方向:对角线关闭,可用方向从 8 个降到 4 个,同样词表的排布自由度减半,占用率高时失败率上升得比 8 方向快。
输入范围与对照表
| 边长 | 格子数 | 40% 上限字母 | 可容 6 字母词 | 说明 |
|---|---|---|---|---|
| 5 | 25 | 10 | 1 | 只放得下短词,6 字母词必失败 |
| 6 | 36 | 14 | 2 | 偏紧 |
| 7 | 49 | 19 | 3 | 偏紧 |
| 8 | 64 | 25 | 4 | 五词 28 字母占用 43.8% |
| 9 | 81 | 32 | 5 | 放得下 |
| 10 | 100 | 40 | 6 | 放得下 |
| 11 | 121 | 48 | 8 | 放得下 |
| 12 | 144 | 57 | 9 | 默认档,占用 19.4% |
| 13 | 169 | 67 | 11 | 放得下 |
| 14 | 196 | 78 | 13 | 放得下 |
| 15 | 225 | 90 | 15 | 适合 10 词以上 |
| 16 | 256 | 102 | 17 | 适合 10 词以上 |
| 17 | 289 | 115 | 19 | 适合 15 词以上 |
输入范围:单词表 1 到 40 个词,每个词 2 到 25 个字母,只接受 A~Z 与 a~z;边长 5 到 25 的整数。词数超过 40、词长超过边长、出现非字母字符都会被点名拦截。
常见误用对照:把中文词或带连字符的词(如 ICE-CREAM)贴进词表。本页不自动拆词或转音,会直接报「第 N 个词不是纯字母」,需要你先拆成 ICE 和 CREAM 两行。
输入范围、边界与精度说明
词长与边长的硬约束:词在任一方向上要占 词长 格,所以词长大于边长时,200 次重试全部会在起点范围检查处被跳过,必然失败。5×5 配 GALAXY(6) 就是这种情况,本页会报「GALAXY 有 6 个字母,超过边长 5,放不下」。
占用率只是软约束:总字母超过面积 40% 时本页照常生成,只在结果上方提示占用率。实测 12×12 装到 90 个字母(62.5%)仍能全部放下,但 145 个字母(100.7%)时 29 个词有 3 个放不下,240 个字母(166.7%)时 48 个词只能放 35 个——超面积的部分物理上不可能放下。
重试次数为什么是 200:每次尝试是「随机方向 × 随机起点」的一次抽样,8 方向时成功概率高,200 次在常规占用率下足以覆盖;再往上加只会让高占用率时页面明显变慢,而那些场景本来就该加大边长。
去重与大小写:词表先整体转大写再查重,ORION 和 orion 会被当成同一个词,重复项只保留一个;最后按「字母大小写」选项统一输出大写或小写,答案键与网格用同一套字母。
放不下的词不会被静默丢弃:结果区上方会列出词名和原因(超边长或 200 次尝试失败),网格照常输出其余词,答案键只包含实际放下的词,两边一定对得上。
常见误用的正确解释:同一份词表两次生成网格不同,不是不稳定——方向、起点和填充字母都来自 Math.random(),每次都是一次新的随机抽样;答案键会随当次输出同步更新,批改时以当次答案键为准。
常见问题
能放中文词吗?
不能。找词方阵的格子是单个拉丁字母,中文词在 26 字母体系里没有对应格。可以把中文词写成拼音或英文再填入,本页的校验只接受 A~Z。
为什么有的词放不下了?
两种情况:词长超过边长(必然失败),或者占用率太高导致 200 次随机尝试都没找到空位。前者加大边长,后者减词或加大边长,报错里都会写明是哪个词。
填充字母会不会不小心拼出别的词?
可能。填充是逐格独立均匀抽取,不查词典,偶然出现短词无法完全避免,这也是纸面找词游戏的常态。介意的话可以点一次「生成方阵」换一批填充字母。
答案键的行列怎么数?
行从上往下数、列从左往右数,都从 1 开始。例如 NEBULA 起点(10,11) 表示第 10 行第 11 列,方向「向上」指行号递减、列号不变。
词表有重复词会怎样?
先统一转大写再查重,重复项只保留一个,并在提示里告诉你去掉了哪个。想要两次出现同一个词没有意义,因为答案键没法区分。
占用率 40% 是硬限制吗?
不是。它只是「几乎不会失败」的经验线,超过时本页照常生成并给出提示。真正的硬限制是总字母不能超过格子数,以及每个词的长度不能超过边长。
4 方向和 8 方向差在哪?
8 方向多两条对角线,藏词自由度翻倍,同样词表更容易放下、玩家也更难找;4 方向只有横竖,适合低龄或快速课堂活动。
词表会被上传吗?
不会。放置算法只用 Math.random() 和二维数组,没有任何网络请求;可以在开发者工具的 Network 面板确认,页面加载后不会再发请求。
相关工具
词搜索生成器只做「词表藏进字母方阵」这一件事,单词相关的其它处理各有专门页面。