Bird
Raised Fist0
LLDsystem_design~20 mins

Special moves (castling, en passant) in LLD - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Special Moves Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Understanding Castling Conditions

Which of the following is NOT a valid condition for castling in chess?

AThe king is currently in check.
BThere are no pieces between the king and the rook.
CNeither the king nor the rook involved has moved before.
DThe squares the king passes over are not under attack.
Attempts:
2 left
💡 Hint

Think about whether the king can castle while in check.

Architecture
intermediate
1:30remaining
Designing En Passant Detection

In designing a chess game system, which component is most responsible for detecting the possibility of an en passant move?

AThe piece movement module that only moves pieces without validation.
BThe user interface module that highlights possible moves.
CThe game timer module that tracks player time.
DThe move validation module that checks the last move and current board state.
Attempts:
2 left
💡 Hint

Consider which part knows about the last move and rules.

scaling
advanced
2:00remaining
Scaling a Chess Engine for Multiple Games

You are designing a server to handle thousands of simultaneous chess games including special moves like castling and en passant. Which approach best ensures consistent game state and move validation?

AStore game states in a distributed cache without locking mechanisms.
BAllow clients to validate moves locally and send updates without server checks.
CUse a centralized game state service with atomic transactions for each move validation and update.
DProcess moves asynchronously without immediate validation to improve throughput.
Attempts:
2 left
💡 Hint

Think about consistency and correctness under load.

tradeoff
advanced
2:00remaining
Tradeoffs in Representing Castling Rights

Which data structure choice best balances memory efficiency and clarity when tracking castling rights in a chess game system?

AUse four boolean flags indicating castling availability for each rook and king side.
BUse a single integer bitmask where each bit represents a castling right.
CStore castling rights as a string describing allowed moves (e.g., "KQkq").
DMaintain a list of moves that have occurred to infer castling rights dynamically.
Attempts:
2 left
💡 Hint

Consider compactness and ease of checking rights.

estimation
expert
2:30remaining
Estimating Storage for Game History with Special Moves

Estimate the approximate storage size needed to store the full move history of 1 million chess games including special moves like castling and en passant, assuming each move is stored as a 4-byte record. Average moves per game is 80.

AApproximately 320 MB
BApproximately 80 MB
CApproximately 3.2 GB
DApproximately 800 MB
Attempts:
2 left
💡 Hint

Calculate total moves and multiply by bytes per move.

Practice

(1/5)
1. Which of the following conditions must be true for castling to be allowed in a chess game?
easy
A. The king is currently in check and moves two squares towards the rook.
B. Neither the king nor the rook involved has moved before, and no pieces are between them.
C. The rook has moved once, but the king has not moved.
D. The king moves diagonally two squares towards the rook.

Solution

  1. Step 1: Understand castling rules

    Castling requires that neither the king nor the rook involved has moved before, and the squares between them are empty.
  2. Step 2: Check king safety conditions

    The king cannot be in check, nor can it pass through or land on a square under attack during castling.
  3. Final Answer:

    Neither the king nor the rook involved has moved before, and no pieces are between them. -> Option B
  4. Quick Check:

    Castling conditions = Neither the king nor the rook involved has moved before, and no pieces are between them. [OK]
Hint: Castling needs unmoved king and rook with clear path [OK]
Common Mistakes:
  • Allowing castling when king is in check
  • Ignoring if rook has moved
  • Allowing king to move diagonally during castling
2. Which code snippet correctly checks if an en passant move is possible in a chess game for an opponent pawn landing to the right?
easy
A. if pawn.just_moved_two_squares and opponent_pawn.position == pawn.position + (1, 0): allow_en_passant()
B. if pawn.just_moved_two_squares and opponent_pawn.position == pawn.position + (0, -1): allow_en_passant()
C. if pawn.just_moved_two_squares and opponent_pawn.position == pawn.position + (0, 1): allow_en_passant()
D. if pawn.just_moved_two_squares and opponent_pawn.position == pawn.position + (-1, 0): allow_en_passant()

Solution

  1. Step 1: Understand en passant position logic

    En passant capture happens when an opponent's pawn moves two squares forward and lands beside your pawn horizontally.
  2. Step 2: Identify correct position offset

    The opponent pawn must be exactly one square horizontally adjacent (x+1 or x-1), so position + (1, 0) is correct for right side.
  3. Final Answer:

    if pawn.just_moved_two_squares and opponent_pawn.position == pawn.position + (1, 0): allow_en_passant() -> Option A
  4. Quick Check:

    En passant horizontal check = if pawn.just_moved_two_squares and opponent_pawn.position == pawn.position + (1, 0): allow_en_passant() [OK]
Hint: En passant checks horizontal adjacency after two-step pawn move [OK]
Common Mistakes:
  • Checking vertical instead of horizontal adjacency
  • Using wrong coordinate offsets
  • Ignoring the two-square move condition
3. Given this simplified code snippet for castling validation, what will be the output if the king has moved before?
def can_castle(king_moved, rook_moved, path_clear):
    if king_moved or rook_moved:
        return False
    if not path_clear:
        return False
    return True

print(can_castle(True, False, True))
medium
A. None
B. True
C. False
D. Error

Solution

  1. Step 1: Analyze input parameters

    king_moved is True, rook_moved is False, path_clear is True.
  2. Step 2: Follow function logic

    Since king_moved is True, the first if condition triggers and returns False immediately.
  3. Final Answer:

    False -> Option C
  4. Quick Check:

    King moved disables castling = False [OK]
Hint: If king moved, castling returns False immediately [OK]
Common Mistakes:
  • Ignoring king_moved condition
  • Assuming path_clear overrides king_moved
  • Expecting True despite king having moved
4. Identify the bug in this en passant validation code snippet:
def can_en_passant(pawn_pos, opponent_pawn_pos, last_move):
    if last_move == 'two_squares_forward' and abs(pawn_pos[0] - opponent_pawn_pos[0]) == 1:
        return True
    return False

# Example call
print(can_en_passant((4,4), (5,4), 'two_squares_forward'))
medium
A. The function should return False when pawns are adjacent.
B. The function incorrectly compares x-coordinates instead of y-coordinates.
C. The last_move parameter should be a boolean, not a string.
D. The function does not check if pawns are on the same rank (y-coordinate).

Solution

  1. Step 1: Understand en passant position requirements

    En passant requires pawns to be on the same rank (same y-coordinate) and adjacent files (x-coordinates differ by 1).
  2. Step 2: Analyze code logic

    The code checks x-coordinate difference but does not verify if y-coordinates are equal, missing a key condition.
  3. Final Answer:

    The function does not check if pawns are on the same rank (y-coordinate). -> Option D
  4. Quick Check:

    Missing same rank check = The function does not check if pawns are on the same rank (y-coordinate). [OK]
Hint: En passant needs same rank check besides adjacency [OK]
Common Mistakes:
  • Ignoring y-coordinate equality
  • Assuming x difference alone suffices
  • Misusing last_move parameter type
5. You are designing a chess game system that supports castling and en passant. Which design approach best ensures correct validation of these special moves while keeping the system scalable?
hard
A. Track each piece's move history and board state; validate special moves by checking move history and current board conditions.
B. Only check the current board state without tracking move history, assuming special moves are rare.
C. Allow special moves without validation to simplify the system and fix errors later.
D. Hardcode special move rules without tracking piece movement or board state.

Solution

  1. Step 1: Understand requirements for special moves

    Castling and en passant depend on move history (e.g., whether king or rook moved, or if pawn moved two squares last turn) and current board state.
  2. Step 2: Evaluate design options

    Tracking move history and board state allows accurate validation and supports scalability as game complexity grows.
  3. Final Answer:

    Track each piece's move history and board state; validate special moves by checking move history and current board conditions. -> Option A
  4. Quick Check:

    Move history + board state = correct scalable validation [OK]
Hint: Track moves and board state for reliable special move validation [OK]
Common Mistakes:
  • Ignoring move history for special moves
  • Hardcoding rules without flexibility
  • Skipping validation to simplify design