Considereu el joc del tres-en-ratlla estès a un tauler de mides
,
amb
.
Per torns, el primer jugador posa una ‘X’, el segon jugador
posa una ‘O’, etc., fins que algun dels jugadors
aconsegueix posar tres (o més) de les seves fitxes juntes en una línia
formant un tres-en-ratlla, o fins que no es poden fer més jugades. Els
tres-en-ratlla es poden fer horitzontalment, verticalment o en les dues
diagonals.
Donat un tauler en el qual s’han fet algunes jugades, podeu decidir quin serà el resultat si els dos jugadors juguen perfectament a partir d’ara?
L’entrada consisteix en la descripció de diversos taulers, cadascun
amb
,
seguida de tres línies amb
caràcters
cadascuna. Els punts indiquen posicions encara lliures. Suposeu
,
que encara ningú ha aconseguit cap tres-en-ratlla, i que el nombre de
posicions amb ‘X’ és o bé igual al nombre de posicions amb
‘O’ (li toca jugar al primer jugador) o bé un més que el
nombre de posicions amb ‘O’ (i li toca jugar al segon
jugador).
Per a cada cas, escriviu el resultat de la partida suposant les
millors jugades. Escriviu ‘X’ si guanyarà el primer
jugador, ‘O’ si guanyarà el segon, o ‘E’ si
serà empat.
La solució esperada és una programació dinàmica amb “memoization”. Les mides són tan petites perquè el nombre de taulers possibles creix molt ràpidament.
Input
3 ... .X. ... 4 .X.. O.OX OX.. 4 OO.O X..X XO.X 3 XXO OOX XOX 4 .... .... ....
Output
E X O E X