/sudoku-solver

Sudoku algorithm using elimination techniques (no backtracking)

Primary LanguagePython

Sudoku Solver

An attempt to build a Sudoku algorithm using elimination techniques (no backtracking)

Techniques

  • Hidden Single
  • Pointing Pair
  • Box/Line Reduction
  • Box/Box Reduction
  • Naked Subset
  • Hidden Subset
  • X-Wing
  • Y-Wing
  • Swordfish
  • Jellyfish
  • XYZ-Wing

More techniques will be implemented in the future.

Can solve up to Expert in https://sudoku.com/

Instructions

Run project

python main.py

Solve Sudoku

Create a Sudoku using 1D array of 81 digits.

sudoku = Sudoku([
        6, 0, 0, 0, 0, 0, 0, 5, 0,
        9, 0, 0, 8, 3, 0, 0, 0, 0,
        0, 0, 1, 0, 0, 0, 0, 0, 3,
        0, 0, 0, 0, 0, 2, 0, 0, 0,
        0, 5, 0, 0, 0, 7, 0, 0, 6,
        0, 7, 2, 0, 1, 0, 0, 0, 0,
        0, 0, 0, 4, 0, 0, 1, 0, 0,
        0, 0, 0, 0, 0, 0, 7, 2, 5,
        0, 0, 0, 1, 0, 9, 6, 0, 0,
    ])

or load from a text file with 9 lines, each has 9 digits.

sudoku.txt

003020600
900305001
001806400
008102900
700000008
006708200
002609500
800203009
005010300
sudoku = Sudoku.from_file("sudoku.txt")

Then solve

sudoku.solve_and_display()

Sample output

🔢 Sudoku Expert
6 _ _ | _ _ _ | _ 5 _
9 _ _ | 8 3 _ | _ _ _
_ _ 1 | _ _ _ | _ _ 3
------+-------+------
_ _ _ | _ _ 2 | _ _ _
_ 5 _ | _ _ 7 | _ _ 6
_ 7 2 | _ 1 _ | _ _ _
------+-------+------
_ _ _ | 4 _ _ | 1 _ _
_ _ _ | _ _ _ | 7 2 5
_ _ _ | 1 _ 9 | 6 _ _

⌛ Solving Sudoku Expert...
6 4 3 | 7 9 1 | 8 5 2
9 2 5 | 8 3 6 | 4 7 1
7 8 1 | 2 5 4 | 9 6 3
------+-------+------
1 9 6 | 5 4 2 | 3 8 7
3 5 4 | 9 8 7 | 2 1 6
8 7 2 | 6 1 3 | 5 9 4
------+-------+------
2 6 8 | 4 7 5 | 1 3 9
4 1 9 | 3 6 8 | 7 2 5
5 3 7 | 1 2 9 | 6 4 8

Sudoku Expert: 59 cells solved
✅ Sudoku Expert solved in 0.0368 seconds!
🔢 Sudoku Evil
_ _ _ | _ _ 3 | _ _ 8
2 _ 4 | _ 6 _ | _ 9 _
_ 1 _ | _ _ _ | _ _ _
------+-------+------
_ 7 _ | _ _ _ | _ 5 _
5 _ 1 | _ _ 6 | 3 _ _
_ 9 _ | _ 1 _ | _ _ _
------+-------+------
_ _ _ | 2 _ _ | 9 _ _
7 _ _ | _ _ _ | _ _ _
6 _ 5 | _ 4 _ | _ 2 _

⌛ Solving Sudoku Evil...
9 6 7 | _ _ 3 | _ _ 8
2 5 4 | _ 6 _ | _ 9 3
8 1 3 | _ _ _ | _ _ _
------+-------+------
_ 7 _ | _ _ _ | _ 5 _
5 8 1 | _ _ 6 | 3 _ _
_ 9 _ | _ 1 _ | _ _ _
------+-------+------
1 4 8 | 2 _ _ | 9 _ _
7 2 9 | 6 _ _ | _ _ _
6 3 5 | _ 4 _ | _ 2 _

Sudoku Evil: 15 cells solved
❌ Failed to solve Sudoku Evil.