La partida de gato
- O(n²) · Muy difícil
- Plan completo
- Python
- JavaScript
- rejillas
- condicionales
- ciclos
Enunciado
En el cuaderno de Rosalba, la maestra de sexto, aparecen partidas de gato dibujadas en los márgenes. Ella las revisa de una en una: algunas ya se acabaron, otras van a medias y otras no pudieron haber pasado nunca. Escribe una función que reciba tablero, una lista de tres textos de tres caracteres cada uno: en cada casilla hay una X, una O o un espacio si la casilla está libre. Alinear tres es juntar tres iguales en un renglón, en una columna o en una de las dos diagonales.
En el gato, X tira primero y de ahí se van turnando, así que nunca hay más O que X ni dos X más que O. Y en cuanto alguien alinea tres, la partida se acaba ahí mismo: después de ese tiro ya no tira nadie, ni el que alineó ni el otro.
Regresa uno de estos cuatro textos. "imposible" si el dibujo no pudo salir de una partida así, y son tres los motivos: que las cuentas de X y de O no cuadren con los turnos, que los dos hayan alineado tres, o que alguien haya alineado tres y en el tablero se vean tiros que ya no cabían después de ese. "gana" si el dibujo es posible y alguien alineó tres. "empate" si nadie alineó tres y ya no queda ninguna casilla libre. "sigue" si nadie alineó tres y todavía queda alguna.
No importa quién ganó, solo que alguien ganó: con ["XOO", "X ", "X "] la columna de la izquierda es de X, así que regresas "gana". Con ["O ", " X ", " "] la partida apenas va: "sigue". Con ["OOX", " ", " "] hay dos O y una sola X, y con esos turnos eso no pudo pasar: "imposible". Con ["XXX", "OO ", "O "] la X cerró el renglón de arriba y la partida se acabó en ese tiro, pero en el dibujo hay tiros de O que ya no cabían: también es "imposible".
Ejemplos
X alineó la columna de la izquierda
["XOO", "X ", "X "] → "gana"
La partida apenas va
["O ", " X ", " "] → "sigue"
Dos O y una sola X
["OOX", " ", " "] → "imposible"
X alineó y O tiró después
["XXX", "OO ", "O "] → "imposible"
O alineó la columna de en medio
["XOX", " OX", " O "] → "gana"
X alineó el renglón de arriba
["XXX", "XOO", "O "] → "gana"
O alineó el renglón de abajo
["XOX", " XX", "OOO"] → "gana"
X alineó la diagonal que baja
["XOO", " X ", " X"] → "gana"
O alineó la diagonal que sube
[" O", " OX", "OXX"] → "gana"
Se llenó el tablero sin que nadie alineara
["XOX", "XXO", "OXO"] → "empate"
Otro tablero lleno sin ganador
["XXO", "OXX", "XOO"] → "empate"
Cinco tiros y la partida sigue
["X ", " XO", "OX "] → "sigue"
Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.
Empiezas con esto
Python
def estado_del_gato(tablero):
passJavaScript
function estadoDelGato(tablero) {
}Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.