Store the rotations and flips of the board along with their corresponding legal moves in the tt table as well
Instead of having generate_legal_moves() always find the empty points, derive the empty points by removing the last played point from the previous empty points.