import fs from 'node:fs';const old=JSON.parse(fs.readFileSync('reports/old-scores.json')),pack=JSON.parse(fs.readFileSync('levels.json')),notes=JSON.parse(fs.readFileSync('design.json')),anchors=JSON.parse(fs.readFileSync('reports/player-anchors.json'));const current=notes.map(n=>({order:n.level.order,position:Math.ceil(n.level.order/10)+'-'+((n.level.order-1)%10+1),title:n.level.title,geometry:n.level.geometry,features:n.level.features,nodes:n.level.cells.length,...n.objective,oldOrder:n.oldOrder||null,playerBand:n.playerBand||null,estimatedBand:n.level.estimatedBand,source:n.source,tutorial:n.level.tutorial||null}));const previous=old.rows.map(n=>({...n,order:n.oldOrder,position:n.oldPosition,nodes:n.nodeCount,playerBand:anchors.needHint.includes(n.oldOrder)?'需要提示':anchors.moderate.includes(n.oldOrder)?'略难':anchors.likedUnknownStart.includes(n.oldOrder)?'喜欢的未知起点':null}));const series=(rows,col)=>`
采用相同、可复现的推理模型评估新旧关卡:先应用共边、数字、颜色、奇偶、方向和门规则,再排除断区、孤格、额外终点及数字距离不足;只对剩余错误路线向后探查最多8步,单分支最多12000状态。记录真实决策点、非局部分支、错误可存活深度、探查量及连续被迫步数。
分数=2log2(1+格数/3)+5log2(1+决策点)+4log2(1+存活≥3步的错分支)+6×平均错路深度+3log2(1+探查状态/10)−5×被迫步占比,四舍五入并限制在0–100。被8步/状态预算截断的深度是下界;原始指标同时保留,不以随机搜索顺序或仅格数评分。
它不是玩家通关率,也不能保证“大部分玩家都会卡住”。本次用户反馈已证明个体差异:旧144关代理36分但需要提示,旧149关65分却略难。因此已试玩标签单独保存,优先于代理分;新关分档均标作候选,不伪称实测。
旧版
${series(previous,'#a3a5b5')}修订版;橙色为首次机制教学
${series(current,'#6558f5')}| 关段 | 旧版均分 | 修订均分 |
|---|
需提示(想很久、点击指路才流畅):8-3/73、8-6/76、8-7/77、8-10/80、9-5/85、9-8/88、15-4/144。略难:15-9/149、16-8/158。喜欢的无起点:12-1/111、14-6/136。
原73→新38,76→48,77→58,85→78;111→65,136→105;149→109,158→119。旧80、88、144的六边组合主题通过宽盘面新关保留,原条带几何不再使用。
100关后:80个略难候选/个人略难参照,17个深想候选,3个未知起点;未知起点替代挑战名额。全200关无起点共5个,相隔至少20关。
| 关 | 标题/玩法 | 代理分 | 格 | 决策 | 非局部分支 | 错路深度 | 标签/来源 |
|---|