def edge_one_one(self, board: Board, pt, neighbors=None) -> None: if not neighbors: neighbors = board.gen_neighbors(pt) has_edge = self._is_on_edge(board, pt, neighbors) if not has_edge: return False
def basic_patterns(self, board: Board, pt) -> None: if pt in board.numbers: bombs = board.numbers[pt] neighbors = board.gen_neighbors(pt) open_neighbors = neighbors & board.unclicked_squares if len(open_neighbors) == bombs: for neighbor in neighbors: board.select_sq(neighbor) self.basic_patterns(neighbor)
def _is_on_edge(self, board: Board, pt: tuple, neighbors=None, edges=None) -> bool: if not neighbors: neighbors = board.gen_neighbors(pt) if len(neighbors) <= 5: return True if not edges: edges = self._get_edges(board, pt, neighbors) return self._is_on_soft_edge(board, pt, neighbors, edges)
def _is_on_soft_edge(self, board: Board, pt: tuple, neighbors=None, edges=None) -> bool: if not neighbors: neighbors = board.gen_neighbors(pt) if not edges: edges = self._get_edges(board, pt, neighbors) #intersection of visible zeros and neighbors zero_sqs = self._get_zero_sqs(board) zero_neighbors = zero_sqs & neighbors # check if 3-consec pts are subsets of zero_neighbors, bools return any(edge < zero_neighbors for edge in edges)
def _get_mapped_neighbors(self, board: Board, pt: tuple) -> set: neighbors = board.gen_neighbors(pt) mapped_neighbors = {neighbor: pt for neighbor in neighbors} pass