跳转到主要内容

纯Python编写的无依赖的数独求解器

项目描述

Build Status PyPi version PyPi downloads PyPi license Coverage Status

用纯Python编写的无依赖的数独求解器。

它尽可能通过纯归纳法解决大小为N x N的数独,然后使用可选的Dancing Links穷举求解器,当基本归纳法不足以解决问题时。

安装

使用pip安装

pip install dlxsudoku

测试

可以使用pytest运行测试

py.test tests

测试会对Project Euler上包含多个数独的文件发起HTTP请求。

用法

存储在文件中的数独可以按如下方式解决

from dlxsudoku import Sudoku

s = Sudoku.load_file('path/to/sudoku.sud')
s.solve(verbose=True, allow_brute_force=True)

或者,如果您的数独存储在字符串变量中,可以按以下方式解决

from dlxsudoku import Sudoku

sudoku_string_1 = "030467050920010006067300148301006027400850600090200400005624001203000504040030702"
sudoku_string_2 = "# Example Sudoku\n" + \
                  "*72****6*\n" + \
                  "***72*9*4\n" + \
                  "*9*1****2\n" + \
                  "*******4*\n" + \
                  "82*4*71**\n" + \
                  "**9*6*8**\n" + \
                  "***9**6**\n" + \
                  "**3*72*9*\n" + \
                  "*6*843*7*"

s1 = Sudoku(sudoku_string_1)
s1.solve()
print(s1.to_oneliner())

s2 = Sudoku(sudoku_string_2)
s2.solve()
print(s2)

DLXSudoko将具有多个解的数独视为错误的,并在这种情况下引发 dlxsudoku.exceptions.SudokuHasMultipleSolutionsError 异常。

从终端使用

DLXSudoku还安装了一个控制台入口点。可以从字符串或路径解决数独

solve-sudoku --sudoku 030467050920010006067300148301006027400850600090200400005624001203000504040030702

solve-sudoku --path "path/to/sudoku.sud"

数独格式

数独文件或字符串应按以下方式组织

# Optional comment or metadata
*72****6*
***72*9*4
*9*1****2
*******4*
82*4*71**
**9*6*8**
***9**6**
**3*72*9*
*6*843*7*

或作为一行

030467050920010006067300148301006027400850600090200400005624001203000504040030702

除了[1-9]之外的任何字符都可以用作未知数的占位符。

参考资料

动态链接代码已从30行算法X!改编而来,仅略作修改以适应类结构和Python 2.6。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

dlxsudoku-0.10.3.tar.gz (15.3 kB 查看哈希值)

上传时间 源代码

构建分发

dlxsudoku-0.10.3-py2.py3-none-any.whl (12.2 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下组织支持