Introducción
Connect Four es un juego en el que intentas obtener cuatro en fila: horizontal, vertical o diagonal. En este código de golf, intentaremos encontrar quién ganó, dado un tablero de juego. Siempre habrá un ganador y solo un ganador.
Tarea
Dado un tablero de Connect Four, descubra quién es el ganador: Xo Y. Siempre habrá un ganador y solo un ganador. El tamaño del tablero siempre será de 6 por 7, como se ve en el cuadro de juego.
Dado un tablero, el siguiente tablero, en este caso, Xes rojo y Yazul:
Su aporte sería:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOXOO
OOOXXOO
OOXYYYY
Puede separar las filas del juego por carácter de nueva línea (como arriba), sin dividir caracteres, dividir las filas en una matriz o lista, o puede ingresar una matriz de caracteres.
Salida correcta para este ejemplo:
Y
Y tiene cuatro en fila; entonces, Y es el ganador. Entonces, sacamos Y.
Casos de prueba
Entrada:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOOOO
OOYYOOO
OYXXXXO
Salida:
X
Entrada:
OOOOOOO
OOOOOOO
OOOOOOO
XXXXOOO
YXYYOOO
YXYYXYX
Salida:
X
Entrada:
YXYYXOO
XYXXYOO
XXXYYOO
YYYXXOO
XXYYYYO
XXYYXXO
Salida:
Y
Entrada:
OOOOOOO
OOOOOOO
OYOOOOO
OOYOOOO
OOOYOOO
OOOOYOO
Salida:
Y
Entrada:
OOOOOOO
OOOOOOO
OYOOOOX
OOYOOOX
OOOXOOX
OXOXYOX
Salida:
X
Puntuación
¡La menor cantidad de bytes gana!


Respuestas:
Jalea , 19 bytes
Pruébalo en línea!
El núcleo de esta respuesta se copia de mi respuesta a esta pregunta muy similar .
Explicación
Bastante simple: tomamos todas las filas, columnas, diagonales y antidiagonales (al igual que en el validador n-reinas), luego tomamos todas las subcadenas de longitud 4 de esas, luego las ordenamos de tal manera que la línea ganadora de 4 se clasifique para el fin. (Necesitamos el desempate en caso de que haya un
OOOOcomplemento alXXXXoYYYY.) Tome el último elemento del último elemento, y eso seráXoYsegún sea necesario.fuente
Retina,
5148 bytesGracias a Martin Ender por guardar 3 bytes
Pruébalo en línea!
Toma datos como una lista de filas separadas por comas
fuente
(.{7}X){3}|XXXa(.{7}X|X)\4\4: tio.run/nexus/retina#fc4xCsMwDAXQPfcI2GC6NDS5QaeipcP/…\4: desea repetir el efecto de la.{7}cadena coincidente, no. (Y los grupos de equilibrio probablemente serían demasiado largos).Javascript (ES6), 54
55Editar 1 byte guardado gracias @Arnauld
Solo verifico si X es el ganador, ya que siempre habrá un ganador y solo un ganador
La entrada es una cadena con cualquier separador, como en la respuesta de @ Arnauld
fuente
Jalea ,
2522 bytesToma una lista de cadenas (o lista de caracteres) formada por
X,YyO(también funcionaría con reemplazos de manera que el espacio tenga un ordinal más bajo que ambos contadores).Pruébalo en línea! o ejecute una versión aumentada que tome una cadena multilínea.
¿Cómo?
fuente
JavaScript (ES6),
777669 bytesGuardado 7 bytes gracias a Neil
Toma la entrada como una cadena separada por algo , donde algo es básicamente cualquier carácter.
Casos de prueba
Mostrar fragmento de código
fuente
b.match()? Debería ahorrar en laRegExpllamada.match()estaba haciendo una conversión implícita aRegExp. ¡Gracias!Python 2 , 143 bytes
Toma una lista de cadenas o una lista de caracteres. Codificado para 6 filas por 7 columnas, como lo garantiza la especificación.
Pruébalo en línea!
fuente
PHP, 71 bytes
Versión en línea
fuente
Python 2 ,
201143129128107 BytesDecidí agregar horizontal, vertical y diagonal juntos en una lista y luego agregar un incremento y luego buscar X por veces. Y dado que siempre habrá un ganador, puedo suponer que Y ganó si X no. Este código toma una matriz de todas las diferentes piezas y lugares vacíos.
Pruébalo en línea!
Créditos
fuente
i:] for,i, r,r] fory1 for.*(len(m)-1)podría ser*~-len(m). Cómo funciona.] fory1 fortodavía están allí.K (ngn / k) ,
5855 bytesPruébalo en línea!
{}funcionar con argumentox+!6 7todos los pares posibles de 0..5 y 0..6{}'para cada uno de ellos4#1-+!3 3son 4 de las 8 direcciones orto-diagonales:(1 1;1 0;1 -1;0 1)3+[]\&4comience con una lista de cuatro ceros (&4) y realice 3 pasos en cada una de las direccionesx+/:/:comenzar desde cada posición posible y dar los pasos en cada dirección posible,/concatenar. en este punto tenemos una matriz de 4 listas de pares de coordenadas, algunas de ellas extendidas más allá del tablerox ./:/:buscar las celdas correspondientes dex88<¿cuáles de ellos son"Y"-s? (88 es el código ASCII de"X")&/'"Y"¿Qué 4 listas consisten solo en -s? (y-reduce-cada)|/¿hay al menos uno de esos? (o-reducir)"XY"@si es falso"X", si es verdadero"Y"fuente
Zsh ,
207 ...159 bytesHistorial de versiones: 4 iteraciones para ~ 25 bytes la primera semana; luego 3 iteraciones más por ~ 25 bytes 6 meses después.
( primero ) ( segundo ) ( tercero ) ( cuarto ) ( quinto ) ( sexto ) ¡Pruébelo en línea!En el pie de página, imprimo tanto la placa de entrada como la matriz que construimos a partir de ella en stderr. Desplácese hacia abajo para depurar para verlos. La matriz que construimos es mucho más larga ahora, ya que
ttiene un producto cartesiano con placa de entrada en cada llamada. (Oye, acortó el código en unos pocos bytes).Hay mucho que cubrir aquí, así que moví los comentarios (sexta edición) a una esencia anotada .
(tl; dr: concatenar transposiciones de la matriz original, pero asegúrese de mantenerlas separadas)
fuente