I've been obsessing with Tic Tac Toe recently, with my post of a bot that plays best-defense against a human player. Along the way I bumped into this thread from 4 years ago, which shows a somewhat golfed and obfuscated script that plays two humans.

I posted my own entry, but wasn't satisfied with it. After some more tinkering and an epiphany or two, I came up with this, measuring in at 159 characters:

The challenge: Create a script that follows the rules below, in as few characters as possible.

Rules:

Standard Tic Tac Toe rules must be followed (e.g., the board is 3x3, each square can be played only once, X and O alternate turns.)

A representation of the current game state (the board) must be displayed after each turn. This can take any form that is understandable. (Mine is the squares being numbered 1 through 9 and displayed on a 3x3 console grid)

An indicator of who's (X or O) turn it is must be displayed before each turn.

A mechanism to accept and validate input must be provided (e.g., it's X's turn until he picks a legal square).

A winning move must exit the game and display who won.

A "cat" game (tie) must exit and display "Tie" or "Cat" after the last square has been played.

The relaxation's are you automatically lose if you try to
cheat :-P i.e; given invalid input UPDATE: this can
be remdedied with a goto but that brings it up to 153. The
output is a little jury-rigged. I use 0 instead of O to
allow for some shaving. Also, instead of where you die $p,
the loser dies in this game.