J'ai des problèmes avec cet algorithme. Je ne peux saisir qu'une seule sous-grille. J'ai seulement inclus la partie sous-grille ici car j'ai fait checkRows et checkColumns par moi-même. Comment puis-je connecter ce code pour capturer le reste? Votre aide est grandement appréciée. Merci.

class Sudoku_Checker:
  def __init__(self,board):
    self.board = board

  def board_validater(self,board):
    self.checkSquares(board)

    return  self.checkSquares(board) == True

  def checkSquares(self,board):
      compare = [1,2,3,4,5,6,7,8,9]
      hold = []
      row = 0
      column = 0
      square = 0
      for p in range(square, square+3):
          for i in range(row, row + 3):
              for j in range(column, column + 3):
                  hold.append(board[i][j])
              if len(hold)==9:
                  if sorted(hold) == compare:
                      hold =[]
                      continue
                  else:
                    return False
          square +=3
          row += 3


      return True

board = [  [5, 3, 4, 6, 7, 8, 9, 1, 2],
          [6, 7, 2, 1, 9, 5, 3, 4, 8],
          [1, 9, 8, 3, 4, 2, 5, 6, 0],
          [8, 5, 9, 7, 6, 1, 4, 2, 3],
          [4, 2, 6, 8, 5, 3, 7, 9, 1],
          [7, 1, 3, 9, 2, 4, 8, 5, 6],
          [9, 6, 1, 5, 3, 7, 2, 8, 4],
          [2, 8, 7, 4, 1, 9, 6, 3, 5],
          [3, 4, 5, 2, 8, 6, 1, 7, 9]]
s = Sudoku_Checker(board)
s.board_validater(board)
1
Colorful Codes 15 mars 2019 à 23:05

2 réponses

Meilleure réponse

J'espère que quelqu'un trouvera cela utile. Je préfère cette implémentation car elle est plus lisible et compréhensible pour moi. L'autre commentateur a également une bonne solution à l'exception de la compréhension de la liste qui est trop une boucle.

class Sudoku_Checker:
  def __init__(self,board):
    self.board = board

  def board_validater(self,board):
    return self.checkSquares(board) == True

  def checkSquares(self,board):
    compare = range(1,10)
    for i in range(0, 9, 3):
        for j in range(0, 9, 3):
            nums = board[i][j:j+3] + board[i+1][j:j+3] + board[i+2][j:j+3]
            if sorted(nums) == compare:
                continue
            else:
                return False
    return True

board = [  [5, 3, 4, 6, 7, 8, 9, 1, 2],
          [6, 7, 2, 1, 9, 5, 3, 4, 8],
          [1, 9, 8, 3, 4, 2, 5, 6, 0],
          [8, 5, 9, 7, 6, 1, 4, 2, 3],
          [4, 2, 6, 8, 5, 3, 7, 9, 1],
          [7, 1, 3, 9, 2, 4, 8, 5, 6],
          [9, 6, 1, 5, 3, 7, 2, 8, 4],
          [2, 8, 7, 4, 1, 9, 6, 3, 5],
          [3, 4, 5, 2, 8, 6, 1, 7, 9]]
s = Sudoku_Checker(board)
s.board_validater(board)

0
Colorful Codes 17 mars 2019 à 19:39

Donc, dans mon exemple avec la variable line et column, j'obtiens le coin supérieur gauche de la matrice eaxh 3x3, puis j'itère à partir de là pour construire le carré.

Veuillez me faire savoir si c'est ce que vous recherchez.

board = [
    [5, 3, 4, 6, 7, 8, 9, 1, 2],
    [6, 7, 2, 1, 9, 5, 3, 4, 8],
    [1, 9, 8, 3, 4, 2, 5, 6, 0],
    [8, 5, 9, 7, 6, 1, 4, 2, 3],
    [4, 2, 6, 8, 5, 3, 7, 9, 1],
    [7, 1, 3, 9, 2, 4, 8, 5, 6],
    [9, 6, 1, 5, 3, 7, 2, 8, 4],
    [2, 8, 7, 4, 1, 9, 6, 3, 5],
    [3, 4, 5, 2, 8, 6, 1, 7, 9]
]

for line in range(0, 9, 3):
    for column in range(0, 9, 3):
        square = [[board[l][c] for c in range(column, column + 3)] for l in range(line, line + 3)]
        print(square)

Résultat:

[[5, 3, 4], [6, 7, 2], [1, 9, 8]]
[[6, 7, 8], [1, 9, 5], [3, 4, 2]]
[[9, 1, 2], [3, 4, 8], [5, 6, 0]]
[[8, 5, 9], [4, 2, 6], [7, 1, 3]]
[[7, 6, 1], [8, 5, 3], [9, 2, 4]]
[[4, 2, 3], [7, 9, 1], [8, 5, 6]]
[[9, 6, 1], [2, 8, 7], [3, 4, 5]]
[[5, 3, 7], [4, 1, 9], [2, 8, 6]]
[[2, 8, 4], [6, 3, 5], [1, 7, 9]]
1
Alexandru Martin 15 mars 2019 à 20:35