Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 136f4bb

Browse files
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

Lines changed: 88 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /