import random from cell import Cell class Board: def __init__(self): self.grid = [[0 for _ in range(9)] for _ in range(9)] self.cells = [] def generate(self): self._fill_board() self.create_cells() def create_cells(self): self.cells = [] for row in range(9): for col in range(9): self.cells.append( Cell( row=row, col=col, value=self.grid[row][col] ) ) def _find_empty(self): for row in range(9): for col in range(9): if self.grid[row][col] == 0: return row, col return None def _valid(self, row, col, num): if num in self.grid[row]: return False for r in range(9): if self.grid[r][col] == num: return False box_row = (row // 3) * 3 box_col = (col // 3) * 3 for r in range(box_row, box_row + 3): for c in range(box_col, box_col + 3): if self.grid[r][c] == num: return False return True def _fill_board(self): empty = self._find_empty() if empty is None: return True row, col = empty nums = list(range(1, 10)) random.shuffle(nums) for num in nums: if self._valid(row, col, num): self.grid[row][col] = num if self._fill_board(): return True self.grid[row][col] = 0 return False