def trapped_piece(puzzle: Puzzle) -> bool: for node in puzzle.mainline[1::2][1:]: square = node.move.to_square captured = node.parent.board().piece_at(square) if captured and captured.piece_type != PAWN: prev = node.parent if prev.move.to_square == square: square = prev.move.from_square if util.is_trapped(prev.parent.board(), square): return True return False
def test_trapped(self): self.assertFalse( util.is_trapped( chess.Board("q3k3/7p/8/4N2q/3PP3/4B3/8/4K2R b - - 0 1"), parse_square("h5"))) self.assertTrue( util.is_trapped( chess.Board("q3k3/7p/8/4N2q/3PP3/4B3/7R/4K2R b - - 0 1"), parse_square("h5"))) self.assertFalse( util.is_trapped( chess.Board("q3k3/7p/8/4N2b/3PP3/4B3/7R/4K2R b - - 0 1"), parse_square("h5"))) self.assertFalse( util.is_trapped( chess.Board("4k3/7p/8/4N2q/3PP2p/4B3/8/4K3 b - - 0 1"), parse_square("h5"))) self.assertTrue( util.is_trapped(chess.Board("8/3P4/8/4N2b/7p/6N1/8/4K3 b - - 0 1"), parse_square("h5")))