使用方法
- 「架上字母」填你手上有的牌,示例值是 STARE。只接受 A–Z 的英文字母,
?表示一张空白牌,大小写随意,空格、逗号、分号、连字符按分隔符忽略。 - 「额外空白牌」填 0~2 的整数,示例值是 1。架上字母里写的
?会一并计入,两处加起来最多 2 张——标准 Scrabble 袋里本来就只有 2 张空白牌。 - 「最短词长」「最长词长」填 2~15 的整数,示例值是 2 和 7,且最长不能小于最短。想找能一气用掉整手的词,把这两个值都设成「字母数 + 空白牌数」即可。
- 「展示条数」控制结果区列出多少行,示例值是 20,范围 5~200;它只影响显示条数,不影响候选总数。
- 点「查词」(或在任意输入框里按 Enter),结果区按真实得分从高到低列出候选词,每行带分值、词长和用掉的空白牌张数;分数相同时词长长的在前,再相同按字典序。
拼字游戏词查询能解决什么问题
一是把「能不能拼」和「值多少分」合成一次计算。只看字母能不能拼出某个词,得到的只是一堆同字母不同序的串;真正决定该下哪一手的是分值。拼字游戏词查询先做子集判定筛出候选,再逐字母查分值表求和,最后排序——你看到的第一行就是当前手牌的最高分落法。
二是让空白牌的真实代价暴露出来。空白牌可以代任意字母,但落子时计 0 分,不是按它所代字母的面值计分。手上 STARE 加一张空白牌时,stares 只值 5 分(S+T+A+R+E 各 1 分,多出来的那个 S 由空白牌顶上、0 分),而不用空白牌的 rates 同样是 5 分——多铺一个字母并没有多得分,这一点靠心算最容易漏。
三是两字母词的策略价值有了量化依据。ZA 的面值是 Z10+A1=11 分,区区两个字母抵得上一个七字母长词;但如果你是用空白牌代 Z 拼出来的,实得只有 1 分,一次就蒸发 10 分。勾选「只看含 J / Q / X / Z 的词」可以把这类高值短词单独挑出来。
四是把「用满全部牌」单独拎成一档。勾选「只用满全部牌」后,只有词长正好等于「字母数 + 空白牌数」的词会留下,这正是标准规则里触发额外奖励的那一类落法;统计卡里的「用满全部牌」一栏直接给出这一档有多少个候选。
本页不做这些事:不算棋盘上的双重字母 / 三重字母 / 双重单词 / 三重单词加成格,不自动加「用满七张牌」的额外奖励分(需要知道落子位置和赛制才算得准),不判断某个词在正式比赛词库里是否被允许,也不处理中文。
原理:字母分值表、空白牌零分与多重集筛选
具体算法是「多重集子集判定 + 逐字母查表求和」两步。第一步判断词 w 能不能由手牌拼出:把 w 和手牌都数成字母计数字典,若 w 里每种字母的个数都不超过手牌里的个数,差额全部交给空白牌填补,填不满就淘汰。第二步算分:按 w 的字母顺序逐枚消耗手牌计数,消耗得到就累加该字母面值,消耗不到就认定这张位置由空白牌顶上、加 0。字母面值不存字典,直接用 String.prototype.charCodeAt(0) - 65 当下标去查长度为 26 的数组,省掉 26 次哈希。
空白牌为什么记 0 分而不是按所代字母记分?这是规则本身的规定,也是本页和「肉眼估分」分歧最大的地方。若按所代字母记分,stares 会被算成 6 分而 rates 是 5 分,排序就会把需要用掉空白牌的词顶到前面;实际规则下两者都是 5 分,而消耗掉唯一的空白牌去换一个 0 分位置通常是亏的——把这张牌留到下一手去配一个 X 或 Q 更值钱。
分值表遵循北美版 Scrabble 的字母分布。26 个字母各取一张,面值之和是 87;标准袋共 100 张(98 张字母牌 + 2 张空白牌),字母牌面值总和是 187。分档是这样的:1 分 10 个(A E I O U L N S T R)、2 分 2 个(D G)、3 分 4 个(B C M P)、4 分 5 个(F H V W Y)、5 分 1 个(K)、8 分 2 个(J X)、10 分 2 个(Q Z)。分值几乎完全反比于字母在英文里的出现频率——E 有 12 张却只值 1 分,Q 和 Z 各只有 1 张却值 10 分。
输入到输出经过四道转换。① 架上字母统一 toUpperCase(),剔除分隔符,非字母字符单独收集用于报错;② 数成计数字典;③ 对词库逐条做子集判定与求和,得到「词 / 真实分 / 用掉的空白牌数」三元组;④ 三级排序——分值降序、词长降序、字典序升序。整条内核只有两张 26 位数组:一张单张面值、一张袋中张数,其余全是计数与比较。
边界与阈值都是硬数字。架上字母 1~15 个,空白牌 0~2 张,词长 2~15,展示条数 5~200。15 这个上限不是随便定的:标准架上只有 7 张,放宽到 15 是为了兼容把整手牌连着补牌一起粘进来的场景,再往上多半是误粘了整段文本。词库里最长的是 7 字母词,所以把最长词长设成 8 以上时,多出来的档位不会有候选。
最常见的误用是把本页的分值当成最终落子得分。这里给的只是字母面值之和,不含任何棋盘加成。同一个 caster 落在空处是 5 分,压到一个三重单词格上就变成 15 分;本页不知道你的落子位置,所以也不会去猜。
完整示例(数值仅作演示)
打开拼字游戏词查询时的默认条件与下面完全一致:架上 STARE、1 张空白牌、词长 2~7、展示 20 条、两个筛选都不勾。
- 手牌一共 6 张:S、T、A、R、E 各 1 分,加 1 张 0 分的空白牌,所以任何词的得分上限都是 5 分;
- 在 674 条词库里命中 215 条候选,其中 36 条不需要动用空白牌,其余 179 条都要靠空白牌补一个字母;
- 最高真实分是 5 分,并列的有 14 个 6 字母词——caster、caters、raters、reacts、seater、stared、starer、stares、streak、taster、teaser、traces、trades、treads,全部用掉 1 张空白牌;
- 按词长拆开:2 字母 60 条、3 字母 97 条、4 字母 22 条、5 字母 22 条、6 字母 14 条;
rates/stare/tears三个 5 字母词同样 5 分但不消耗空白牌——在真实对局里它们通常比上面那 14 个 6 字母词更划算,因为空白牌留住了。
再看空白牌的代价:把「额外空白牌」改成 0,候选从 215 条掉到 36 条,stares、streak 这类全都没了,但最高分仍然是 5 分(rates、stare、tears)。也就是说这一手多给的那张空白牌只换来 179 条新候选,一分都没多挣。
输入范围与对照表
下表是完整的 26 字母分值表(默认列出 A–L,点「加载更多行」补齐 M–Z)。「该字母总分」= 单张面值 × 袋中张数,26 行相加正好是 187,也就是一整袋字母牌的面值总和;再加 2 张 0 分的空白牌就是标准的 100 张。
| 字母 | 单张面值 | 袋中张数 | 该字母总分 |
|---|---|---|---|
| A | 1 | 9 | 9 |
| B | 3 | 2 | 6 |
| C | 3 | 2 | 6 |
| D | 2 | 4 | 8 |
| E | 1 | 12 | 12 |
| F | 4 | 2 | 8 |
| G | 2 | 3 | 6 |
| H | 4 | 2 | 8 |
| I | 1 | 9 | 9 |
| J | 8 | 1 | 8 |
| K | 5 | 1 | 5 |
| L | 1 | 4 | 4 |
下面这张表专门说明两字母词和空白牌的关系——「全用架上牌」是两张牌都在手上的得分,「用空白牌代高值字母」是那枚高值字母由空白牌顶替后的实得。
| 两字母词 | 面值构成 | 全用架上牌 | 用空白牌代高值字母 |
|---|---|---|---|
| ZA | Z10 + A1 | 11 | 1 |
| QI | Q10 + I1 | 11 | 1 |
| JO | J8 + O1 | 9 | 1 |
| XU | X8 + U1 | 9 | 1 |
| AX | A1 + X8 | 9 | 1 |
| OX | O1 + X8 | 9 | 1 |
| EX | E1 + X8 | 9 | 1 |
| KA | K5 + A1 | 6 | 1 |
输入范围、边界与精度说明
- 空白牌一律计 0 分。这是规则而不是近似:空白牌代的是「字母」,落子计分只认牌面本身。所以结果区里带「(空白 N 张)」的行,其分值一定等于「该词长度减去 N」个字母的面值之和。
- 额外奖励分不参与计算。标准规则里一轮用掉架上全部 7 张牌有额外奖励,本页只统计「用满全部牌」的候选条数,不把这笔分加进分值——它取决于落子位置和赛制,硬加反而会给出错误排序。
- 词库规模与筛选口径要讲清楚。内置词库是 674 条去重后的小写英文词,长度 2~7,构成为 2 字母 102 条、3 字母 405 条、4 字母 28 条、5 字母 50 条、6 字母 75 条、7 字母 14 条。它是随页面一起下发的离线演示词库,不是比赛用词表,不含复数、过去式、专有名词与缩写。筛选口径只有一条:词的字母多重集必须是手牌多重集的子集,缺口由空白牌补齐;不做词性、词频、释义或合法性判断。
- 分值只是字母面值之和,不含棋盘加成。双重字母格、三重字母格、双重单词格、三重单词格都要你自己乘上去。拼字游戏词查询不知道落子坐标,也不会去猜。
- 非字母字符会被点名拒绝,不会静默丢掉。数字、汉字、绝大多数标点会收集起来写进报错行并指出是哪一栏;只有空格、逗号、分号、连字符、句点被当作分隔符忽略。
- 词长区间为空时给的是明确报错而不是空列表。最短词长大于最长词长、或者「只用满全部牌」被勾选但词长区间不覆盖「字母数 + 空白牌数」时,都会直接说明原因。
- 结果完全确定,不受刷新影响。整条链路上没有任何随机环节,同一副手牌每次得到的候选数与分值逐位相同。
常见问题
为什么 stares 和 rates 一样都是 5 分?
因为空白牌计 0 分。stares 里有两个 S,手上只有一个,多出来的那个 S 由空白牌顶替,这一位得 0 分,剩下 S T A R E 各 1 分共 5 分;rates 五个字母全在手上,也是 5 分。多铺一个字母没有多得分,还提前消耗了唯一的空白牌。
「用满全部牌」那一栏是多少分?为什么没加奖励分?
它只统计词长正好等于「字母数 + 空白牌数」的候选条数(默认 STARE + 1 空白牌时是 14 条),分值和其它行一样只算字母面值。额外奖励分取决于落子位置和赛制,本页不知道你把词下在哪个格子上,硬加只会给出错误排序。
两字母词真的值那么多分吗?
值,而且效率极高。ZA 是 Z10+A1=11 分,两个字母就抵得上一个七字母长词。代价是它得靠真牌拼:如果用空白牌代 Z,实得只剩 1 分,一次蒸发 10 分。所以拿到 Z、Q、J、X 时,先看看能不能凑出两字母词,通常比留着凑长词划算。
为什么我把最长词长调到 15,候选数没变?
因为内置词库最长只到 7 字母。上限 15 是给「把整手牌一起粘进来」的场景留的余量,不是词库能覆盖的长度。想查更长的词需要换成更大的词库,本页 674 条的规模是刻意压在可离线内联的范围里。
词库里有哪些词?能不能换成比赛词表?
674 条去重后的小写英文词,2~7 字母,以常见短词为主,不含复数、过去式与专有名词。它是随页面一起下发的离线演示词库,不能替换——本页不联网,也不会去加载外部词表。正式对局请对照当届比赛词库复核。
为什么我填了 ? 又填了「额外空白牌」,会报错?
两处加起来超过 2 张就会报错。标准袋里一共只有 2 张空白牌,超过说明填重了:架上字母里的 ? 已经算一张,那一栏就少填一张,或者把 ? 删掉只用数字那一栏。
结果里的分值是最终得分吗?
不是。这只是字母面值之和,不含棋盘上的双重 / 三重字母格和双重 / 三重单词格加成。同一个词压在加成格上会翻倍甚至翻三倍,本页不知道落子位置,所以不做这部分计算。
输入的内容会被上传吗?
不会。整个流程只调用浏览器原生的字符串与数组函数,不发任何网络请求,也不写本地存储;刷新页面后输入回到默认值。可以在开发者工具的 Network 面板里自查。
相关工具
- 押韵词查询:按发音尾韵找词,和按字母计数字典找词是两条完全不同的检索路径。
- 词搜索生成器:把一批词排成找词表格,适合印成课堂或活动用的纸面题目。
- 填字游戏谜题生成器:按网格与提示生成填字题,需要预先给定答案词表。
- Hangman词生成器:按字母与长度随机出题,用来做猜词游戏的题库。
- 在线计分板:多人对局时记分,和本页的字母面值计算正好互补。
- MadLibs生成器:按词性槽位随机填词生成故事,另一种玩单词的方式。
- 实用工具:查看全部实用工具。