def priority(self, position):
     score = 0
     if self.last_conclusion is not None:
         dist = mdist(position, self.last_conclusion)
         score += max(5 - dist, 0)
     for adj in self.adjacencies[position]:
         if not self.is_unknown(adj):
             score += 1
     return score
 def priority(self, position):
     score = 0
     if self.last_conclusion is not None:
         if self.last_conclusion in self.adjacencies[position]:
             score += self.conclusion_adjacent_value
         elif self.last_conclusion in self.corner_adjacencies[position]:
             score += self.conclusion_corner_adjacent_value
         else:
             dist = mdist(self.last_conclusion, position)
             if dist in self.conclusion_distance_values:
                 score += self.conclusion_distance_values[dist]
     for adj in self.adjacencies[position]:
         if not self.is_unknown(adj):
             score += self.known_adjacent_value
     return score
 def valid_white_reachable(self, position=None, color=None):
     if color == BLACK:
         return True
     if color == WHITE:
         candidates = [position]
     else:
         candidates = self.white_positions.difference(self.given_positions)
     for pos_white in candidates:
         for pos_given in self.given_positions:
             number = self[pos_given]
             if mdist(pos_given, pos_white) < number:
                 break # this candidate has a given close enough
         else:
             return False # no numbers close enough
     return True
 def priority(self, position):
     score = 0
     if self.last_conclusion is not None:
         if self.last_conclusion in self.adjacencies[position]:
             score += self.conclusion_adjacent_value
         else:
             dist = mdist(self.last_conclusion, position)
             if dist in self.conclusion_distance_values.keys():
                 score += self.conclusion_distance_values[dist]
     # known lines nearby
     adjs = self.adjacencies[position]
     known_score = self.known_adjacent_value * len(adjs)
     for adj in adjs:
         if self.is_unknown(adj):
             known_score -= self.known_adjacent_value
     score += known_score
     # givens nearby
     for gpos in self.adjacent_givens(position):
         number = self.givens[gpos]
         if number in self.given_adjacent_values.keys():
             score += self.given_adjacent_values[number]
     return score