← All Games

Ultimate Tic-Tac-Toe Tournament

About Ultimate Tic-Tac-Toe
  • Ultimate Tic-Tac-Toe is played on a 9×9 board divided into nine 3×3 sub-boards. Players alternate placing their mark anywhere on the grid, but with a key constraint: the sub-board you must play in is determined by the cell your opponent chose within their sub-board. For example, if your opponent plays in the top-right cell of their sub-board, you must play somewhere in the top-right sub-board of the full grid. If you are sent to a sub-board that is already won or tied, you may play anywhere. Win a sub-board by getting three in a row within it. Win the game by capturing three sub-boards in a row on the macro (outer) board.
  • Actions are (row, col) pairs in [0, 8]×[0, 8]. state.forced_sub gives the (sr, sc) sub-board index the current player must play in, or None if the player has a free choice.
Leaderboard
#TeamWinsLossesDrawsWin RateGames Variance?We compute your agent's win rate against each individual opponent, then measure how much those per-opponent win rates vary. An agent that performs similarly against all opponents will have a low score. An agent that performs well against some opponents but poorly against others will have a high score. Status
1 Baseline 2 baseline 0 0 0 0.0% 0 0.0000 OK
2 Random Agent baseline 0 0 0 0.0% 0 0.0000 OK

Leaderboard updates nightly at midnight ET.

Student Status
#StudentStatusLast Submitted
Tournament Rules Download Starter Agent
  • Place your custom_agent.py in your personal submission folder: ~/Sum2026/ultimate_tictactoe/custom_agent.py. Changes are picked up automatically and validated within ~30 seconds.
  • Once validated, your scores will appear on the leaderboard at the next nightly recompute (midnight ET).
  • Whenever you update your agent, your previous submission is replaced. Your latest validated submission is used in the next recompute.
  • Agents have a 1-second time limit per action. If the limit is exceeded, that game is forfeited. The Status column will display Timed Out when this occurs.
  • If your agent throws an uncaught exception during a game, an arbitrary legal action is taken and the match continues. Your agent will be marked Exception in the Status column.
  • The code for the starter agent picks actions at random. It's a valid base that will pass validation and play matches.
  • Download the starter package above. It contains reference files (state.py, the game file, etc.) to help you develop locally.