El programa juega blanco.
Ejemplo stdin:
8 ║♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟ … ♟ ♟ ♟
6 ║… … … … … … … …
5 ║… … … … ♟ … … …
4 ║… … … … … … … …
3 ║… … ♘ … … … … …
2 ║♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
1 ║♖ … ♗ ♕ ♔ ♗ ♘ ♖
——╚═══════════════
—— a b c d e f g h
Ejemplo stdout:
8 ║♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟ … ♟ ♟ ♟
6 ║… … … … … … … …
5 ║… … … … ♟ … … …
4 ║… … … … ♙ … … …
3 ║… … ♘ … … … … …
2 ║♙ ♙ ♙ ♙ … ♙ ♙ ♙
1 ║♖ … ♗ ♕ ♔ ♗ ♘ ♖
——╚═══════════════
—— a b c d e f g h
Cualquier movimiento válido está bien. "En passant" y enroque son ignorados. Está bien mostrar mensajes de error o no imprimir nada si no hay un movimiento válido.
La respuesta con más votos gana.
popularity-contest
chess
Hristo Hristov
fuente
fuente

Respuestas:
No me estoy quejando de los votos, pero para ser justos ... mi solución aquí no es realmente tan buena. Ugoren es mejor, aparte de la falta de soporte Unicode. ¡Asegúrese de ver todas las respuestas antes de votar, si se ha encontrado con esta pregunta solo ahora!
De todas formas.
Haskell, 893
888904952(sin enrocar)862 (sin peones dobles movimientos)(No especificó si se supone que esto es código golf, pero me parece que debería)
Cuando tiene instalado GHC (por ejemplo, como parte de la plataforma Haskell ) puede hacer solo
fuente
C,
734672640 caracteresCaracteres contados sin espacios en blanco extraíbles.
El formato de archivo que utilicé no es el solicitado, sino ASCII simplificado.
Necesito agregar soporte de caracteres Unicode, costaría algunos characets.
Formato de archivo de entrada / salida:
debe tener exactamente 8 líneas de exactamente 8 caracteres.
pnbrqkse utilizan para piezas blancas,PNBRQKpara piezas negras, espacios para espacios:La lógica es bastante simple:
para cada posible movimiento de cada pieza blanca, intente cada posible movimiento de cada pieza negra.
Si ningún movimiento negro captura al rey blanco, el movimiento blanco es válido.
El tablero se mantiene como
char[256], tratado como una matriz de 16x16, donde solo se usa el 8x8 superior izquierdo. Las posiciones y los vectores de movimiento se mantienen en enteros de 8 bits (x:4,y:4). El bit extra permite usar aritmética simple (new_pos = old_pos + steps*direction), con detección fácil del borde del tablero (&0x88hace la magia).r[]codifica tres cosas:'('+vector.Funciones:
mainlee el tablero, convierte letras en código interno, llamaapara encontrar movimientos blancos, imprime el tablero.arecorre recursivamente los 64 cuadrados. Para cada pieza del color correcto (parámetroc), encuentra la regla de movimiento para la pieza y llamad.drecorre recursivamente la regla de movimiento codificada, que es una lista de vectores, que llamaea cada uno. Daela posición original, el vector y el límite de rango (7 para piezas por encima de B, 2 para peones de segundo rango, 1 de lo contrario).eprueba todos los movimientos a lo largo de un vector. Si el movimiento es posible (es decir, los peones se mueven hacia adelante, dentro del tablero, no bloqueados, la captura de peones en diagonal), verifica una de dos cosas. Para movimientos blancos, correvpara validar el movimiento. Para movimientos negros, verifica si el rey blanco es capturado. Si es cierto, el movimiento se juega en el tablero.vvalida un movimiento blanco. Copia el tablero a un lado, ejecuta el movimiento para probar yavuelve a llamar para buscar movimientos negros.fuente
Python 2.6,
886- 1425 caracteresMi versión inicial (en las revisiones) llegó a 886 caracteres, pero no satisfizo completamente la especificación (no comprobó para evitar el jaque mate; ni siquiera consideró los posibles movimientos de las piezas negras).
Ahora sí (y he solucionado varios errores en el original). Por desgracia, esto tiene un costo en caracteres: 1425 por ahora, pero aún debería haber poco margen de mejora. Esta versión debería ser mucho más sólida en el manejo de casos extremos que la anterior.
Ejemplo de entrada y salida:
fuente