Antecedentes
Pase a "Tarea" si está familiarizado con Tic-Tac-Toe (¡creo que la mayoría lo está!)
Tic-Tac-Toe es un famoso juego de dos jugadores. Consiste en un tablero de 3x3 que se llena gradualmente por dos jugadores (aclaraciones a continuación); El primer jugador usa el personaje Xy el otro usa O. El ganador es el primero en obtener 3 caracteres ( Xo O) consecutivos e idénticos , ya sea horizontal, vertical o diagonal. En caso de que el tablero esté lleno y ninguno de los jugadores haya logrado obtener tres personajes consecutivos como se describe anteriormente, el juego termina en un empate. Tenga en cuenta que puede haber espacios vacíos al final del juego, en caso de que alguno de los jugadores gane en menos de 9 movimientos en total (esto no puede suceder en caso de empate).
Tarea
Dado un tablero de Tic-Tac-Toe al final de un juego (en forma de una cadena, una matriz, una lista plana de 9 valores ordenados, cualquier otro formato decente), determine quién gana el juego.
La entrada consistirá en valores distintos y consistentes , uno para
X, uno paraOy otro que representa un espacio vacío.Su programa debería poder generar 3 valores distintos, consistentes y no vacíos: uno en caso de que
Xgane, otro en caso de queOgane u otro si los jugadores están empatados.Por favor, especifique estos valores en su respuesta. Puede suponer que la entrada será un tablero Tic-Tac-Toe válido.
Casos de prueba
X, O, _Son los valores de entrada aquí; X wins, O winsy Tieson para la salida.
X O X
O X _
O _ X
Salida: X wins.
X _ O
X O _
X O X
Salida: X wins.
X O X
_ O X
_ O _
Salida: O wins.
X O X
O O X
X X O
Salida: Tie.
Como de costumbre, se aplican todas nuestras reglas estándar. Este es el código de golf , ¡gana el código más corto en bytes en cada idioma!
fuente

Respuestas:
Jalea ,
16 1514 bytesUn enlace monádico que acepta una lista de listas (las filas o columnas) con los valores:
Resultados devueltos:
Nota: usando un valor de cero para
_, y valores iguales pero opuestos paraXyO, este valor (aquí0.155) puede estar en el rango(1/6, 1/7)(exclusivo en ambos extremos): solo elegí un valor en ese rango que dio un resultado de punto flotante representable con precisión para los casos ganadores.Pruébalo en línea!
¿Cómo?
fuente
Javascript (ES6),
10387 bytesEntrada
120Salida
"111""000""T"Explicación
Casos de prueba
fuente
Jalea , 18 bytes
Pruébalo en línea!
X=1,O=-1,_=0X gana =
[1, 1, 1], O gana =[-1, -1, -1], Empate =0Ingrese como una lista de 3 listas de 3 elementos en
(1, -1, 0)cada una.fuente
X=1,O=2,_=3, devuelve1(X gana),2(O gana) o3(empate).Python 3 , 73 bytes
Pruébalo en línea!
Python 2 ,
1009592878277 bytesPruébalo en línea!
Toma la entrada como una cadena separada de nueva línea de
XO_Salidas:
{'XXX'}paraX,{'OOO'}paraO{}por un empateFunciona cortando la cadena en filas, columnas y diagonales:
luego
'XXX'y'OOO'se verifican contra las rodajas.Toma la entrada como una cadena separada de nueva línea de
XO_Salidas:
{'XXX'}paraX,{'OOO'}paraO{}por un empateFunciona cortando la cadena en filas, columnas y diagonales:
luego
'XXX'y'OOO'se verifican contra las rodajas.fuente
[2::2]corta3579, mientras[2:8:2]da357R,
118116115 bytesGracias a @ user2390246 por dos bytes adicionales.
Ligeramente no golfista:
Devuelve
Xsi X gana,Osi O gana yTen caso de empate.Pruébalo en línea!
fuente
M[c(3,5,7)]es más corto para la diagonal opuestaPerl 5 , 58 bytes
Código de 56 bytes + 2 fpr
-p0.Pruébalo en línea!
Salidas
XyOpara victorias, oTpara un empate. Incluye un montón de código de encabezado / pie de página para probar todo a la vez.Alternativa, 58 bytes
Pruébalo en línea!
fuente
Python 2 ,
124118117115 bytes[j*3:j*3+3]a[j*3:][:3].Pruébalo en línea!
Valores de entrada / salida
Xse representa como1Ose representa como2_se representa comoNonefuente
[8,0,3,6,1,4,7,2,5,8,0,4,8,2,4,6]->map(int,'8036147258048246')map(ord,"..."), aunque unnulbyte en medio de una cadena no funcionó ...[j*3:j*3+3]es[j*3:][:3]. Como nota al margen,j*3+3es lo mismo que-~j*3, pero eso es 118 bytes también.01234567...Python 3 , 173 bytes
Pruébalo en línea!
Entrada como una matriz de
1 == X, 0 == O, -1 == _Salida como un solo valor:
2 == X, 1 == O, 0 == TIE-8 bytes gracias a Erik the Outgolfer
fuente
lambda x:h(x,1)*2or+h(x,0)-8 bytes y0 == TIE(que es más bonita).PHP, 70 bytes
Asume
-n(valores predeterminados del intérprete). Además requiere-R(ejecutar<code>para cada línea de entrada), contado como uno.La entrada se toma en una sola línea (exactamente como en la descripción del problema, excepto con todos los espacios en blanco eliminados).
La salida es la siguiente:
1→ X gana,-1→ O gana,0→ Tie.Pruébalo en línea!
fuente
'X Wins'se puede cambiar a'X'(o incluso un número entero, por ejemplo1). Lo mismo se aplica a'O wins'yTie. Dicho esto, 109 bytes .Retina , 49 bytes
Pruébalo en línea! Toma la entrada como una cadena de 11 caracteres de 9
Xs,Oso-s en tres grupos de tres separados por;s, aunque el enlace incluye un encabezado que traduce los casos de prueba dados a este formato. Funciona haciendo coincidir una línea ganadora directamente con un grupo de equilibrio para garantizar que los tres personajes coincidentes sean equidistantes. (Las distancias adecuadas son 0 (línea horizontal), 4 (diagonal inversa), 5 (línea vertical) o 6 (diagonal); otras distancias golpearían;o se extenderían fuera de la cuerda).fuente
Java 8,
1121081061049010293 bytes+12 bytes (90 → 102) debido a la corrección de errores de solo verificar una diagonal en lugar de ambas ...
-9 bytes (102 → 93) usando
replaceAlllugar dematches.De entrada en el formato
XOX OX_ O_X, la producciónX,OoT.Explicación:
Pruébalo aquí.
Explicación regex:
fuente
Retina , 127 bytes
Pruébalo en línea!
... supongo que podrías llamar a esta fuerza bruta ... Pensé que podría haber algún mérito ...
fuente
Retina , 51 bytes
Puerto de mi respuesta Java 8 . De entrada en el formato
XOX OX_ O_X, la producciónX,OoT.Explicación:
Pruébalo aquí.
fuente
J, 34 bytes
Sin golf:
Explicación
Codificación:
Nuestra estrategia de alto nivel es primero crear una matriz cada una de cuyas filas sea una posible victoria. La fila uno es diagonal /, la fila 2 es diagonal \, las tres filas siguientes son las filas y las tres filas finales son las columnas. Esta parte se logra mediante la frase (usando el ítem Modificar
}):Finalmente tomamos el MCD de cada fila:
Gracias a nuestra codificación, cualquier fila con un espacio en blanco tendrá un MCD de 1, al igual que cualquier fila que contenga cualquier combinación de X y Os, porque 2 y 3 son primos. Entonces, todo lo que tenemos que hacer a continuación es encontrar el elemento máximo:
>./Si el juego es un empate, será 1. Si un jugador gana, será el número de ese jugador.
Pruébalo en línea!
fuente
JavaScript, 66 bytes
Manteniéndolo simple.
0corresponde a un espacio en blanco,1una X y2una O.0para un empate,1para X victoria,2para O victoria.Ampliado, ligeramente comentado:
fuente