opted for run-length encoding instead of a hash to represent board state