I decided to do some simple utility functions around a tic-tac-toe board type, and it does start to figure some interesting things out on its own, like realizing that after checking the diagonal, you have to check the reverse diagonal.