@sudoku-tools/classic9
v0.3.0
Published
标准 9x9 数独工具库,提供解析、校验、求解、评分、生成、canonical 化和候选池工具。
Maintainers
Readme
@sudoku-tools/classic9
标准 9x9 数独工具库,提供题面解析、状态标准化、校验、唯一解检查、人类逻辑求解、评分、生成、canonical 等价变换、候选池筛选和命令行工具。
当前版本定位:
- 只支持标准 9x9 数独。
- 核心库不依赖任何 UI 或业务应用框架。
- 难度档位不是核心真理,调用方可以用自己的评分规则和题库分组。
- 生成器和高级题库工具仍按实验能力持续改进。
stable 技巧指的是默认启用、输出结构稳定、并且已经有回归测试覆盖的技巧集合;它不等于“形式化证明已经完成”。
安装
运行环境:
- Node.js
>=20。 - 包类型为 ESM-only,推荐使用
import。
npm install @sudoku-tools/classic9本地开发:
npm run build
npm testAPI 快速示例
import {
canonicalizeBoard,
getPackageInfo,
parsePuzzle,
rate,
validate,
walkthrough,
} from '@sudoku-tools/classic9';
const puzzle = '530070000600195000098000060800060003400803001700020006060000280000419005000080079';
const board = parsePuzzle(puzzle);
console.log(getPackageInfo());
console.log(validate(board).legal);
console.log(walkthrough(board).solved);
console.log(rate(board).score);
console.log(canonicalizeBoard(board).key);更多示例见:
CLI 快速示例
安装为依赖或全局包后,可以通过 sudoku 命令调用:
sudoku validate "530070000600195000098000060800060003400803001700020006060000280000419005000080079"
sudoku version
sudoku solve "534678912672195348198342567859761423426853791713924856961537284287419635345286170" --format text --locale zh-CN
sudoku rate "534678912672195348198342567859761423426853791713924856961537284287419635345286170"
sudoku rate "530070000600195000098000060800060003400803001700020006060000280000419005000080079" --profile extended
sudoku techniques
sudoku schema批量求解和批量评分:
sudoku batch-solve --input puzzles.txt --output solve.jsonl --format jsonl --summary solve-summary.json --usage solve-usage.json
sudoku batch-rate --input puzzles.txt --output rating.csv --format csv --summary rating-summary.json没有安装时,也可以用 npx:
npx -p @sudoku-tools/classic9 sudoku version本地源码构建后也可以直接运行 node dist/src/cli/index.js ...。
源码仓库发布前验证
发布前如果需要对外部 expert 题集做 stable 可解和真解动作审计,可以在源码仓库里运行:
npm run verify:release -- --input /path/to/expert.ts仓库内提供一个最小可复现 smoke 题集,可用于本地和 CI 的 release gate 冒烟检查:
npm run verify:release -- --input tests/fixtures/release-smoke-corpus.json参考技巧也有一个轻量 smoke gate,用于确认首批 direct/chain fixture、显式技巧选项和可回放步骤仍然同步:
npm run audit:referenceaudit:reference、audit:stable 和 verify:release 都是源码仓库开发/发布验证脚本,不会随 npm 包一起发布。它们适合检查参考技巧可达性、expert 全量可解、慢题 top N,以及稳定技巧是否误删真解候选。
生成和候选池
生成一道题:
sudoku generate '{"seed":1,"canonicalize":true,"minimality":"none","constraints":{"clues":{"target":40,"min":35,"max":45}},"budget":{"maxAttempts":1,"maxElapsedMs":3000}}'批量搜索并保存候选池:
sudoku search '{"seed":1,"maxResults":5,"scoreBucketSize":100,"canonicalize":true,"minimality":"none","constraints":{"clues":{"target":40}},"budget":{"maxAttempts":10,"maxElapsedMs":5000}}' --summary-only --write-candidates ./dist/tmp/candidates.json --write-manifest ./dist/tmp/search-manifest.json续跑同一任务:
sudoku search '{"seed":1,"maxResults":5,"scoreBucketSize":100,"canonicalize":true,"minimality":"none","constraints":{"clues":{"target":40}},"budget":{"maxAttempts":10,"maxElapsedMs":5000}}' --summary-only --resume-manifest ./dist/tmp/search-manifest.json --write-candidates ./dist/tmp/candidates.json --append-candidates候选池统计、去重和筛选:
sudoku candidate-stats ./dist/tmp/candidates.json
sudoku dedupe-candidates ./dist/tmp/candidates.json --out ./dist/tmp/candidates-deduped.json
sudoku select ./dist/tmp/candidates-deduped.json ./selection-plan.json --write-selected ./dist/tmp/selected.json --write-rejected ./dist/tmp/rejected.json并行 shard 计划和合并:
sudoku parallel-search-plan request.json --out-dir ./dist/tmp/shards --workers 5 --attempts-per-worker 100
sudoku merge-candidates ./dist/tmp/shards/worker-01-candidates.json ./dist/tmp/shards/worker-02-candidates.json --out ./dist/tmp/candidates-merged.json --dedupe-canonical
sudoku manifest-summary ./dist/tmp/shards/worker-01-manifest.json ./dist/tmp/shards/worker-02-manifest.json当前 stable 技巧
当前 stable 技巧包括:
full-housenaked-singlehidden-singlelocked-candidatesnaked-pairhidden-pairnaked-triplehidden-triplenaked-quadhidden-quadx-wingswordfishfranken-swordfishjellyfishfinned-x-wingfinned-swordfishfinned-jellyfishsashimi-swordfishsashimi-jellyfishnishio-forcing-chainsxy-wingxyz-wingwxyz-wingw-wingchute-remote-pairsalmost-locked-pairalmost-locked-tripleals-xzals-xy-wingfireworkstwinned-xy-chainssue-de-coqdeath-blossomaligned-pair-exclusionexocetdouble-exocetpattern-overlaytridagonssk-loopssimple-coloringx-coloringmulti-colorsthree-d-medusagrouped-x-cyclesgrouped-aicx-chainxy-chainaicaic-exoticskyscraperturbot-fishtwo-string-kiteempty-rectangleunique-rectangleavoidable-rectanglerectangle-eliminationextended-rectanglehidden-unique-rectangleaic-urbug-plus-one
公开库还吸收了 big-wings,但它当前保持 experimental,不会进入默认 stable 顺序。
公开库也包含 direct-pointing、direct-claiming、direct-hidden-pair、direct-hidden-triplet、bidirectional-x-cycle、bidirectional-y-cycle、forcing-x-chain、forcing-chain、aic-als、big-wings、forcing-nets、digit-forcing-chains、cell-forcing-chains、unit-forcing-chains、table-chain、bowmans-bingo 等 experimental 技巧;nishio-forcing-chains 已进入 stable。上面这些 experimental 技巧已经可以通过 allowedTechniques 显式纳入技巧集合,forcing / 试探类技巧会返回结构化分支证据。aic-als 当前采用保守 ALS/RCC chain 模型,仍需更多真实题面回归后再考虑进入 stable。experimental 技巧默认不会进入 walkthrough()、rate() 或 classic-stable.v1。
如果调用方希望在 stable 技巧全部失败后继续尝试更强求解能力,可以显式使用 classic-extended.v1。当前 extended 会先完整运行 stable 技巧;只有当前状态 primary 技巧全部无命中时,才把 bowmans-bingo 作为 fallback safety net 尝试,不会一次性启用全部 experimental forcing 技巧。
如果调用方希望使用本包自己的全技巧入口,可以显式使用 classic-galaxy.v1 或 CLI --profile galaxy。galaxy 会启用所有已实现技巧,并把 forcing-nets、digit-forcing-chains、cell-forcing-chains、unit-forcing-chains、table-chain 和 bowmans-bingo 放入 fallback 管线,避免重型试探技巧参与每步常规扫描。
table-chain 可能非常慢,不建议默认用于批量评分或生成;它更适合离线审计、人工研究或少量疑难题复核。
文档
- API.md
- STATE.md
- SCHEMA.md
- SOLVER.md
- TECHNIQUES.md
- RATING.md
- CANONICAL.md
- GENERATOR.md
- CANDIDATE_POOL.md
- PRESETS.md
- COMPATIBILITY.md
- SE_COMPATIBILITY.md
参考与致谢
本项目在高级解题技巧覆盖、技巧命名和求解路径验证过程中,参考了开源项目 Sudoku Explainer。
Sudoku Explainer 是 Keith Corlett 维护的 Java / Swing 数独解释器,项目说明中注明其基于 DIUF Sudoku Explainer,并吸收了 HoDoKu 的 hinters。@sudoku-tools/classic9 不包含 Sudoku Explainer 的源码,也不把它作为运行时依赖;相关参考主要用于理解技巧体系、对照实现边界和设计包外审计样本。
本地验证
npm run typecheck
npm test
npm run examples:typecheck
npm run audit:reference
npm run smoke:dist
npm run smoke:cli
npm run pack:dry-run
npm run verify许可证
MIT
