• Indeed. One could have done the whole thing with a simple, static HTML page.

    On top an empty board with 9 clickable fields. Each of them links to a new, pre-rendered board on the same page, with the move of the player and the perfect reply of the computer already in place, and 7 clickable fields. Which link to other, pre-rendered boards with 5 clickable fields remaining, then with three. The last one only has one field open, so this could be pre-filled as a player move.

    All in all this would result in 9x7x5x3=945 pre-rendered boards max on that page. And, of course, two links to “You won” and “You Lost”. I’m no HTML junkie, so I have no idea how many bytes one would need to produce such a board, but I’m sure this all could easily done way below 170MB.

    • Some of those boards are impossible, and there are multiple ways to get to most of them, so you only need maybe half of that. There are 5,478 possible valid boards in total if you allow the computer to play any legal move.

      • As I described, I’d need way fewer, as the optimal computer counter-move would already be included in the next board.
        So if you placed your X in the top left field in the starter image, the link would directly go to a field with the X in the top left, the O in the center position, and links in all the remaining seven positions. And of course the pre-calculation will eliminate some of the boards already, e.g. if the player or computer already won after the third move, where placing a fourth will not make sense.