球球排序策略:空试管、par 与 12 关实测(2026)
亲自试试 — 立即玩 球球排序
浏览器免费直玩,无需下载或注册。
js/engine.js;12 个冻结开局和对应 par 在 js/levels.js;星级表、提示接线、撤销栈与 ?level= 锚定在 js/main.js(三份都是 Playnesta 原创,MIT)。本场 62 项无头 harness 再次全绿;另写了一个策略探针,导入的是线上同一份模块:对 12 关各重放一条最短解并逐个分类第一步合法走子,分类每关走到一半时的盘面,把同一批开局交给「整摞倒」求解器对比,跑了 3,600 局带种子的随机走子对局,并采样 300 个均匀随机开局。线上三个文件的哈希与本地测量副本相同(engine.js 1d6fb76f…、levels.js d4a027a4…、main.js 6f4cd895…)。游戏页讲怎么点、规则是什么;这一页讲策略:哪个合法走子其实安全、为什么空试管是稀缺资源、星级到底在衡量什么。ball sort/颜色分球只是这族玩法的通用叫法,这里只用于搜索。
1. 先看全库:12 关、192 颗球、三副牌
build 里是 12 个冻结开局,三档各 4 关。运行时不再生成任何关卡,所以整库的形状可以直接数出来:
| 档位 | 关卡 | 颜色数 | 试管数 | 空试管 | 开局满管 | 球数 | par | 开局合法走子 |
|---|---|---|---|---|---|---|---|---|
| 简单 | 1–4 | 3 | 5 | 2 | 3 | 12 | 10–11 | 6 |
| 中等 | 5–8 | 4 | 6 | 2 | 4 | 16 | 14–15 | 8 |
| 困难 | 9–12 | 5 | 6 | 1 | 5 | 20 | 22–27 | 5 |
这张表解释后面几乎全部现象。
每关开局时,所有装了球的试管都是满的(4 颗)。 三档都一样,没有「留半管好操作」这回事。开局真正的工作空间就是那几根空试管:简单和中等各 2 根,困难只有 1 根。
困难档只有 20 颗球,par 却是简单档的两三倍。 这不是难度标签,是算术:只有一根空试管,每颗球要多搬几次才能到位。全库 par 加起来 199 步,对应 192 颗球——简单 42 步/48 颗、中等 57 步/64 颗,都不到一步一球;困难 100 步/80 颗,平均每颗球 1.25 步。
开局是故意打散的。 生成器会丢掉「某根试管一开始就是四颗同色」和「某个颜色已经聚齐」的盘面,所以第一手永远不是白送的胜利。在冻结开局上实测:单管里最长的同色连排是 3,没有任何一根试管装着 4 颗同色。困难的盘面最「平」:80 颗球里只有 4 颗压在自家人身上,简单是 48 颗里 8 颗、中等 64 颗里 9 颗。
2. par 是搜出来的,不是估出来的
每关的 par 由广度优先搜索在「页面实际使用的那套走子」上算出:一次只搬一颗球,落点是空试管或同色球顶,单管不超四颗。第一次搜到解的那一层深度,就是 par。
探针把同一套搜索在线上库里重跑了一遍:12 关的 par 全部对上,最短路径在盘面上重放后也确实解完,且球数守恒不变。更值得看的是每条证明花了多少力气:
| 关卡 | par | 证明它需要展开的状态数 |
|---|---|---|
| 1(简单) | 11 | 1,445 |
| 2(简单) | 10 | 836 |
| 3(简单) | 10 | 1,172 |
| 4(简单) | 11 | 1,663 |
| 5(中等) | 14 | 7,120 |
| 6(中等) | 14 | 5,873 |
| 7(中等) | 14 | 6,339 |
| 8(中等) | 15 | 10,200 |
| 9(困难) | 26 | 119 |
| 10(困难) | 27 | 180 |
| 11(困难) | 25 | 115 |
| 12(困难) | 22 | 199 |
困难档反而展开得最少。原因看清了就懂了:它几乎没给你选择。五根满管加一根空管,第一手只有五个落点,整棵树一路都窄。简单和中等有两根空试管,等于两个停车位,树就散开了:第 8 关 10,200 个状态,第 12 关只有 199 个。
两个实际结论:
- par 高不等于搜索大。 它表示球只能一颗一颗搬,每多搬一次就多一步。par 是长度,不是难度分。
- 提示对这个 build 很便宜。 求解器的状态上限是 250,000;线上关卡里最大的搜索是 10,200,而证明某一手必死最多只用了 7 次展开——在这 12 关上,上限从来没碰到。
3. 一次只搬一颗,改的是题目本身
它和「倒水排序」是同一族盘面:每色四颗、试管容量四、球只能落进空管或同色球顶——只改了一条:一次搬一颗,绝不整摞搬。Playnesta 的《倒水排序》搬的是整摞,《球球排序》不是。
为了量化这条规则值多少,探针把同一批 12 个开局交给「整摞倒」求解器:容量一样、配色规则一样,但一次搬 min(顶部连排数, 空位) 颗。
| 关卡 | 一颗一颗(par) | 整摞倒 | 多出的步数 |
|---|---|---|---|
| 1 | 11 | 9 | +2 |
| 2 | 10 | 8 | +2 |
| 3 | 10 | 7 | +3 |
| 4 | 11 | 10 | +1 |
| 5 | 14 | 12 | +2 |
| 6 | 14 | 13 | +1 |
| 7 | 14 | 9 | +5 |
| 8 | 15 | 12 | +3 |
| 9 | 26 | 17 | +9 |
| 10 | 27 | 17 | +10 |
| 11 | 25 | 14 | +11 |
| 12 | 22 | 16 | +6 |
同样 12 个开局,一颗一颗搬要多花 55 步——占全部 199 步的 27.6%——而且差距随档位放大:每关 1.08 到 1.79 倍,困难档比同一盘面的倒水版长了接近 1.5–1.8 倍。
原因就写在开局里。倒水玩法只有当同色球真的挨在一起时,整摞才值钱。简单档 16.7% 的相邻球对同色,中等 14.1%,困难只有 5.0%——困难档里几乎每颗球都压在别的颜色上,「倒整摞」通常也就等于倒一颗。
这条规则真正买到的是自由:你可以故意拆摞。 一根试管顶上两颗蓝球,你可以揭一颗下来寄存,用剩下的管子干别的事。倒水玩法里这一手不存在,这里它合法而且常常是必需的。也正因为如此,困难档 20 颗球却有 22–27 的 par:解法不是「每颗球归位一次」,而是「把盘面反复重排,直到颜色对得上」。
4. 空试管才是稀缺资源
数一下困难档的空间:五根试管各装四颗、凑满五色,剩下一根空着。这就是全部工作空间。于是开局只有五个合法走子,而且五个都是「把某根管子顶上的球放进同一根空管」。
这一条就重排了策略:
- 空试管是一次性预算。 你在里面寄一颗球,它就废到你把球搬出来为止;而搬出来的前提是出现同色球顶或另一根空管。困难档没有第二根空管。
- 第一步错经常是致命的。 困难档 20 个合法首手里,有 7 个(35.0%)直接把盘面推进无解。简单和中等一个都没有:24 个里 0 个、32 个里 0 个;不过简单有 4 手、中等有 10 手比 par 慢。
第二根空试管也不是小恩小惠。探针对每种形状各发了 200 个均匀随机盘面并逐个求解:
| 形状 | 可解 |
|---|---|
| 3 色,2 空管 | 200/200 |
| 4 色,2 空管 | 200/200 |
| 5 色,2 空管 | 200/200 |
| 5 色,1 空管 | 51/200(25.5%) |
五色只给一根备用管,四个随机盘面里就有三个还没碰就已经死了。生成器会把它们丢掉:为了凑出上线的 4 个困难关,它洗了 45 次牌,其中 37 次直接无解。这就是为什么困难档和中档手感完全不同:不只是更长,几乎是条走廊。
实践上:困难档里,第一步决定的东西比它展示的多。 别拿空试管去「看看盘面长什么样」,拿它去搬一颗你马上要叠上去的球。
5. 实测出来的开局规则:走「已经在两根管顶上」的颜色
空试管既然是稀缺资源,问题就变成哪颗球配得上它。探针检验了最直觉的候选——那个已经同时是两根不同试管顶球的颜色——并和其它所有首手做对比。
先看四个上线的困难关,手工核对。它们开局都是五根满管各顶着一个颜色,而四关里能赢的开局都是同一个模式:那个颜色出现在两根试管的顶上。
| 关卡 | 五根满管的顶球 | 重复的顶色 | 最优首手 | 致命首手 |
|---|---|---|---|---|
| 9 | 4, 2, 2, 4, 0 | 颜色 2(第 2、3 管) | 2→6、3→6 | 1→6、4→6、5→6 |
| 10 | 0, 3, 1, 2, 1 | 颜色 1(第 3、5 管) | 3→6、5→6 | 无(3 手偏慢) |
| 11 | 3, 2, 3, 1, 4 | 颜色 3(第 1、3 管) | 1→6、3→6 | 2→6、4→6、5→6 |
| 12 | 3, 3, 0, 2, 1 | 颜色 3(第 1、2 管) | 1→6、2→6 | 4→6 |
四个样本算不上证据,所以探针又发了 150 个均匀随机、可解的五色单空管盘面,按「这颗球的颜色是否在两根以上试管顶上」把每个合法首手分类:
| 首手 | 个数 | 致命 | 在最短路径上 |
|---|---|---|---|
| 顶色重复的颜色 | 355 | 63(17.7%) | 278(78.3%) |
| 只在一根管顶上 | 395 | 219(55.4%) | 30(7.6%) |
差距很大,方向和手工核对一致:89.3% 的可解困难盘面至少存在一个顶色重复的颜色,150 个采样里有 126 个存在「安全」的这种首手。
为什么成立,用盘面语言说:一个顶在两管上的颜色可以不把盘面搞坏地聚起来——先一颗进空管,再把另一管那颗叠上去,管子保住这个颜色。只顶在一根管上的颜色必须先寄存,而困难档唯一能寄存的地方,就是你后面要用的那根空管。
中档形状(4 色 2 空管)里同一条规则仍然有效,但没什么可输的:顶色重复的走子 88.5% 最优,单管顶色只有 61.8%;而且没有一个首手是致命的——624 个重复顶色、576 个单管顶色,全都是活的,因为第二根空管把错误吸收掉了。
一句提醒:这是关于第一步、在开局位置量出来的规则,不是算法,对第 3 到第 10 步没有发言权。
6. 致命的一手长什么样
「合法」和「安全」在这游戏里是两个词,一个具体盘面就能说明差别。
第 12 关开局如下(从下到上排,第 6 管为空):
1: 1 2 4 3 2: 2 3 2 3 3: 1 3 1 0
4: 4 0 4 2 5: 4 0 0 1 6: (空)
五个合法首手,全部落向第 6 管。其中四个是最优或偏慢但能活,有一个不行:把第 4 管的 2 搬进空管,盘面就变成
1: 1 2 4 3 2: 2 3 2 3 3: 1 3 1 0
4: 4 0 4 5: 4 0 0 1 6: 2
此时合法走子是零。每根满管顶上都是别处不再出现的颜色,唯一的空管里躺着那颗无处可去的 2。这关在第一手就结束了——不是「很难通关」,而是字面意义上什么都做不了,除非按撤销。
第 9 关展示的是更常见的温和版本:
1: 3 1 2 4 2: 0 4 1 2 3: 0 3 0 2
4: 1 4 3 4 5: 3 2 1 0 6: (空)
把第 1 管的 4 搬进第 6 管,盘面仍有合法走子,但没有一个通得向胜利:搜索在展开 7 个状态后证明它已死,页面提示也会直说(「No solution from here — undo a move.」)。改搬第 2 管或第 3 管顶上的 2,盘面就落在最短路径上——距离 26 步的 par 还剩 25 步。
这就是「多想一步」的全部理由:不是因为页面严,而是因为困难档 35% 的合法开局是陷阱,只是长得像走子。
7. 走子不总能倒回去——所以撤销是快照
大多数滑块类谜题里,走错一步可以反着走回来。这里经常不行:一颗从 A 管出来的球,只有当 A 现在空了、或者 A 的新顶球同色时,才能回到 A。
探针在每关最短解的中段盘面上量了这件事,那正是最需要答案的位置:
- 这些盘面上 37 个合法走子里,只有 18 个(48.6%) 能用「反着走同一手」撤销。
- 第一根被清空的试管通常就是痛点:出来的那颗正是会回去的那颗,空着的时候什么颜色都收,所以反向走成立;可一旦你往里放了别的东西,原来那颗就没地方回了。
build 的答案是快照式撤销,而不是反向走子:每搬一颗球,整盘压进栈;撤销弹出一张快照并把步数减一。撤销不花钱——不消耗提示、不影响星级表、任何关卡都不封锁。栈没有固定深度,你可以一路退回开局位置。
由此得出两个习惯:
- 猜之前先撤销。 探针里随机走子对局有 30.2% 最后停在无解盘面;撤销就是「这样收场」和「丢掉一关」之间的全部差别。
- 别指望「反正能放回去」。 一半的时候放不回去,而你留下的盘面是个新问题,不是旧问题。
8. 越往后,盘面越窄
沿着每关最短解数「每一步有几个合法走子」,能看到决策负担怎么变:
- 简单和中等的路径上,多数步有 3 到 8 个合法走子;四条中等路径里只有 1 个位置(第 6 关)恰好只有一手可走,简单档一个都没有。
- 困难的路径只有 1 到 5 个,中位数 2。四条困难解里,100 个位置中有 27 个只剩一手可走——光第 11 关就占了 9 个。
所以困难档不是「选择更多、更难挑」,而是条走廊:开局从五个里挑,走几步之后常常是从一两个里挑。困难解的中段几乎是强制性的:
| 关卡 | 中段可走几手 | 其中致命 |
|---|---|---|
| 9 | 2 | 0 |
| 10 | 2 | 0 |
| 11 | 2 | 0 |
| 12 | 1 | 0 |
这次采样里,这些中段位置的 37 个合法走子一个都不致命。危险都活在两端:开局时某根管子还塞满杂色;以及某颗球必须决定「它的颜色以后住哪」的那一刻。
实践上:把注意力花在开局。 尾声基本是算术(数这个颜色还剩几颗、数还有几个空位),而且页面允许你走;开局才是关卡被赢下或丢掉的地方。
9. 星级衡量的是最优性,不是速度
这个 build 没有计时器。星级表只读一个数字——你的步数——去比 par:
| 步数 | 星级 |
|---|---|
| 正好 par | ★★★ |
| par + 1 到 par + 5 | ★★☆ |
| 其它 | ★☆☆ |
因为 par 是最小值,「步数 ≤ par」只可能是「步数 = par」。所以三星的含义是「你找到了一条最短解」,不是「你手快」。两星区允许白扔五步,第六步就把第二颗星扔掉了。
提示不碰这张表。胜利卡片会印出你用了几个提示(「3 步 · par 10 · 1 个提示」),提示计数也会随纪录一起存,但 starsFor(moves, par) 从不读它。只要步数压在 par 上,提示可以一直点,三星照拿。
「直觉打法」值多少,测过:
- 贪心规则——能补满一根管就先补满,否则落在同色球顶,否则用空管——12 关只过 2 关(第 2 关 12 步、par 10;第 6 关 17 步、par 14)。其余十关在三倍 par 的预算内卡死。规则不算错,只是不够用。
- 随机走子(带种子)3,600 局解出 361 局(10.0%):简单 13.8%、中等 8.4%、困难 7.9%。另外 30.2% 的对局最后停在无解盘面——困难档是 86.9%。
所以星级确实在衡量你有没有真的解出来;一个中等水平的启发式能让你一直点下去,却永远拿不到第三颗星。
10. 操作、URL 锚定与页面到底存了什么
- 点试管抬起顶球,再点试管放下。再点同一根管会把球放回去,不消耗步数。管子满了或颜色不同会被拒绝:短促抖一下,状态栏给一行原因。
- 键盘:
1–9选管,U撤销,H提示,R重开,方向键换关。 ?level=钉住起点:1 到 12 的数字,或档位名(?level=hard从第 9 关开始)。认不出的值回落到第 1 关。没有种子——开局是冻结的,同一个 URL 永远是同一个盘面。- 纪录是每关的最好步数,存在本机浏览器的
pn.ball-sort.best.v1里。什么都不会往外发;清站点数据就把纪录清了。 - 埋点桥发
game_load、首次与盘面交互时的game_start、六十秒后的game_60s、玩过之后换关时的game_restart,以及解完一关时的game_win。没有game_lose——死盘不是输,是你能撤销回来的位置。
11. 一分钟检查表
- 动手前先数空试管。两根=可以试;一根=第一步就是整关。
- 看顶球。一个颜色顶在两根管上,那是自然的开局;只顶在一根上,通常是「寄存起来的问题」。
- 别拿最后一根空管「先看看」。要寄就寄你马上会叠上去的那颗。
- 困难档每手之前问一句:我清空的这根管,之后能收什么颜色?答案是「什么都不能」,那你多半刚把关卡玩死。
- 提示说无解就撤销,别去找一个不存在的高招。
- 一边走一边盯步数和 par:par+5 是两星的最后机会,par 是三星的唯一路径。
- 只剩一手可走时就走,然后重新数;强制段通常在下个颜色凑齐前几步就结束了。
FAQ
球球排序怎么玩?
点一根试管抬起顶上的球,再点目标试管放下。球只能落进空试管,或落在同色球上面;满了的试管和不同颜色都会被拒绝。所有试管要么空着、要么装满四颗同色,这关才算过。这个 build 一共 12 关:简单(3 色、两根备用管)、中等(4 色、两根备用管)、困难(5 色、一根备用管)。
par 是什么,怎么来的?
par 是这关最少要几步合法走子才能解开,关卡上线前用广度优先搜索在「页面实际使用的走子集合」上算出。它不是估计值也不是设计目标:探针在冻结库上重跑了同一套搜索,12 个 par 全部对上。具体是 11、10、10、11(简单)、14、14、14、15(中等)、26、27、25、22(困难)——192 颗球共 199 步。
为什么球球排序比倒水排序难?
因为一次只搬一颗,而不是整摞同色全搬。同样的 12 个开局改用倒水走法,步数会少 55 步(占全部的 27.6%),困难档的「一颗一颗」版本长 1.5–1.8 倍。策略也跟着变:你可以故意拆摞去腾出一根试管,这在倒水玩法里没有对应动作。困难开局里只有 5% 的相邻球对同色,所以「整摞」通常就是一颗。
第一步走什么最好?
走那个已经同时是两根不同试管顶球的颜色:一颗进空管,再把另一根顶上那颗叠上去。在 150 个随机的、可解的五色单空管盘面上,顶色重复的走子致命率 17.7%、单管顶色 55.4%;最优率 78.3% 对 7.6%。四个上线的困难关也都是这个开法。这条规则只针对第一步,不是整关的算法。
为什么走了一手就无解了?
因为困难档 20 个合法首手里有 7 个会留下无解盘面。第 12 关是最清楚的例子:把第 4 管的 2 搬进空管,盘面合法走子直接变成零——剩下的顶球一个都无处落脚。游戏没坏:这游戏里「合法」和「能活」是两件事,撤销就是 build 给你的补救方式。
提示会影响星级吗?
不会。starsFor(moves, par) 只读步数和 par:正好 par 三星,par+1 到 par+5 两星,其余一星。提示会被计数并印在胜利卡上(「1 个提示」),无解提示也算一次,但星级表从不看这个计数。
「No solution from here — undo a move」是什么意思?
意思是求解器把从你当前盘面能到达的整个空间都搜完了,也找不到通往解法的路径,所以提示拒绝编一个出来。这是真的死路,不是提示次数用完:在线上关卡里,解一关需要的最大搜索是 10,200 个状态,证明一个盘面死掉最多只用 7 个,都远低于求解器 250,000 的上限。用撤销。
能撤销任意一手吗?
能撤任意多步:撤销弹出一张完整盘面快照并把步数减一,不要钱、没有上限。你不能指望的是反着走同一手来撤回:在 12 条最短解的中段位置,37 个合法走子里只有 18 个能这样反走,因为一颗球只有在旧试管空了、或旧试管新顶球同色时才能回去。
困难档到底有多难?
困难是六根试管 20 颗球、只有一根空管,par 22–27,最短解上 100 个位置里有 27 个只剩一手可走。随机走子只解出 7.9% 的困难局,86.9% 最后无解。四个随机的五色单空管盘面里有三个一开局就是死的;生成器洗了 45 次才找到上线的四个。它更像换了个品类,不只是难度档。
有计时器吗?还会有新关卡吗?
没有计时器:唯一被计分的数字是你的步数比 par,再加胜利卡上的提示次数。最好步数只存在本机浏览器里。库冻结在 12 关,页面不可能生成第 13 关;想要同族更多,Playnesta 的 倒水排序用的是整摞倒,而 数织拼图是同一套「先证明再落笔」的推理练习。