Isaac Emmanuel
09 Sept 2026•EasyGo / Python / TypeScript

Available Captures for Rook

Count pawns an unmoving rook can capture along the four board directions before a bishop blocks it.

Locate the rook, scan each cardinal ray, stop at the first nonempty square, and count it only when it holds a pawn.

Complexity

O(rows * columns) time and O(1) space.

Solution files

Go•available-captures-for-rook/solution.go
package main

func numRookCaptures(board [][]byte) int {
	rookRow, rookColumn := 0, 0
	for row := 0; row < 8; row++ {
		for column := 0; column < 8; column++ {
			if board[row][column] == 'R' {
				rookRow, rookColumn = row, column
			}
		}
	}
	captures := 0
	directions := [][]int{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}
	for _, direction := range directions {
		row, column := rookRow+direction[0], rookColumn+direction[1]
		for row >= 0 && row < 8 && column >= 0 && column < 8 && board[row][column] == '.' {
			row += direction[0]
			column += direction[1]
		}
		if row >= 0 && row < 8 && column >= 0 && column < 8 && board[row][column] == 'p' {
			captures++
		}
	}
	return captures
}
Python•available-captures-for-rook/solution.py
class Solution:
    def numRookCaptures(self, board: list[list[str]]) -> int:
        rook = next((row, column) for row in range(8) for column in range(8) if board[row][column] == "R")
        captures = 0
        for dr, dc in ((-1, 0), (1, 0), (0, -1), (0, 1)):
            row, column = rook[0] + dr, rook[1] + dc
            while 0 <= row < 8 and 0 <= column < 8 and board[row][column] == ".": row, column = row + dr, column + dc
            if 0 <= row < 8 and 0 <= column < 8 and board[row][column] == "p": captures += 1
        return captures
TypeScript•available-captures-for-rook/solution.ts
function numRookCaptures(board: string[][]): number {
  let rookRow = 0; let rookColumn = 0;
  for (let row = 0; row < 8; row += 1) for (let column = 0; column < 8; column += 1) if (board[row][column] === "R") { rookRow = row; rookColumn = column; }
  let captures = 0;
  for (const [dr, dc] of [[-1, 0], [1, 0], [0, -1], [0, 1]]) { let row = rookRow + dr; let column = rookColumn + dc; while (row >= 0 && row < 8 && column >= 0 && column < 8 && board[row][column] === ".") { row += dr; column += dc; } if (row >= 0 && row < 8 && column >= 0 && column < 8 && board[row][column] === "p") captures += 1; }
  return captures;
}