Sudoku Solver in pure Python with no dependencies
Project description
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 solver, which is a brute force methodology, when the basic induction is not enough.
Installation
Install by calling:
pip install git+https://github.com/hbldh/dlxsudoku
Testing
Tests can be run using nosetests:
nosetests 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)
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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size dlxsudoku-0.9.1-py2.py3-none-any.whl (10.6 kB) | File type Wheel | Python version py2.py3 | Upload date | Hashes View |
Hashes for dlxsudoku-0.9.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c85759fb60d989bb352326ae7c6f8103af8072ea6135bdbc03c65bafe954a138 |
|
MD5 | 6c8aa6bebdf3bf681e275d262f4ee171 |
|
BLAKE2-256 | f0b698eb9f047dc6afda7e7532067bed69ae55c6a0fb4ce40ca5d43df5e1159f |