Al Sr. Short le gusta jugar ajedrez. Short también es un hombre muy tradicional. Por lo tanto, el Sr. Short está perturbado por la tendencia reciente de usar la notación algebraica en el ajedrez moderno, y preferiría usar la notación descriptiva , como su padre y el padre de su padre antes que él.
Nota
Para simplificar este desafío, elegí no lidiar con desambiguaciones (como en, cuando dos piezas pueden moverse a la misma casilla, o pueden capturar la misma pieza). Tampoco hay que lidiar con pasatiempo, promoción o enroque.
Notación algebraica para los no iniciados
- Los cuadrados del tablero están numerados desde
a1
abajo a la izquierda hastah8
arriba a la derecha. Las letras representan los archivos (columnas) mientras que los números representan los rangos (filas). El Rey blanco se coloca al comienzo del juego en la plazae1
. - Un movimiento consiste en la pieza que se movió + el cuadrado de destino. Por ejemplo, un Rey que se muda a
e2
seríaKe2
. - Si la pieza que se movió es un Peón, se omite la letra de la pieza. Por ejemplo, el movimiento inicial a Peón
e4
se escribe comoe4
. - Si el movimiento es una captura, entonces la
x
letra se inserta entre la pieza y el cuadrado de destino. Por ejemplo, una Reina capturando enf7
se anota comoQxf7
. - Si la pieza de captura es un Peón, ya que se mueve en diagonal, la notación registra el archivo del cual se originó el Peón. Por ejemplo, cuando el Peón en
c4
captura una pieza end5
, el movimiento se anota comocxd5
. - Los símbolos de pieza son
K
para Rey,Q
para Reina,B
para Obispo,N
para Caballero yR
para Torre. Los peones no tienen símbolos. - Otras anotaciones incluyen
+
para cheque y#
para jaque mate. Un peón moviéndose a f7 y dando cheque esf7+
. Tenga en cuenta la falta de espacio.
Notación descriptiva para los no iniciados
- Los archivos se describen por la pieza que comienza en él. Por ejemplo, lo que sería el
e
archivo en Algebraic, se convierte en el archivo King o, para abreviarK
,. Los otros archivos están marcados por su lado, luego la pieza. Entonces fileh
es el archivo de King's Rook, oKR
. - Los rangos están numerados desde el punto de vista del jugador en movimiento. Lo que sería el cuarto rango en Algebraico, es el cuarto rango para las blancas, pero el quinto rango para las negras.
- De ello se deduce que el cuadrado
e4
esK4
para el jugador blanco yK5
para el jugador negro. El cuadradof7
esKB7
para el jugador blanco yKB2
para el jugador negro. - Un movimiento es anotado por la pieza en movimiento, luego un guión, luego el cuadrado objetivo. Entonces un peón que se muda a
K4
esP-K4
. Una reina que se muda aKR5
esQ-KR5
. - Una captura es anotada por la pieza de captura, luego
x
, la pieza capturada. Por lo tanto, un obispo capturando un peón esBxP
. Por lo general, debe marcar qué Peón se está capturando, pero ignore esto por simplicidad. - Los símbolos de las piezas son
K
para el Rey,Q
para la Reina,B
para el Obispo,Kt
para el Caballero (tenga en cuenta el símbolo diferente),R
para la Torre yP
para el Peón. - Otras anotaciones incluyen
ch
para cheque ymate
para jaque mate. Un peón moviéndoseKB7
y dando cheque esP-KB7 ch
. Tenga en cuenta el espacio.
Entrada
Se mueve una cadena de notación algebraica, delineada por espacios. No hay números de movimiento. Por ejemplo, el compañero del tonto dice así:
f3 e5 g4 Qh4#
O el juego Teed vs Delmar, de la misma página de Wikipedia:
d4 f5 Bg5 h6 Bf4 g5 Bg3 f4 e3 h5 Bd3 Rh6 Qxh5+ Rxh5 Bg6#
El juego inmortal .
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#
Puede suponer que la entrada siempre es un juego válido. Todos los movimientos están en el orden correcto y no hay datos extraños presentes. Ningún movimiento incluirá desambiguación .
Por ejemplo, el juego de hoja perenne a pesar de ser, obviamente, un juego válido, no va a ser de entrada debido a la jugada 19, Rad1
.
También puede suponer que todas las listas de movimientos de entrada comienzan desde la posición inicial.
Salida
Una lista de movimientos, con un formato similar, en notación descriptiva.
Por ejemplo, el compañero del tonto:
P-KB3 P-K4 P-KKt4 Q-KR5 mate
Teed vs Delmar:
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
El juego inmortal:
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
Esta no es la notación descriptiva más simple posible, ya que a veces no es necesario especificar a qué archivo Knight se movió (ya que en, Q-KKt4
podría escribirse Q-Kt4
ya que el movimiento Q-QKt4
es imposible). El movimiento BxP
es ambiguo (qué peón: debería ser BxQKtP
) , pero al Sr. Short no le importa demasiado eso.
Puede considerar estos sus casos de prueba.
Nota: escribí esto a mano. Si detecta algún error evidente, hágamelo saber.
Reglas y puntuación
- Se aplican reglas estándar: programa con salida a stdout o función. Nada que stderr. Las lagunas estándar están prohibidas.
- Enlace a un sitio donde podamos probar su código.
- Código de golf: el código más corto gana.
En conclusión
Este es mi primer desafío, así que probablemente cometí algunos errores novatos. Se agradece la retroalimentación sobre la pregunta (en los comentarios, obviamente).
Respuestas:
Lote, 554 bytes
s
es la cadena de salida.m
es el movimiento actual (los movimientos se toman como parámetros de la línea de comandos).c
es lach
o lamate
bandera.p
Es la pieza actual. Si no hay una pieza (es decir, una letra minúsculaa-h
),P
se sustituye. (ElN
queKt
la sustitución se hace tarde para salvar bytes.) La columna de destino se veía entonces en un diccionario. Sin embargo, si el movimiento es en realidad una captura, el destino se convierte enx
seguido por la pieza previamente en esa casilla. De cualquier manera, el cuadrado de destino se establece en la pieza que se acaba de mover allí. Los movimientos se acumulan hasta que no hay más parámetros y luego se imprimen.Las variables
a1
...h8
se utilizan para almacenar la última pieza vista. El.
prefijo está ahí por la forma en que inicializo la fila de atrás; Es difícil recorrer dos variables a la vez en Batch a menos que se me permita comenzar una con a.
.fuente