A simple Python program that generates and solves Sudoku board (9x9) puzzles.
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.
Inspiration taken from:
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 board that has been pre-generated by the algorithm.
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
You can also import Sudoku boards from an outsourcer.
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