Skip to content

Commit 136f4bb

Browse files
committed
new sudoku solver in Game section
1 parent 5b664d1 commit 136f4bb

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

GAMES/sudoku_solver/sudoku_solver.py

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import tkinter as tk
2+
3+
class SudokuSolverGUI:
4+
def __init__(self, master):
5+
self.master = master
6+
self.master.title("Sudoku Solver")
7+
self.board = [[0 for _ in range(9)] for _ in range(9)]
8+
self.input_sudoku()
9+
self.create_widgets()
10+
11+
def input_sudoku(self):
12+
print("Enter the Sudoku puzzle values row by row:")
13+
for i in range(9):
14+
row_input = input().split()
15+
for j in range(9):
16+
self.board[i][j] = int(row_input[j])
17+
18+
def create_widgets(self):
19+
self.canvas = tk.Canvas(self.master, width=450, height=450, bg="white")
20+
self.canvas.pack()
21+
22+
for i in range(10):
23+
line_width = 2 if i % 3 == 0 else 1
24+
self.canvas.create_line(50 * i, 0, 50 * i, 450, width=line_width)
25+
self.canvas.create_line(0, 50 * i, 450, 50 * i, width=line_width)
26+
27+
for i in range(9):
28+
for j in range(9):
29+
value = self.board[i][j]
30+
if value != 0:
31+
x, y = j * 50 + 25, i * 50 + 25
32+
self.canvas.create_text(x, y, text=str(value), font=("Arial", 14, "bold"))
33+
34+
self.solve_button = tk.Button(self.master, text="Solve", command=self.solve_sudoku)
35+
self.solve_button.pack()
36+
37+
def solve_sudoku(self):
38+
self.solve_button.config(state="disabled")
39+
self.solve()
40+
41+
def solve(self):
42+
empty_cell = self.find_empty_cell()
43+
if not empty_cell:
44+
self.solve_button.config(state="normal")
45+
return True
46+
47+
row, col = empty_cell
48+
for num in range(1, 10):
49+
if self.is_valid_move(num, row, col):
50+
self.board[row][col] = num
51+
self.update_cell(row, col, num)
52+
if self.solve():
53+
return True
54+
self.board[row][col] = 0
55+
self.update_cell(row, col, 0)
56+
return False
57+
58+
def find_empty_cell(self):
59+
for i in range(9):
60+
for j in range(9):
61+
if self.board[i][j] == 0:
62+
return i, j
63+
return None
64+
65+
def is_valid_move(self, num, row, col):
66+
for i in range(9):
67+
if self.board[row][i] == num or self.board[i][col] == num:
68+
return False
69+
start_row, start_col = 3 * (row // 3), 3 * (col // 3)
70+
for i in range(start_row, start_row + 3):
71+
for j in range(start_col, start_col + 3):
72+
if self.board[i][j] == num:
73+
return False
74+
return True
75+
76+
def update_cell(self, row, col, num):
77+
x, y = col * 50 + 25, row * 50 + 25
78+
self.canvas.delete(f"number_{row}_{col}")
79+
if num != 0:
80+
self.canvas.create_text(x, y, text=str(num), font=("Arial", 14, "bold"), tags=f"number_{row}_{col}")
81+
82+
def main():
83+
root = tk.Tk()
84+
app = SudokuSolverGUI(root)
85+
root.mainloop()
86+
87+
if __name__ == "__main__":
88+
main()

0 commit comments

Comments
 (0)