Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/erelado/py-sudoku

A simple Python program that generates and solves Sudoku board (9x9) puzzles.
https://github.com/erelado/py-sudoku

console-application python-console python3 sudoku sudoku-generator sudoku-solver

Last synced: about 1 month ago
JSON representation

A simple Python program that generates and solves Sudoku board (9x9) puzzles.

Awesome Lists containing this project

README

        

# py-sudoku (console)

## 📙 Description
A simple Python program that generates and solves Sudoku board (9x9) puzzles.

### 📏 Scope
The goal of the project was to examine Python's basic syntax and provide added educational value.

The first part of the project was to create a sudoku board solver.
A sudoku board generator was later added to the project.

### 🔗 References
Inspiration taken from:
- [jeffsieu / py-sudoku](https://github.com/jeffsieu/py-sudoku).
- [techwithtim](https://www.youtube.com/watch?v=eqUwSA0xI-s&list=PLzMcBGfZo4-kE3aF6Y0wNBNih7hWRAU2o) / [Sudoku-GUI-Solver](https://github.com/techwithtim/Sudoku-GUI-Solver).

\
 

# 🚩 Usage

### Generating a Sudoku board
```py
from Sudoku import SudokuBoardGenerator, SudokuBoardSolver, print_board

puzzle = SudokuBoardGenerator() # Generator initializion.
puzzle.generate_unsolved_board(5) # Sudoku board generation (difficulty = 5 attempts).
print_board(puzzle.board) # Printing the result.

# Generating a new Sudoku board to solve...
# generated a new board in 1.1324846744537354 seconds

# 0 0 3 | 0 5 4 | 2 0 9
# 0 9 1 | 3 0 2 | 4 8 0
# 0 8 4 | 0 9 0 | 0 0 0
# ------|-------|------
# 8 0 6 | 0 0 0 | 0 0 0
# 4 3 0 | 0 0 7 | 0 0 0
# 0 5 9 | 0 2 6 | 0 0 0
# ------|-------|------
# 6 0 5 | 0 0 0 | 3 0 1
# 0 0 0 | 0 1 5 | 0 0 8
# 0 0 0 | 0 0 0 | 0 7 0
```

### Solving a Sudoku board
Solving a board that has been pre-generated by the algorithm.
```py
from Sudoku import SudokuBoardGenerator, SudokuBoardSolver, print_board

# using the generated "puzzle"
puzzle = SudokuBoardGenerator() # Generator initializion.
puzzle.generate_unsolved_board(5) # Sudoku board generation (difficulty = 5 attempts).

solver = SudokuBoardSolver(puzzle.board) # Solver initializion.
solver.solve_board() # Sudoku board solution.
print_board(solver.board) # Printing the result.

# Generating a new Sudoku board to solve...
# generated a new board in 1.1324846744537354 seconds

# solved in 0.03597092628479004 seconds

# 7 6 3 | 8 5 4 | 2 1 9
# 5 9 1 | 3 7 2 | 4 8 6
# 2 8 4 | 6 9 1 | 7 5 3
# ------|-------|------
# 8 7 6 | 5 3 9 | 1 4 2
# 4 3 2 | 1 8 7 | 9 6 5
# 1 5 9 | 4 2 6 | 8 3 7
# ------|-------|------
# 6 2 5 | 7 4 8 | 3 9 1
# 3 4 7 | 9 1 5 | 6 2 8
# 9 1 8 | 2 6 3 | 5 7 4
```

### Importing boards
You can also import Sudoku boards from an outsourcer.
```py
from Sudoku import SudokuBoardGenerator, SudokuBoardSolver, print_board

# using "World's hardest sudoku: can you crack it?"
# @ https://www.telegraph.co.uk/news/science/science-news/9359579/Worlds-hardest-sudoku-can-you-crack-it.html
hardest_sudoku = [
[8,0,0,0,0,0,0,0,0],
[0,0,3,6,0,0,0,0,0],
[0,7,0,0,9,0,2,0,0],
[0,5,0,0,0,7,0,0,0],
[0,0,0,0,4,5,7,0,0],
[0,0,0,1,0,0,0,3,0],
[0,0,1,0,0,0,0,6,8],
[0,0,8,5,0,0,0,1,0],
[0,9,0,0,0,0,4,0,0]
]

solver = SudokuBoardSolver(hardest_sudoku) # Solver initializion.
solver.solve_board() # Sudoku board solution.
print_board(solver.board) # Printing the result.

# solved in 1.8471145629882812 seconds

# 8 1 2 | 7 5 3 | 6 4 9
# 9 4 3 | 6 8 2 | 1 7 5
# 6 7 5 | 4 9 1 | 2 8 3
# ------|-------|------
# 1 5 4 | 2 3 7 | 8 9 6
# 3 6 9 | 8 4 5 | 7 2 1
# 2 8 7 | 1 6 9 | 5 3 4
# ------|-------|------
# 5 2 1 | 9 7 4 | 3 6 8
# 4 3 8 | 5 2 6 | 9 1 7
# 7 9 6 | 3 1 8 | 4 5 2
```