¡Juguemos un poco de golf de código!
El desafío es encontrar al ganador de un juego de Tic-Tac-Toe.
Esto se ha hecho muchas veces dando una tabla que tiene un ganador claro pero aquí está el giro:
Las celdas están numeradas así:
1|2|3
-+-+-
4|5|6
-+-+-
7|8|9
Obtiene una matriz de exactamente 9 movimientos así:
{3, 5, 6, 7, 9, 8, 1, 2, 3}
Esto se analiza de la siguiente manera:
- El jugador 1 marca la celda 3
- El jugador 2 marca la celda 5
- El jugador 1 marca la celda 6
- El jugador 2 marca la celda 7
- El jugador 1 marca la celda 9
- El jugador 1 ha ganado
Nota: El juego no se detiene después de que un jugador ha ganado, puede suceder que el jugador perdedor logre obtener tres seguidos después del jugador ganador, pero solo cuenta la primera victoria.
Su trabajo ahora es obtener 9 números como entrada y salida del jugador ganador y la ronda en la que ocurrió la victoria. Si nadie gana, muestra algo constante de tu elección. Puede recibir entradas y proporcionar salidas a través de cualquier media / formato estándar.
¡Que te diviertas!
Algunos ejemplos más según lo solicitado:
{2,3,4,5,6,7,1,8,9} => Player 2 wins in round 6
{1,2,4,5,6,7,3,8,9} => Player 2 wins in round 8
{1,2,3,5,4,7,6,8,9} => Player 2 wins in round 8
fuente
[X, Y]
? En caso de empate, ¿podemos generar algún otro valor consistente? Lo recomiendo, porque imprimir esas cadenas exactas no es realmente parte del golf. Para futuras ideas de desafío, recomiendo usar el sandbox . :-){3, 5, 6, 7, 9, 8, 1, 2, 3}
" - ¿3
realmente debería aparecer dos veces?Respuestas:
Retina , 114 bytes
Pruébalo en línea! ¿De acuerdo con mi respuesta a Tic-Tac-Toe - X u O? . Salidas
X<N>
si el primer jugador gana después de losN
turnos,O<N>
si el segundo jugador gana,T
si ninguno gana. Explicación:Crea un tablero interno y también marca cada movimiento con el jugador cuyo movimiento es.
Aplica un movimiento.
Busca una victoria y, si encuentra una, reemplace el tablero con el ganador y el número de movimientos restantes.
Si los movimientos están agotados y nadie ha ganado, entonces el juego es un empate.
Calcule el número de la ronda a partir del número de movimientos restantes.
fuente
MATL , 39 bytes
La salida es
1
yR
, en líneas separadas, si el usuario 1 gana en la ronda R ;0
yR
, en líneas separadas, si el usuario 2 gana en la ronda R ;Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Javascript (ES6), 130 bytes
Explicación
fuente
Java (OpenJDK 8) , 445 bytes
Pruébalo en línea!
El valor de retorno {1,8} significa que el jugador 1 ganó en la ronda 8. El valor de retorno {0,0} significa empate.
fuente
false
puede reemplazarse por1<0
, y el espacio después del primero]
puede eliminarse.//Code that was submitted
y//End of code
.Kotlin , 236 bytes
Embellecido
Prueba
TIO
TryItOnline
fuente
Python 2 , 170 bytes
Pruébalo en línea! o Pruebe todos los casos de prueba
fuente
Jalea , 38 bytes
Pruébalo en línea!
Jugador 1 triunfo:
[round, 1]
Jugador 2 triunfo:
[round, 2]
Empate:
[0, 0]
fuente
Python 3.6+, 137 bytes
El formato de salida es
winner number:round
o-1
para un empate. El jugador 2 es el0
jugador 1 es1
. Ingrese en forma de una cadena no delimitada de números cuadrados indexados en 1.fuente
Jalea , 35 bytes
Un enlace monádico que toma una lista de los movimientos y devuelve una lista,
[move, player]
donde los jugadores se identifican como1
(primero en actuar) y0
(segundo en actuar).Pruébalo en línea!
¿Cómo?
fuente
Python 2, 168 bytes
Salidas (jugador, ronda) o 0 para un empate.
Mapea el juego en un cuadrado mágico de 3 por 3 y busca conjuntos de 3 Os o X que suman 15.
fuente
Limpio ,
244... 220 bytesPruébalo en línea!
La cadena iterada en
h
contiene no imprimibles, y es equivalente a"\003\001\000\000"
.fuente
Python 2 ,
140136134 bytesPruébalo en línea!
EDITAR: 4 bytes + 2 bytes gracias a Eric the Outgolfer.
Emite una tupla (playerNumber, roundNumber) o False si no hay un ganador.
fuente