Kata del TicTacToe en Kotlin

Escribe el código para representar una entidad que almacene el tablero de juego del 3 en raya, y que además tenga:
-
Un método
move()
con 2 parámetros, fila y columna, que permita añadir un movimiento al tablero -
Un método
findWinner()
, que devuelva el ganador (X
,Y
oDraw
), onull
si la partida aún no ha terminado
Condiciones
-
Inicialmente, todas las celdas del tablero están vacías
-
El primer jugador es
X
-
Cada movimiento se irá aplicando de forma alterna a los dos jugadores
-
Una celda ocupada no puede modificarse
-
El juego acaba cuando todas las celdas en una fila, una columna o una diagonal están tomadas por el mismo jugador, que será el ganador
-
El juego acaba en empate cuando todas las celdas están ocupadas y no hay un ganador según las condiciones del punto anterior
-
Si se pregunta por el ganador cuando no ha acabado la partida, se devuelve
null
Cómo conseguir la localización amplia en Android
Cómo pedir permisos en Jetpack Compose