So we've discussed the design decision behind the board, the pieces, and the representation of the board. Let's continue with talking about the algorithmic optimizations for checking the victory condition.
I recently had a programming challenge for an interview that required me to code a "functional" version of Connect. I explain some of my design decisions here