纯python中的数独解算器

dlxsudoku的Python项目详细描述


Build StatusPyPi versionPyPi downloadsPyPi licenseCoverage Status

用纯python编写的数独解算器,没有依赖关系。

它通过纯归纳法尽可能地解决了N x N大小的数独问题 可能,然后使用可选的Dancing Links暴力 求解器,当基本归纳法不够时。

安装

使用pip安装:

pip install dlxsudoku

测试

可以使用pytest

运行测试
py.test tests

测试对一个包含几个sudokus的文件发出http请求 Project Euler

用法

存储在文件中的数独可以这样求解:

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

或者,如果数独存储在字符串变量中,则可以是 以以下方式解决:

fromdlxsudokuimportSudokusudoku_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]之外的任何字符都可以用作 未知。

参考文献

舞蹈链接代码是根据Algorithm X in 30 lines!改编的, 只是稍加修改以适应类结构和Python2.6。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Rest DSL路由无法启动路由,因为同一端点不允许有多个使用者   jvm有没有像JConsole或VisualVM这样的工具可以告诉我“类、对象、引用变量在java中存储在哪里?”   java为什么我的列表中的所有元素看起来都一样?   java运行时。运行shell脚本的exec无法打开文件   JPopupMenu的JMenuItem的java热键   会话在Java中被覆盖   如何在java中去除字符串中的尖锐重音?   java Mockito监视一个接口,模拟它的默认方法,获取NullPointerException   javascript如何在jquery中禁用同一时间选择   将数组列表附加到现有CSV文件,但它会附加并清除存储在Java文件中的以前的数据   java从我的jar中访问pdf文件   java Sonar issue参数必须为非Null,但标记为可为Null   java Salesforce流式API:在网络故障之后和重新订阅之前获取事件   在Java 1.8.0_65上运行Play2.0应用程序时出现playframework错误   java为什么字母的ASCII由方法自动转换。toCharArray()?   java如何知道JDialog是否关闭?   java向服务器发送POST请求,服务器的响应为null,启动   java如何设置JTable中特定单元格的值?   ImagePlus中的java保存问题