Files
wehub-resource-sync dde272c4b8
i18n - Build Validation / Validate i18n Builds (24) (push) Has been cancelled
CI - Node.js / Lint (24) (push) Has been cancelled
CI - Node.js / Build (24) (push) Has been cancelled
CI - Node.js / Test (24) (push) Has been cancelled
CI - Node.js / Test - Upcoming Changes (24) (push) Has been cancelled
CI - Node.js / Test - i18n (italian, 24) (push) Has been cancelled
CI - Node.js / Test - i18n (portuguese, 24) (push) Has been cancelled
CD - Docker - GHCR Images / Build and Push Images (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:55:53 +08:00

2.6 KiB

id, title, challengeType, dashedName
id title challengeType dashedName
69738771fb5a7b8b24cca29f Challenge 173: Valid Pawn Moves 29 challenge-173

--description--

Given the position of one of your pawns on a chessboard, return an array of all the valid squares it can move to in ascending order.

A standard chessboard is 8x8, with columns labeled A through H (left to right) and rows labeled 1 through 8 (bottom to top). It looks like this:

A8 B8 C8 D8 E8 F8 G8 H8
A7 B7 C7 D7 E7 F7 G7 H7
A6 B6 C6 D6 E6 F6 G6 H6
A5 B5 C5 D5 E5 F5 G5 H5
A4 B4 C4 D4 E4 F4 G4 H4
A3 B3 C3 D3 E3 F3 G3 H3
A2 B2 C2 D2 E2 F2 G2 H2
A1 B1 C1 D1 E1 F1 G1 H1

For this challenge:

  • You are the player on the bottom of the board.
  • Pawns can only move one square "up".
  • Unless the pawn is in the starting row (row 2), then it can move one or two squares up.

For example, given "D4", return ["D5"], the only square your pawn can move to. Given "B2", return ["B3", "B4"], because it's on the starting row and needs to be in ascending order.

--hints--

find_pawn_moves("D4") should return ["D5"].

({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(find_pawn_moves("D4"), ["D5"])`)
}})

find_pawn_moves("B2") should return ["B3", "B4"].

({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(find_pawn_moves("B2"), ["B3", "B4"])`)
}})

find_pawn_moves("A7") should return ["A8"].

({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(find_pawn_moves("A7"), ["A8"])`)
}})

find_pawn_moves("G2") should return ["G3", "G4"].

({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(find_pawn_moves("G2"), ["G3", "G4"])`)
}})

find_pawn_moves("E3") should return ["E4"].

({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(find_pawn_moves("E3"), ["E4"])`)
}})

--seed--

--seed-contents--

def find_pawn_moves(position):

    return position

--solutions--

def find_pawn_moves(position):
    column = position[0].upper()
    row = int(position[1])
    moves = []

    if row >= 8:
        return moves

    moves.append(f"{column}{row + 1}")

    if row == 2:
        moves.append(f"{column}{row + 2}")

    return moves