Nesta forma de jogo Tic-Tac-Chec, o objetivo é mover peças de xadrez para obter quatro em linha. Seu objetivo aqui é descobrir se uma posição tem uma jogada vencedora.
Regras
As regras são semelhantes, mas não idênticas, às do Tic-Tac-Chec.
O tabuleiro é de 4 por 4 quadrados. Cada jogador tem uma torre, bispo, cavaleiro e rainha. Por sua vez, você tem duas opções. Você pode mover uma de suas peças já no tabuleiro, seguindo as regras padrão do xadrez. Ou você pode colocar uma peça ainda não no quadro, em qualquer lugar desocupado.
Se você mover uma peça existente para a peça do oponente, a peça é retirada do tabuleiro e devolvida a eles. No entanto, você não pode colocar uma nova peça em cima da peça de um oponente.
Assim que um jogador tiver todas as suas peças seguidas (ou coluna ou diagonal), ele vence.
Desafio
Escreva um programa completo que aceite uma placa do STDIN e mostre se o jogador branco pode vencer no próximo turno.
Entrada
Quatro strings de 4 caracteres cada. Cada personagem é um espaço ou uma peça de xadrez. Somente gralhas, bispos, cavaleiros e rainhas são usadas e, no máximo, uma de cada (por cor) pode aparecer. Nenhum dos jogadores já tem quatro em linha.
Você pode optar por aceitar como entrada os símbolos Unicode para as peças de xadrez ou letras. Se você escolher letras, RBKQ
representa peças brancas e rbkq
peças pretas.
Resultado
Se o jogador branco puder vencer no próximo turno, produza true
ou 1
. Caso contrário, saia false
ou 0
.
Programa
Escolha um número X. Seu programa pode conter no máximo X caracteres distintos e nenhum caractere pode aparecer mais de X vezes.
Ganhando
O menor X vence. Em caso de empate, o menor número de personagens vence.
Exemplos
Estes exemplos assumem que a entrada usa letras para representar as peças.
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.
Respostas:
C, 53 caracteres distintos
Isso usa
"#%&()*+,-./01234569;<=>BKQR[\]acdefghilmnoprstu{|}
espaço e nova linha, distribuídos da seguinte forma: 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
, 2 × , 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 ×}
.Explicação
Ele trabalha procurando uma linha, coluna ou diagonal contendo três das peças brancas;
a
aponta para a posição de destino (ainda não contém uma peça branca). Então a peça que falta (o
) é identificada - é a que não removemos da cordah
como a vimos.Se a peça não estiver no tabuleiro, ela deve estar na mão e só pode ser jogada em um espaço. Caso contrário (se o encontrarmos no quadro), ele deverá estar em uma posição em que possa se mover para o quadrado alvo. Como os movimentos são reversíveis, trocamos, se necessário, para que
a < p
.Testamos os movimentos de cavaleiro primeiro - há quatro movimentos legais para baixo e evitamos envolver as bordas esquerda / direita do quadro verificando o número de novas linhas que passamos.
Depois disso, testamos movimentos de torre e, em seguida, movimentos de bispo, usando um algoritmo semelhante (e uma rainha pode usar qualquer um desses movimentos).
Programa de teste
Programa de contagem (em C ++)
fonte
6+3
para9
And16+3
for19