minimax/README.md

1.8 KiB
Raw Blame History

Minimax

Rules

This game is played in two rounds, starting with an empty eleven-space board. Red always goes first.

On Red's board (i.e, duing the first round), Red's job is to maximize the value of the expression; Blue's job is to minimize it. Players take turns placing the fourteen symbols 0123456789+-×÷ on the board, with the maximizing player taking the first move.

A board's syntax must always be valid. Namely, the following rules are enforced:

  • Each symbol may only be used once
  • The binary operators +-×÷ may not be next to one another, and may not be at the end slots.
  • The unary operator - (negative) must have a number as an argument. Therefore, it cannot be left of an operator (like -×), and it may not be in the rightmost slot.
  • 0 may not follow ÷. This prevents most cases of zero-division, but isn't perfect. ÷-0 will break the game, and ÷0_+ is forbidden despite being valid syntax once the empty slot is filled (for example, with ÷03+). This is done to simplyify game logic, and might be improved later.

Building & Running

As always, run this project with cargo run. The app takes one argument by default: the name of the blue player. This can be any of the following:

  • human: Play against a human
  • random: Play against a random agent (very easy)
  • chase: Play against a simple extremum-chasing agent (easy)
  • diffuse: Play against a slightly more intellegent extremum chaser (medium)
  • brutus: Play against a simple brute-force agent (hard)

For example, cargo run -- random will start a game against a random player. Use your arrow keys and space bar to play.

Additional options are available, see cargo run -- --help.

Win rates against random are as follows:

  • human: ~100%
  • random: ~50%
  • chase: ~70%
  • diffuse: ~76%
  • brutus: ~90%