cswork / libraryOpen practice workspace

Coding questions · Snowflake

Validate an extended tic-tac-toe state

This question evaluates the ability to validate game states by reasoning about turn counts, win detection, and termination rules, testing competencies in game-state invariants and correctness checks within the Coding & Algorithms domain.

Problem

You are given a 3×3 tic-tac-toe board state as an array of 3 strings, each of length 3. Each cell is one of:

  • 'X' (player X)
  • 'O' (player O)
  • '.' (empty)

Assume players alternate turns starting with X, and the game ends immediately when a player gets 3 in a row (row, column, or diagonal). No moves can be played after the game ends.

Task (extended vs. basic validity)

Write a function that returns the game status for the given board:

  • "invalid" if the board cannot occur from a valid sequence of moves.
  • "X_wins" if X has already won in a valid way.
  • "O_wins" if O has already won in a valid way.
  • "draw" if the board is full and there is no winner.
  • "X_turn" if the state is valid and it is X's turn to play next.
  • "O_turn" if the state is valid and it is O's turn to play next.

Input

  • board: string[3]

Output

  • One of: invalid, X_wins, O_wins, draw, X_turn, O_turn

Notes / Constraints

  • The input is always 3 strings of length 3.
  • You must enforce turn counts (X goes first, players alternate).
  • You must enforce the “stop playing after win” rule.
  • Consider tricky cases like both players appearing to win, or a win with an impossible move count.

Validate an Extended Tic-Tac-Toe State

Examples

Example 1

Input: (['...','...','...'],)
Output: 'X_turn'

Explanation: No moves have been played yet, so the state is valid and X goes first.

Example 2

Input: (['X..','...','...'],)
Output: 'O_turn'

Explanation: X has made the first move and there is no winner, so it is now O's turn.

Hints

  1. Start by counting how many X's and O's are on the board. Only two count relationships are ever possible in a valid game.
  2. Check all 8 possible winning lines. If X wins, X must have exactly one more move than O. If O wins, the counts must be equal.