Dada uma grade de letras 8x8 que representa o estado atual de um jogo de xadrez, a tarefa do seu programa é encontrar um próximo movimento para o branco que resulte em xeque-mate (a resposta sempre será conjunta em um movimento).
Entrada
A entrada será em STDIN - 8 linhas de 8 caracteres cada. Os significados de cada caractere são os seguintes:
K/k - king
Q/q - queen
B/b - bishop
N/n - knight
R/r - rook
P/p - pawn
- - empty square
Letras maiúsculas representam peças brancas e letras minúsculas representam preto. O tabuleiro será orientado para que o branco seja reproduzido por baixo e o preto seja reproduzido por cima.
Resultado
Uma mudança para o branco que resulta em xeque-mate, em notação algébrica . Você não precisa anotar quando uma peça foi tirada, nem precisa se preocupar em desambiguar entre duas peças idênticas que podem fazer o mesmo movimento.
Entrada de amostra
Exemplo 1
Entrada:
------R-
--p-kp-p
-----n--
--PPK---
p----P-r
B-------
--------
--------
Resultado:
c6
Exemplo 2
Entrada:
--b-r--r
ppq-kp-p
-np-pn-B
--------
---N----
--P----P
PP---PP-
R--QRBK-
Resultado:
Nf5
Exemplo 3
Entrada:
---r-nr-
-pqb-p-k
pn--p-p-
R-------
--------
-P-B-N-P
-BP--PP-
---QR-K-
Resultado:
Rh5
Você pode presumir que a solução não envolverá roque ou en-passant.
Este é o código-golfe - a solução mais curta vence.
(Exemplos retirados de mateinone.com - quebra-cabeças 81, 82 e 83)