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: X
o 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, X
es rojo y Y
azul:
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
OOOO
complemento alXXXX
oYYYY
.) Tome el último elemento del último elemento, y eso seráX
oY
segú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}|XXX
a(.{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
,Y
yO
(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 laRegExp
llamada.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] for
y1 for
.*(len(m)-1)
podría ser*~-len(m)
. Cómo funciona.] for
y1 for
todavía están allí.K (ngn / k) ,
5855 bytesPruébalo en línea!
{
}
funcionar con argumentox
+!6 7
todos los pares posibles de 0..5 y 0..6{
}'
para cada uno de ellos4#1-+!3 3
son 4 de las 8 direcciones orto-diagonales:(1 1;1 0;1 -1;0 1)
3+[
]\&4
comience 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 dex
88<
¿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
t
tiene 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