I am very interested in the subject of minimal notation to implement a particular set of problems, and have studied TicTacToe in depth. I suggest you look at my Beads version. It is a graphical version not merely a disembodied logic system, with your same logic fused with the need to subdivide the screen into subregions, size the letters, draw messages announcing whose turn it is. These are the realities of an actual implementation. Way too easy just to skip over the graphic parts. In most of my products the drawing section of the code exceeds the logic section, which is actually the easy part. Note that the term "row", "diagonal" "column", would have to be explained to the computer more specifically. In my spec i call for the winning 3 in a row(s) to be highlighted (note that it is possible to have 2 winning paths at once). I would wager a reasonable sum that my implementation is within 20% of the theoretical minimum. Here is a link to the code and the spec:
https://github.com/magicmouse/beads-examples/tree/master/Example%20-%20Tic-Tac-Toe
Since TicTacToe is only a problem of perhaps only 500 words, the difference between implementations in various languages is fairly small, although you would be surprised at how tricky making it fit on portrait and landscape screens nicely is in many languages. Since CSS and HTML are crippled languages and have no IF statements it makes it hard to do in vanilla JS. Fixed coordinates are so 1980's, so expect that your implementation has to contend with display aspect ratios sensibly. But even with these requirements, most languages can do this problem pretty well. I would be curious to see someone else's implementation of the same spec. Too often people change the program, so you can't do an apples-to-apples comparison.
Chess is a more challenging case, as it is around 1500 words to implement, about 3 times the length of TTT.
You could add to the tictactoe problem an extra feature that you want the proportion of possible futures of win/draw/lose for each possible move on a turn. there are only 9! possible games, and since the first move can only be one of 3 types, it is really 3 x 8! which is not a big number. That is a fascinating wrinkle to the game that takes this from a trivial program to something even harder than chess. And speaking of chess, there is a maniac programmer named Toledo who has the shortest chess program possible, an insanely devious and compact implementation that is baffling.