Exemplo n.º 1
0
 def feature_7(self, sudoku):
     self.arc_consistency(sudoku, 10)
     counts = dict()
     for i in range(10):
         counts[i] = 0
     for i in range(9):
         for j in range(9):
             domain = sudoku.getLegalMoves(i, j)
             for d in domain:
                 counts[d] += 1
     maxvalue = 0
     for key in counts.keys():
         if key == 0:
             continue
         maxvalue = max(counts[key], maxvalue)
     return maxvalue
Exemplo n.º 2
0
 def arc_consistency(self, sudoku, numRounds):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     size_of_domain = 0
     total_domains = list()
     for round in range(numRounds):
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         total_domains.append(size_of_domain)
         size_of_domain = 0
     return total_domains
Exemplo n.º 3
0
 def arc_consistency(self, sudoku, numRounds):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     size_of_domain = 0
     total_domains = list()
     for round in range(numRounds):
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         total_domains.append(size_of_domain)
         size_of_domain = 0
     return total_domains
Exemplo n.º 4
0
 def feature_7(self, sudoku):
     self.arc_consistency(sudoku, 10)
     counts = dict()
     for i in range(10):
         counts[i] = 0
     for i in range(9):
         for j in range(9):
             domain = sudoku.getLegalMoves(i, j)
             for d in domain:
                 counts[d] += 1
     maxvalue = 0
     for key in counts.keys():
         if key == 0:
             continue
         maxvalue = max(counts[key], maxvalue)
     return maxvalue
Exemplo n.º 5
0
 def isSolvableByAC(self, sudoku):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     prev_domain = None
     size_of_domain = 0
     while True:
         self.arcConsistencyCounter += 1
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         if (prev_domain == domains):
             return False
         if (sudoku.isComplete()):
             return True
         prev_domain = domains
Exemplo n.º 6
0
 def isSolvableByAC(self, sudoku):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     prev_domain = None
     size_of_domain = 0
     while True:
         self.arcConsistencyCounter += 1
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         if prev_domain == domains:
             return False
         if sudoku.isComplete():
             return True
         prev_domain = domains
Exemplo n.º 7
0
 def doBacktracking(self, sudoku, moveStack):
     empties = sudoku.getEmptySquares()
     if (len(empties) == 0):
         self.backTrackingResult = sudoku
         return True
     else:
         (i, j) = empties[0]
         domain = sudoku.getLegalMoves(i, j)
         moveStack.append(((i, j), sudoku.copy()))
         for value in domain:
             sudoku.setSquare(i, j, value)
             self.backTrackingCounter += 1
             if self.isSolvableByAC(sudoku):
                 self.backTrackingResult = sudoku
                 return True
             if not sudoku.hasEmptyDomain():
                 if self.doBacktracking(sudoku, moveStack):
                     return True
             sudoku = moveStack[-1][1].copy()
         moveStack.pop()
         return False
Exemplo n.º 8
0
 def doBacktracking(self, sudoku, moveStack):
     empties = sudoku.getEmptySquares()
     if len(empties) == 0:
         self.backTrackingResult = sudoku
         return True
     else:
         (i, j) = empties[0]
         domain = sudoku.getLegalMoves(i, j)
         moveStack.append(((i, j), sudoku.copy()))
         for value in domain:
             sudoku.setSquare(i, j, value)
             self.backTrackingCounter += 1
             if self.isSolvableByAC(sudoku):
                 self.backTrackingResult = sudoku
                 return True
             if not sudoku.hasEmptyDomain():
                 if self.doBacktracking(sudoku, moveStack):
                     return True
             sudoku = moveStack[-1][1].copy()
         moveStack.pop()
         return False