Пример #1
0
 def update_possibles(self):
     for i in range(81):
         tile = self.board[i]
         if tile == 0:
             continue
         self.possibles[i] = []
         for group in sudoku.related_groups(i):
             for other_i in (oi for oi in group if oi != i):
                 if tile in self.possibles[other_i]:
                     self.possibles[other_i].remove(tile)
Пример #2
0
 def fill_one_possibles_per_group(self):
     filled_this_round = 0
     groups = sudoku.ROW_GROUP_INDICES + sudoku.COL_GROUP_INDICES + \
              sudoku.BOX_GROUP_INDICES
     for g in groups:
         places = [set() for i in range(10)]
         for tile_i in g:
             for nbr in self.possibles[tile_i]:
                 places[nbr].add(tile_i)
         for nbr in range(1, 10):
             if len(places[nbr]) == 1:
                 # number can be in only one place in group, fill it
                 tile_i = places[nbr].pop()
                 self.board[tile_i] = nbr
                 self.possibles[tile_i] = []
                 filled_this_round += 1
                 for rg in sudoku.related_groups(tile_i):
                     for other_i in rg:
                         if nbr in self.possibles[other_i]:
                             self.possibles[other_i].remove(nbr)
     return filled_this_round