09 Sept 2026Go / Python / TypeScriptEasy

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
  • Python available-captures-for-rook/solution.py
  • TypeScript available-captures-for-rook/solution.ts

Solution files

Goavailable-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
}
Pythonavailable-captures-for-rook/solution.py
class Solution:
    def numRookCaptures(self, board: list[list[str]]) -> int:
        rook = next((row, column) for row in range(class="syntax-number">8) for column in range(class="syntax-number">8) if board[row][column] == class="syntax-string">"R")
        captures = class="syntax-number">0
        for dr, dc in ((-class="syntax-number">1, class="syntax-number">0), (class="syntax-number">1, class="syntax-number">0), (class="syntax-number">0, -class="syntax-number">1), (class="syntax-number">0, class="syntax-number">1)):
            row, column = rook[class="syntax-number">0] + dr, rook[class="syntax-number">1] + dc
            while class="syntax-number">0 <= row < class="syntax-number">8 and class="syntax-number">0 <= column < class="syntax-number">8 and board[row][column] == class="syntax-string">".": row, column = row + dr, column + dc
            if class="syntax-number">0 <= row < class="syntax-number">8 and class="syntax-number">0 <= column < class="syntax-number">8 and board[row][column] == class="syntax-string">"p": captures += class="syntax-number">1
        return captures
TypeScriptavailable-captures-for-rook/solution.ts
function numRookCaptures(board: string[][]): number {
  let rookRow = class="syntax-number">0; let rookColumn = class="syntax-number">0;
  for (let row = class="syntax-number">0; row < class="syntax-number">8; row += class="syntax-number">1) for (let column = class="syntax-number">0; column < class="syntax-number">8; column += class="syntax-number">1) if (board[row][column] === class="syntax-string">"R") { rookRow = row; rookColumn = column; }
  let captures = class="syntax-number">0;
  for (const [dr, dc] of [[-class="syntax-number">1, class="syntax-number">0], [class="syntax-number">1, class="syntax-number">0], [class="syntax-number">0, -class="syntax-number">1], [class="syntax-number">0, class="syntax-number">1]]) { let row = rookRow + dr; let column = rookColumn + dc; while (row >= class="syntax-number">0 && row < class="syntax-number">8 && column >= class="syntax-number">0 && column < class="syntax-number">8 && board[row][column] === class="syntax-string">".") { row += dr; column += dc; } if (row >= class="syntax-number">0 && row < class="syntax-number">8 && column >= class="syntax-number">0 && column < class="syntax-number">8 && board[row][column] === class="syntax-string">"p") captures += class="syntax-number">1; }
  return captures;
}