Sudoku generator and solver with a step-by-step guidance
Project description
Sudoku generator and solver with a step-by-step guidance
Installation
pip install dokusan
Quickstart
Sudoku Solvers
Step-by-step solver
This solver tries to solve sudoku using human-like strategies. Currently following techniques are supported:
Naked/Hidden singles
Naked Pairs/Triplets
Locked Candidate
XY-Wing
Unique Rectangle
For example to see all techniques that sudoku has:
from dokusan import solvers
from dokusan.boards import BoxSize, Sudoku
sudoku = Sudoku.from_list(
[
[0, 0, 0, 0, 9, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 2, 3, 0, 0],
[0, 0, 7, 0, 0, 1, 8, 2, 5],
[6, 0, 4, 0, 3, 8, 9, 0, 0],
[8, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 9, 0, 0, 0, 0, 0, 8],
[1, 7, 0, 0, 0, 0, 6, 0, 0],
[9, 0, 0, 0, 1, 0, 7, 4, 3],
[4, 0, 3, 0, 6, 0, 0, 0, 1],
],
box_size=BoxSize(3, 3),
)
{step.combination.name for step in solvers.steps(sudoku)}
Backtracking-based solver
This solver is based on backtracking algorithm, however slightly modified to work fast
from dokusan import solvers, renderers
from dokusan.boards import BoxSize, Sudoku
sudoku = Sudoku.from_list(
[
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 3, 0, 8, 5],
[0, 0, 1, 0, 2, 0, 0, 0, 0],
[0, 0, 0, 5, 0, 7, 0, 0, 0],
[0, 0, 4, 0, 0, 0, 1, 0, 0],
[0, 9, 0, 0, 0, 0, 0, 0, 0],
[5, 0, 0, 0, 0, 0, 0, 7, 3],
[0, 0, 2, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 4, 0, 0, 0, 9],
],
box_size=BoxSize(3, 3),
)
solution = solvers.backtrack(sudoku)
print(renderers.colorful(solution))
Sudoku Generator
Generator algorithm is mainly based on article by Daniel Beer. The average time to generate Sudoku with rank of 150 is 700ms.
To generate a new sudoku:
from dokusan import generators, renderers
sudoku = generators.random_sudoku(avg_rank=150)
print(renderers.colorful(sudoku))
Ranking and Sudoku difficulty
avg_rank option roughly defines the difficulty of the sudoku. Sudoku with rank lower than 100 contains only naked/hidden singles. Sudoku with rank greater than 150 contains Naked Subsets/Locked Candidate/XY Wing/etc…, however this is not always guaranteed.
For higher ranks it is also not guaranteed that generated Sudoku rank will be higher than provided avg_rank, so to ensure sudoku has desired rank one can do the following:
from dokusan import generators, stats
avg_rank = 450
while stats.rank(sudoku := generators.random_sudoku(avg_rank)) < avg_rank:
continue
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dokusan-0.1.0.tar.gz
.
File metadata
- Download URL: dokusan-0.1.0.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.8.16 Linux/5.15.0-1035-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b504846e560e9fcddf99ed8bd38dab86f8d99a0c5f270cd2bea2c79347a6cd8b |
|
MD5 | c339e89720b44ed5b93bb9219f81eff3 |
|
BLAKE2b-256 | 539b0c8f048f30d5bbf822c3337d4cd5ed8f75607f03588fdb4cade8cddcd162 |
File details
Details for the file dokusan-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: dokusan-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.8.16 Linux/5.15.0-1035-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cddb3456de83e1af430191fcb7e8f25b86eb1a36103f535de01c0c0331f5baaa |
|
MD5 | a62fb104e82479010c5dd8b9137795b6 |
|
BLAKE2b-256 | 63aeb3ed699da71ac18d2d578725980d87be1b4fbc973cfa548e4c0968c2efd3 |