技能市场

数独解题助手·数独答案分步讲解·解题技巧难度评估

@user_2ckqg/sudoku-solver-explain

9×9 数独解题助手:用户粘贴文本题面(0 或 . 表示空格),用程序精确求解并判断无解、多解;按唯一候选数、隐性唯一、区块摒除、数对、X-Wing、XY-Wing 等人类技巧分步讲解,实在卡住才试数(试数结论经回溯验证);给出简单/中等/困难/专家/骨灰难度评估;可只给下一步提示,也能核对用户填到一半的盘面。纯标准库,不联网,不做图片识别。

来源:千问AI平台生活服务MIT

数独解题助手

这个技能做什么、不做什么

  • 做:标准 9×9 数独。
    • 求解:程序精确求解,同时判断无解(题面冲突,或无冲突但穷举无解)、唯一解多解(给出两个不同的解和相差的格子)。
    • 分步讲解:按人类解法从易到难推进,每一步说明用了什么技巧、为什么。
    • 难度评估:按用到的最难技巧分五档。
    • 提示:只给下一步(或下几步),不剧透整盘。
    • 核对:用户填到一半,找出填错的格子。
  • 不做:不做图片/拍照识别(OCR),请用户把题面打成文字;不支持 6×6、16×16、杀手数独、对角线数独等变体。
  • **答案一律来自脚本输出,不要自己心算或猜数独答案。**模型心算数独很容易出错。

输入格式

81 个格子,从左到右、从上到下。已知数写 1-9,空格写 0._ * ? x 也行)。空格、换行、|-+、逗号等分隔符会被忽略,全角数字也能读。下面两种写法等价:

530070000600195000098000060800060003400803001700020006060000280000419005000080079
5 3 . | . 7 . | . . .
6 . . | 1 9 5 | . . .
. 9 8 | . . . | . 6 .
...(共 9 行)

读到的格数不是 81 时,脚本会报出实际格数,请用户逐行核对。

使用流程

  1. 把用户的题面原样交给脚本(多行题面用 --file,或通过标准输入):

    python {baseDir}/scripts/sudoku.py explain --puzzle "530070000600195000098000060800060003400803001700020006060000280000419005000080079"
    python {baseDir}/scripts/sudoku.py explain --file puzzle.txt
  2. 按用户意图选模式:

    模式 用途
    solve 只要答案:状态 + 难度 + 答案盘面
    explain 答案 + 全部分步讲解(默认推荐)
    hint --n 1 只给下一步,不给答案;--n 3 给三步
    grade 只评难度,列出各技巧用了几次
    check --board "..." 核对用户当前盘面(--board 是用户填到一半的 81 格)

    --json 输出结构化结果(status / solution / steps / difficulty)。

  3. 把脚本输出原样给用户,再用一两句话点出关键点(例如「这题卡点在第 23 步的 X-Wing」)。讲解步骤很多时,可以先给答案和难度,再问用户要不要看全部步骤,或只看某一段。

结果状态

status 含义 怎么跟用户说
unique 唯一解 正常给答案和讲解
multiple 至少两个解 说明不是合格数独,给出两个解及相差格子;多半是漏抄了已知数
invalid 已知数直接冲突 指出哪一行/列/宫重复;多半是抄错
no_solution 没有直接冲突但穷举无解 给出推理中出现矛盾的位置;多半是抄错

讲解口径

  • 格子记为 R行C列(R3C5 = 第 3 行第 5 列);宫按从左到右、从上到下编 1-9。

  • 技巧顺序与难度档位:

    档位 技巧
    简单 宫内隐性唯一、行列隐性唯一、唯一候选数
    中等 区块摒除(宫→行列 pointing、行列→宫 claiming)
    困难 显性数对、隐性数对、显性三数组、隐性三数组
    专家 X-Wing、XY-Wing、剑鱼
    骨灰 以上全部卡住,需要试数
  • 每一步都优先用最简单的技巧;难度 = 用到的最难技巧所在档位,另给一个参考评分。

  • 试数:选候选最少的格子,把错误候选逐个回溯验证为无解后再填正确值——所以讲解里的试数是「已验证的结论」,不是瞎猜。

  • 自测会逐步核对:讲解里每一次填数都等于唯一解,每一次删除的候选都不是正确答案。

样例与自测

  • assets/puzzles.txt:简单、中等、困难、专家(X-Wing、XY-Wing)、骨灰(AI Escargot、Inkala 2012)、两种无解、一个多解,共 10 道。

  • 自测:

    python {baseDir}/scripts/selftest.py

    覆盖全部样例的状态和难度、答案独立校验、讲解逐步一致性、40 道随机极小题、输入容错、check 模式、元器代码节点入口 main(params)

在腾讯元器代码节点里用

scripts/sudoku.py 是单文件、纯标准库,整段粘进元器工作流的 Python 代码节点即可,入口是:

def main(params: dict) -> dict
# params: puzzle(题面,必填)、mode(solve/explain/hint/grade/check,默认 explain)、hint_n、board
# 返回: status / text(给用户看的全文)/ solution / difficulty / steps_count

边界

  • 只支持标准 9×9;不做 OCR。
  • 已知数少于 17 个的题一定不是唯一解,脚本会在多解提示里注明。
  • 骨灰级题的讲解会出现若干次试数,这是正常的:人类高手在这类题上用的是更复杂的链(强制链、ALS 等),本技能不实现这些,统一用「验证过的试数」替代,并如实标注。