---
id: 69738771fb5a7b8b24cca29f
title: "Challenge 173: Valid Pawn Moves"
challengeType: 29
dashedName: 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"]`.

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