Back to Freecodecamp

Challenge 173: Valid Pawn Moves

curriculum/challenges/english/blocks/daily-coding-challenges-python/69738771fb5a7b8b24cca29f.md

latest2.4 KB
Original Source

--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:

A8B8C8D8E8F8G8H8
A7B7C7D7E7F7G7H7
A6B6C6D6E6F6G6H6
A5B5C5D5E5F5G5H5
A4B4C4D4E4F4G4H4
A3B3C3D3E3F3G3H3
A2B2C2D2E2F2G2H2
A1B1C1D1E1F1G1H1

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"].

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

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

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

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

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

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

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

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

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

--seed--

--seed-contents--

py
def find_pawn_moves(position):

    return position

--solutions--

py
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