Bird
Raised Fist0
LLDsystem_design~5 mins

Special moves (castling, en passant) in LLD - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is castling in chess and when can it be performed?
Castling is a special move involving the king and one rook. It can be performed if neither piece has moved before, there are no pieces between them, the king is not in check, and the squares the king passes over are not under attack.
Click to reveal answer
beginner
Explain the en passant move in chess.
En passant is a special pawn capture that can occur immediately after an opponent's pawn moves two squares forward from its starting position, and your pawn could have captured it if it had moved only one square. You capture the pawn as if it moved only one square.
Click to reveal answer
intermediate
What conditions must be checked in a system to validate castling?
The system must check that the king and rook have not moved, no pieces are between them, the king is not currently in check, and the king does not pass through or end on a square under attack.
Click to reveal answer
intermediate
How does a system detect if an en passant capture is possible?
The system tracks the last move to see if a pawn moved two squares forward. If an opposing pawn is adjacent to the destination square, it can capture en passant on the next move only.
Click to reveal answer
advanced
Why is it important to handle special moves like castling and en passant carefully in a chess system design?
Because these moves have unique rules and exceptions, handling them correctly ensures the game logic is accurate and fair, preventing illegal moves and maintaining game integrity.
Click to reveal answer
Which piece moves during castling?
AOnly the king
BKing and queen
CTwo rooks
DKing and rook
En passant can only be performed when:
AA pawn moves two squares forward from its starting position
BA pawn reaches the last rank
CA rook moves for the first time
DThe king is in check
Which condition invalidates castling?
AKing has moved before
BRook has not moved
CNo pieces between king and rook
DKing is not in check
How long after the opponent's pawn moves two squares can en passant be performed?
AAfter two moves
BAny time later in the game
COnly immediately on the next move
DOnly if the pawn reaches the last rank
In system design, why track the last move for en passant?
ATo check for checkmate
BTo know if en passant capture is possible
CTo update the score
DTo reset the game
Describe the rules and conditions that a system must check to allow castling.
Think about the king's safety and piece positions.
You got /4 concepts.
    Explain how a chess system should detect and handle the en passant move.
    Focus on the timing and position of pawns.
    You got /4 concepts.

      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