En esta forma del juego Tic-Tac-Chec, el objetivo es mover las piezas de ajedrez para obtener cuatro en una fila. Su objetivo aquí es averiguar si una posición tiene un movimiento ganador.
Reglas
Las reglas son similares, pero no idénticas, a las de Tic-Tac-Chec.
El tablero es de 4 por 4 cuadrados. Cada jugador tiene una torre, un obispo, un caballero y una reina. En tu turno, tienes dos opciones. Puedes mover una de tus piezas ya en el tablero, siguiendo las reglas estándar de ajedrez. O puede colocar una pieza que aún no está en el tablero, en cualquier lugar desocupado.
Si mueve una pieza existente a la pieza de un oponente, su pieza se retira del tablero y se devuelve a ellos. Sin embargo, no puede colocar una nueva pieza encima de la pieza de un oponente.
Tan pronto como un jugador tiene todas sus piezas en una fila (o columna, o diagonal), gana.
Desafío
Escriba un programa completo que acepte un tablero de STDIN y muestre si el jugador blanco puede ganar en el próximo turno.
Entrada
Cuatro cadenas de 4 caracteres cada una. Cada personaje es un espacio o una pieza de ajedrez. Solo se usan torres, obispos, caballeros y reinas, y como máximo puede aparecer uno de cada uno (por color). Ninguno de los jugadores ya tiene un cuatro en fila.
Puede elegir si acepta como entrada los símbolos Unicode para las piezas de ajedrez o las letras. Si elige letras, RBKQ
representa piezas blancas y rbkq
representa piezas negras.
Salida
Si el jugador blanco puede ganar en el siguiente turno, salida true
o 1
. De lo contrario, salida false
o 0
.
Programa
Elija un número X. Su programa puede contener como máximo X caracteres distintos, y ningún personaje puede aparecer más de X veces.
Victorioso
La X más baja gana. En caso de empate, gana la menor cantidad de personajes.
Ejemplos
Estos ejemplos asumen que la entrada usa letras para representar las piezas.
rkb
RB Q
true - the white player can place the knight to complete the bottom row.
-----------------------------------
rk
RBbQ
false - the black bishop prevents the white knight from completing the row.
-----------------------------------
rk
K
RBbQ
true - the white knight can capture the black bishop and complete the row.
-----------------------------------
rkRB
Qb
K
true - the white rook can move down one to complete the diagonal.
Respuestas:
C, 53 caracteres distintos
Esto utiliza
"#%&()*+,-./01234569;<=>BKQR[\]acdefghilmnoprstu{|}
, espacio y nueva línea, distribuidos de la siguiente manera: 24 ×\n
, 33 ×, 20 ×
"
, 2 ×#
, 3 ×%
, 16 ×&
, 46 ×(
, 46 ×)
, 13 ×*
, 12 ×+
, 35 ×,
, 10 ×-
, 2 ×.
, 2 ×/
, 18 ×0
, 9 ×1
, 4 ×2
, 4 ×3
, 4 ×4
, 4 ×5
, 3 ×6
, 3 ×9
, 34 ×;
, 6 ×<
, 46 ×=
, 2 ×>
, 2 ×B
, 2 ×K
, 3 ×Q
, 2 ×R
, 8 ×[
, 1 ×\
, 8 ×]
, 39 ×a
, 23 ×c
, 5 ×d
, 19 ×e
, 15 ×f
, 1 ×g
, 22 ×h
, 36 ×i
, 5 ×l
, 1 ×m
, 35 ×n
, 9 ×o
, 33 ×p
, 44 ×r
, 20 ×s
, 43 ×t
, 15 ×u
, 8 ×{
, 14 ×|
, 8 ×}
.Explicación
Funciona buscando una fila, columna o diagonal que contenga tres de las piezas blancas;
a
apunta a la posición de destino (que no contiene una pieza blanca). Luegoo
se identifica la pieza que falta ( ): es la que no eliminamos de la cadenah
como la vimos.Si la pieza no está en el tablero, debe estar en la mano y solo se puede jugar en un espacio. De lo contrario (si lo encontramos en el tablero), debe estar en una posición en la que pueda moverse hacia la casilla objetivo. Como los movimientos son reversibles, intercambiamos si es necesario, de modo que
a < p
.Primero probamos los movimientos de los caballeros: hay cuatro movimientos legales hacia abajo, y evitamos envolver los bordes izquierdo / derecho del tablero verificando el número de líneas nuevas que pasamos.
Después de eso, probamos los movimientos de torre, y luego los movimientos de alfil, usando un algoritmo similar (y una reina puede usar cualquiera de estos movimientos).
Programa de prueba
Programa de conteo (en C ++)
fuente
6+3
para9
y16+3
para19