Ajedrez atómico es una variante (muy divertida) del ajedrez en la que cada captura provoca una "explosión", destruyendo la pieza capturada, la pieza que captura y todos los no peones en un radio de 1 cuadrado. El objetivo de este desafío no es jugar un juego completo de ajedrez atómico, sino simplemente simular lo que sucede cuando se realiza un movimiento determinado.
Descargo de responsabilidad: efectos de sonido de explosión no incluidos.
Entrada
La posición del consejo se dará en notación Forsyth-Edwards (comúnmente conocida como FEN), pero solo con el primer campo. Por ejemplo, una entrada de:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
representa la posición inicial:
Esto debe tomarse como una cadena o el equivalente de su idioma. Se garantiza que sea válido; por ejemplo, no tienes que preocuparte si hay diez reyes o si no hay ningún rey.
También se le dará el movimiento que debe simular, que se representa como dos nombres cuadrados: el cuadrado sobre el que se mueve la pieza y el cuadrado al que se mueve. Por ejemplo, mover el peón del rey dos espacios hacia adelante en la imagen de arriba se representaría como:
e2e4
Esto también debe tomarse como una cadena. El movimiento siempre será válido, y no necesitas soportar el enroque . Necesitas apoyo en passant , que se explicará con más detalle en la siguiente sección.
Salida
La salida de su programa debe estar en la misma notación FEN parcial que la entrada, con el movimiento especificado realizado (y cualquier pieza explotada si es necesario).
Las reglas exactas para las explosiones son: cuando se captura una pieza:
Elimine la pieza que se está capturando (esta siempre será la pieza en el segundo cuadrado nombrado en la entrada, excepto cuando la captura es pasante ).
Retire la pieza que está haciendo la captura (esta siempre será la pieza en el primer cuadrado nombrado en la entrada).
Retire cada pieza que sea:
ubicado en una de las 8 casillas que rodean al lugar donde tuvo lugar la captura (para pasar , esta es la casilla en la que estaría el peón de captura, si no explotara).
No es un peón.
Resumen rápido de las reglas pasantes , para aquellos que no están familiarizados: si un peón se mueve dos espacios hacia adelante desde su rango inicial, y hay un peón que podría haberlo capturado si solo se moviera una casilla hacia adelante, puede capturarlo de todos modos, pero solo en el movimiento posterior. Se dice que esta captura se realiza " de pasada " (o en francés: " en passant ").
Casos de prueba
En las imágenes, las flechas verdes reprimen el movimiento que se va a realizar, y los círculos verdes representan piezas que explotan.
Entrada: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
, g1f3
Salida:rnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R
Entrada: 3kBb1r/pp5p/3p4/4pn2/P7/1P2P1pP/2rP1P2/R1B3RK
, f2g3
salida: 3kBb1r/pp5p/3p4/4pn2/P7/1P2P2P/2rP4/R1B3RK
(robado de http://en.lichess.org/ocoSfS5I/white#36 )
Entrada: rnbqk1nr/1pp5/p2pp1pp/5p2/1bN5/2P1PQ1N/PP1P1PPP/R1B1KB1R
, f3b7
salida: 3qk1nr/2p5/p2pp1pp/5p2/1bN5/2P1P2N/PP1P1PPP/R1B1KB1R
(robado de http://en.lichess.org/NCUnA6LV/white#14 )
Entrada: rnbqk2r/pp2p2p/2p3pb/3pP3/5P2/2N5/PPPP2P1/R1BQKB1R
,e5d6
Salida: rnbqk2r/pp2p2p/2p3pb/8/5P2/2N5/PPPP2P1/R1BQKB1R
(robado de http://en.lichess.org/AvgU4Skq/white#16 , lo que no era el movimiento real, pero no podía ser molestado a encontrar un juego atómica que en realidad tenía en passant: PAG)
Entrada: 5r2/2k5/p1B5/1pP1p3/1P4P1/3P4/P7/1K3R1q
, c6h1
salida: 5r2/2k5/p7/1pP1p3/1P4P1/3P4/P7/1K3R2
(robado de http://en.lichess.org/l77efXEb/white#58 )
Puntuación
Este es el código de golf , por lo que gana el código más corto en bytes.
Respuestas:
JavaScript ( ES6 ) 305
310 321Como una función con 2 parámetros reales (y mucho más con valores predeterminados, utilizados como una forma rápida y sucia para definir locales)
Pruebe a ejecutar el fragmento a continuación (siendo EcmaScript 6, solo Firefox)
Sin golf
fuente
Java, (
946777776 caracteres)1 char gracias a @ edc65
Nota: los caracteres contados sin poner los casos de prueba.
Código
No estoy seguro de si esta solución es óptima, pero estoy trabajando en jugar más al golf, cualquier sugerencia es bienvenida. También puedo comentar todo el código si alguien quisiera, pero creo que en su mayoría se explica por sí mismo, excepto por la confusa enumeración de variables.
Explicación
Expandido
Antiguo
fuente
String m,i="";m="";char[]n=m.toCharArray()
->String i=a[0];char[]n=a[1].toCharArray()
es más corto, por lo que obtienes los parámetros desde el exterior (como deberías de todos modos)