咸鱼之王 · 十殿星级挑战组队优化器
背景
咸鱼之王的「十殿星级挑战」是公会合作玩法。每位玩家完成十殿挑战后获得一个星级分数(0-24星,最高24星),公会成员需要组成 5人小队,小队总星级达到特定阈值可在「功德簿」中领取对应档位的奖励。档位越高,奖励越丰厚。
功德簿奖励档位(从高到低)
| 档位 | 所需总星级 |
|---|---|
| 第一档 | ≥ 120 星 |
| 第二档 | ≥ 105 星 |
| 第三档 | ≥ 90 星 |
| 第四档 | ≥ 75 星 |
| 第五档 | ≥ 60 星 |
| 第六档 | ≥ 50 星 |
| 第七档 | ≥ 40 星 |
| 第八档 | ≥ 30 星 |
如果用户提供了不同的档位阈值,以用户提供的为准。
工作流程
第一步:解析接龙名单
用户通常会直接粘贴微信群里的接龙名单。格式参差不齐,你需要从中提取每位玩家的 名称 和 星级数。
常见格式示例:
1. 老四 16
2. 十二 20
3. 东君 14
4. 沉稳的中年男士-葛佳佳 16
5. 💫皮皮皮 12
6. 话唠 还没打
7. 18号。2
解析要点:
- 每行开头的
1.、2.等是接龙编号,不是星级 - 行尾的数字是星级——这是最关键的提取目标
- 名字可能包含 emoji、特殊符号、中英文混合、破折号等
- 名字里可能包含数字(如「18号」),要和行尾的星级区分开——行尾最后一个独立数字才是星级
- 标记为「还没打」「未完成」「未参加」等的玩家,暂时排除在分组之外
- 如果某行完全无法解析出星级,标记为存疑,让用户确认
解析完成后,先列表确认:
📋 已解析 X 位玩家:
| # | 名称 | 星级 |
|---|------|------|
| 1 | 老四 | 16 |
| 2 | 十二 | 20 |
| ... | ... | ... |
⚠️ 以下玩家暂不参与分组:
- 话唠(还没打)
请确认是否正确?
等用户确认后再进入分组环节。如果用户没有异议或催促分组,可以直接进入下一步。
第二步:计算最优分组
使用本 skill 自带的 Python 脚本完成精确计算:
python3 SKILL_DIR/scripts/optimizer.py INPUT_FILE
其中 SKILL_DIR 是本 skill 所在目录。输入文件为 JSON 格式:
{
"players": [
{"name": "老四", "stars": 16},
{"name": "十二", "stars": 20}
],
"tiers": [120, 105, 90, 75, 60, 50, 40, 30],
"max_stars_per_player": 24
}
脚本会输出 JSON 结果,包含 多个分组方案(推荐方案 + 替代方案)和升档建议。每个方案都有完整的队伍列表、汇总和升档策略。
如果无法运行脚本(比如没有 Python 环境),按以下算法手动分组。但组合计算容易出错,优先使用脚本。
全局最优分组算法
核心目标:让所有队伍的档位总价值最大化。不是简单地从高到低贪心,而是统筹考虑所有队伍的分配。
算法流程(递归搜索 + 记忆化):
- 对当前剩余玩家,依次尝试组建每个档位(90→75→60→50→40→30)的队伍
- 对于每个档位,找出"刚好达标"的5人组合(总星级最小的那个满足阈值的组合)——这样做是为了把高星玩家省给后续队伍
- 假设选了这个组合,递归求解剩余玩家的最优分法
- 比较所有档位选择的结果,取总价值最高的方案
为什么用"刚好达标"的组合? 高星玩家是稀缺资源。如果一支90星队用了 95 星的组合,那多出的 5 星就浪费了——它们本可以帮助另一支队伍跨过更高的档位线。所以每支队伍都用恰好满足阈值的最小组合,把多余的战力留给其他队伍。
和纯贪心的区别: 纯贪心会无脑地先组尽可能多的90星队。但有时候少组一支90星队,把玩家分散到75和60,反而能让总收益更高。全局搜索会自动找到这个平衡点。
第三步:输出多方案供选择
脚本会自动生成推荐方案和若干替代方案。每个方案要完整展示,方便用户对比选择。
格式参考:
# 🎯 分组方案
---
## 方案一(推荐) — 总档位价值 255
### 第 1 队 — ⭐ 90星档(总计 92 星)
| 玩家 | 星级 |
|------|------|
| 百度亭-老九 | 20 |
| 十二 | 20 |
| 话痨 | 19 |
| 娃哈哈 | 19 |
| 东君 | 14 |
### 第 2 队 — ⭐ 75星档(总计 78 星)
| 玩家 | 星级 |
|------|------|
| 混子 | 19 |
| 19号 | 18 |
| 清浅 | 17 |
| 老四 | 16 |
| MrH | 6 |
### ⚠️ 未分组 (3人)
XXX(9), YYY(4), ZZZ(2)
📊 汇总:2队 | 90星×1, 75星×1 | 15人已分组 | 3人待定
---
## 方案二 — 总档位价值 240
(类似格式展示另一种分法)
---
第四步:外部引援策略建议
脚本会为每个方案自动计算引援建议(upgrade_hints),核心问题是:从外部引入多少人、每人需要多少星,可以让队伍升到更高档位?
实际操作中 105 和 120 星档很难达到,重点关注这些现实可达的提升路径:
- 75→90:中坚队伍的关键跳跃
- 60→75:让更多队伍拿到有价值的奖励
- <60→60:帮助未分组玩家至少达到60星基线
1. 已组队伍的引援升档
脚本为每支队伍计算了两种外部引援方式:
引入1人替换最弱队员(recruit_1_options):列出引入1名外部玩家替换队内最弱成员后,可达到的各档位及所需最低星级。
第 2 队(75星档,总计75星)最弱队员:喷火龙(4星)
- 引入 ≥19星 玩家替换喷火龙 → 升至 90星档
引入2人替换最弱2人(recruit_2_options):当换1人不够时,尝试替换队内最弱的2名成员。
第 1 队(90星档,总计90星)
- 引入2人(人均≥23星) 替换 皮皮皮(12)+混子(19) → 升至 105星档
2. 未分组玩家的引援组队
脚本会列出:为未分组玩家从外部引入多少人凑满5人队,以及达到各档位分别需要多少总星级。
未分组 3 人(东君14 + 安安10 + 18号2 = 26星),还需从外部引入 2人:
目标档位 需引入总星数 人均最低星级 30星档 4星 2星/人 40星档 14星 7星/人 50星档 24星 12星/人 60星档 34星 17星/人
如果引入更多外部人员,还能组多支队(extra_team_options):
引入 7 人(人均≥5星) → 可组 2 支30星档队伍
3. 引援性价比排名
脚本输出 global_recruit_summary,按"每引入1人带来的档位价值提升"从高到低排序,帮用户快速决策优先引谁:
- 引入2人(人均≥17星)与未分组玩家组新队 → 新增60星档(+60价值)
- 第2队引入1人(≥19星)替喷火龙 → 75升90星档(+15价值)
- 第3队引入1人(≥21星)替MrH → 60升75星档(+15价值)
4. 未打玩家影响预估
如果接龙名单中有人标注「还没打」,分析他们打完后的影响:
- 打完后可以直接参与分组重新计算
- 如果能打出 X 星以上,可以替换某队的低星玩家实现升档
- 或者和未分组玩家一起组成新的队伍
注意事项
- 玩家数量通常不是5的倍数,总会有少量玩家分不到组,这是正常的
- 接龙名单可能会多次更新(新打完、改星级),支持增量调整——用户粘贴新名单时直接重新计算即可
- 单个玩家最高24星(十殿每殿最高可得若干星,总计上限24星)
- 公会人数一般在20-50人之间,穷举5人组合的计算量完全可控
- 脚本会自动输出多个分组方案(推荐 + 替代),以及每个方案的升档建议
- 用户可以根据自己对公会成员提升潜力的判断,选择最合适的方案