Short gosta de jogar xadrez. Short também é um homem muito tradicional. Portanto, o Sr. Short está perturbado com a recente tendência de usar a notação algébrica no xadrez moderno, e prefere usar a notação descritiva , como seu pai e o pai dele antes dele.
Nota
Para simplificar esse desafio, optei por não lidar com desambigüidades (como em quando duas peças podem se mover para o mesmo quadrado ou capturar a mesma peça.) Também não há como lidar com passantes, promoções ou castelos.
Notação algébrica para os não iniciados
- Os quadrados do tabuleiro são numerados
a1
no canto inferior esquerdo parah8
o canto superior direito. As letras representam os arquivos (colunas) enquanto os números representam as fileiras (linhas). O rei branco é colocado no início do jogo na praçae1
. - Uma jogada consiste na peça que se moveu + no quadrado de destino. Por exemplo, um rei se mudando para
e2
seriaKe2
. - Se a peça que se moveu for um peão, a letra da peça será omitida. Por exemplo, o movimento inicial de Peão para
e4
é escrito comoe4
. - Se a movimentação for uma captura, a
x
letra será inserida entre a peça e o quadrado de destino. Por exemplo, uma rainha capturando emf7
é anotada comoQxf7
. - Se a peça capturada é um peão, uma vez que se move na diagonal, a notação registra o arquivo do qual o peão se originou. Por exemplo, quando o Peão em
c4
captura uma peça emd5
, o movimento é anotado comocxd5
. - Os símbolos das peças são
K
para rei,Q
rainha,B
bispo,N
cavaleiro eR
torre. Os peões não têm símbolos. - Outras anotações incluem
+
para cheque e#
para xeque-mate. Um peão movendo-se para f7 e dando check éf7+
. Observe falta de espaço.
Notação descritiva para os não iniciados
- Os arquivos são descritos pela peça que começa nele. Por exemplo, qual seria o
e
arquivo em algébrico, se torna o arquivo King ou, resumidamenteK
,. Os outros arquivos são marcados ao lado e depois à peça. Então arquivoh
é o arquivo da Torre do Rei, ouKR
. - As classificações são numeradas do ponto de vista do jogador em movimento. Qual seria o quarto posto em Algebraic, é o quarto posto em branco, mas o quinto lugar em preto.
- Daqui resulta que o quadrado
e4
éK4
para o jogador branco eK5
para o jogador preto. O quadradof7
éKB7
para o jogador branco eKB2
para o jogador preto. - Um movimento é anotado pela peça em movimento, depois um traço e o quadrado do alvo. Então, um peão de se mudar para
K4
éP-K4
. A rainha de se mudar paraKR5
éQ-KR5
. - Uma captura é anotada pela peça capturada e, em seguida
x
, pela peça capturada. Portanto, um bispo capturando um peão éBxP
. Geralmente você precisa marcar qual peão está sendo capturado, mas ignore isso por uma questão de simplicidade. - Os símbolos das peças são
K
para Rei,Q
Rainha,B
Bispo,Kt
Cavaleiro (observe o símbolo diferente),R
Torre eP
Peão. - Outras anotações incluem
ch
para cheque emate
para xeque-mate. Um peão se movendo paraKB7
e dando o cheque éP-KB7 ch
. Observe o espaço.
Entrada
Uma seqüência de notações algébricas se move, delineada por espaços. Não há números de movimento. Por exemplo, o companheiro do Louco fica assim:
f3 e5 g4 Qh4#
Ou o jogo Teed vs Delmar, da mesma página da Wikipedia:
d4 f5 Bg5 h6 Bf4 g5 Bg3 f4 e3 h5 Bd3 Rh6 Qxh5+ Rxh5 Bg6#
O jogo imortal .
e4 e5 f4 exf4 Bc4 Qh4+ Kf1 b5 Bxb5 Nf6 Nf3 Qh6 d3 Nh5 Nh4 Qg5 Nf5 c6 g4 Nf6 Rg1 cxb5 h4 Qg6 h5 Qg5 Qf3 Ng8 Bxf4 Qf6 Nc3 Bc5 Nd5 Qxb2 Bd6 Bxg1 e5 Qxa1+ Ke2 Na6 Nxg7+ Kd8 Qf6+ Nxf6 Be7#
Você pode assumir que a entrada é sempre um jogo válido. Todas as movimentações estão na ordem correta e nenhum dado estranho está presente. Nenhuma jogada incluirá desambiguação .
Por exemplo, o jogo Evergreen, apesar de obviamente ser um jogo válido, não será apresentado devido à 19ª jogada Rad1
,.
Você também pode assumir que todas as listas de movimentação de entrada começam na posição inicial.
Resultado
Uma lista de movimentação, com um formato semelhante, em Notação descritiva.
Por exemplo, o companheiro do tolo:
P-KB3 P-K4 P-KKt4 Q-KR5 mate
Delmar vs Teed:
P-Q4 P-KB4 B-KKt5 P-KR3 B-KB4 P-KKt4 B-KKt3 P-KB5 P-K3 P-KR4 B-Q3 R-KR3 QxP ch RxQ B-KKt6 mate
O jogo imortal:
P-K4 P-K4 P-KB4 PxP B-QB4 Q-KR5 ch K-KB1 P-QKt4 BxP Kt-KB3 Kt-KB3 Q-KR3 P-Q3 Kt-KR4 Kt-KR4 Q-KKt4 Kt-KB5 P-QB3 P-KKt4 Kt-KB4 R-KKt1 PxB P-KR4 Q-KKt3 P-KR5 Q-KKt4 Q-KB3 Kt-KKt1 BxP Q-KB3 Kt-QB3 B-QB4 Kt-Q5 QxP B-Q6 BxR P-K5 QxR ch K-K2 Kt-QR3 KtxP ch K-Q1 Q-KB6 ch KtxQ B-K7 mate
Essa não é a notação descritiva mais simples possível, já que às vezes você não precisa especificar para qual arquivo Knight foi movido (como em, Q-KKt4
pode ser gravado como é impossível Q-Kt4
a movimentação Q-QKt4
). A movimentação BxP
é ambígua (que peão deve ser BxQKtP
) , mas o Sr. Short não se importa muito com isso.
Você pode considerar esses casos de teste.
Nota: escrevi-os à mão. Se você detectar algum erro flagrante, entre em contato.
Regras e Pontuação
- Regras padrão se aplicam: programa com saída para stdout ou função. Nada a stderr. As brechas padrão são proibidas.
- Faça o link para um site onde podemos testar seu código.
- Código de golfe: o código mais curto vence.
Em conclusão
Este é o meu primeiro desafio, então provavelmente cometi alguns erros noobish. O feedback sobre a pergunta (nos comentários, obviamente) é apreciado.
Respostas:
Lote, 554 bytes
s
é a sequência de saída.m
é a movimentação atual (as movimentações são tomadas como parâmetros da linha de comando).c
é o sinalizadorch
oumate
.p
é a peça atual. Se não houver nenhuma peça (ou seja, uma letra minúsculaa-h
), elaP
será substituída. (A substituiçãoN
paraKt
é feita posteriormente para salvar bytes.) A coluna de destino é pesquisada em um dicionário. No entanto, se o movimento for realmente uma captura, o destino se tornará umx
seguido pela peça anteriormente naquele quadrado. De qualquer maneira, o quadrado de destino é definido como a peça que acabou de se mover para lá. Os movimentos são acumulados até que não haja mais parâmetros e depois são impressos.As variáveis
a1
...h8
são usadas para armazenar a última peça vista. O.
prefixo está lá devido à maneira como inicializo a linha de trás; é difícil fazer um loop sobre duas variáveis ao mesmo tempo no Lote, a menos que eu possa começar uma com a.
.fonte