Sudoku Solver written in pure Python with no dependencies.
It solves Sudokus of sizes N x N by pure induction as far as is possible, and then uses an optional Dancing Links brute force solver, when the basic induction is not enough.
Installation
Install with pip:
pip install dlxsudoku
Testing
Tests can be run using pytest:
py.test tests
The tests make a HTTP request to a file containing several Sudokus on Project Euler.
Usage
A Sudoku stored in a file can be solved as such:
from dlxsudoku import Sudoku
s = Sudoku.load_file('path/to/sudoku.sud')
s.solve(verbose=True, allow_brute_force=True)
Alternatively, if your Sudoku is stored in string variable it can be solved in the following fashion:
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 treats a Sudoku with multiple solutions as a faulty one and raises a dlxsudoku.exceptions.SudokuHasMultipleSolutionsError exception in such a situation.
Use from terminal
DLXSudoku also installs a console entry point. Can solve Sudokus from string or from path:
solve-sudoku --sudoku 030467050920010006067300148301006027400850600090200400005624001203000504040030702
or
solve-sudoku --path "path/to/sudoku.sud"
Sudoku formatting
A Sudoku file or string should be structured in the following manner:
# 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*
or as a one-liner:
030467050920010006067300148301006027400850600090200400005624001203000504040030702
Any character other than [1-9] may be used as a placeholder for unknowns.
References
The Dancing Links code has been adapted from Algorithm X in 30 lines!, only modified slightly to accommodate class structure and Python 2.6.
Metadata
Release files for dlxsudoku 0.10.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dlxsudoku-0.10.3.tar.gz | 15.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dlxsudoku-0.10.3-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 27.5 kB
Release files / dlxsudoku-0.10.3.tar.gz
| Download URL | dlxsudoku-0.10.3.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
31713024e8d4e0c2ce10028eb7c5d2e788639d5df66ea55b4a38dc9bed52a719
|
|
BLAKE2b-256 checksum How to use checksums |
b28ed0cc930e410ab643cd5b8e78a0d62f086f0b509ac38740948667a1b74e6b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / dlxsudoku-0.10.3-py2.py3-none-any.whl
| Download URL | dlxsudoku-0.10.3-py2.py3-none-any.whl |
|---|---|
| Size | 12.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
43e86e4e3d9eb42fcec62cf0eed02043ce5c36dbd87e2f2afb234209a6285253
|
|
BLAKE2b-256 checksum How to use checksums |
df43ebad5140625cbb2e9c817b8f955e997efa714d7d20a5d72aaa40a68298ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |