Échecs atomiques sont une variante (très amusante) des échecs dans laquelle chaque capture provoque une "explosion", détruisant la pièce capturée, la pièce faisant la capture et tous les non-pions dans un rayon de 1 carré. Le but de ce défi n'est pas de jouer une partie entière d'échecs atomiques, mais simplement de simuler ce qui se passe lorsqu'un certain mouvement est effectué.
Avertissement: Effets sonores d'explosion non inclus.
Contribution
La position du conseil sera donnée dans la notation Forsyth-Edwards (communément appelée FEN), mais avec seulement le premier champ. Par exemple, une entrée de:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
représente la position de départ:
Cela doit être considéré comme une chaîne ou l'équivalent de votre langue. Il est garanti d'être valide; par exemple, vous n'avez pas à vous soucier s'il y a dix rois, ou s'il n'y a pas de roi du tout.
Vous recevrez également le mouvement que vous devez simuler, qui est représenté par deux noms de carré: le carré sur lequel se trouve la pièce à déplacer et le carré vers lequel elle se déplace. Par exemple, déplacer le pion du roi de deux cases vers l'avant sur l'image ci-dessus serait représenté comme suit:
e2e4
Cela doit également être considéré comme une chaîne. Le mouvement sera toujours valide et vous n'avez pas besoin de prendre en charge le roque . Vous devez prendre en charge en passant , ce qui sera expliqué plus en détail dans la section suivante.
Production
La sortie de votre programme doit être dans la même notation FEN partielle que l'entrée, avec le mouvement spécifié effectué (et toutes les pièces explosées si nécessaire).
Les règles exactes pour les explosions sont - quand un morceau est capturé:
Retirez la pièce en cours de capture (ce sera toujours la pièce sur le deuxième carré nommé dans l'entrée, sauf lorsque la capture est en passant ).
Supprimez la pièce qui effectue la capture (ce sera toujours la pièce sur le premier carré nommé dans l'entrée).
Retirez chaque pièce qui est:
situé sur l'un des 8 carrés entourant celui où la capture a eu lieu (pour en passant , c'est le carré sur lequel le pion capturant serait, s'il n'explosait pas).
pas un pion.
Aperçu rapide des règles en passant , pour ceux qui ne sont pas familiers: si un pion se déplace de deux cases vers l'avant depuis son rang de départ, et qu'il y a un pion qui aurait pu le capturer s'il n'avait avancé que d'un carré, il peut le capturer de toute façon, mais uniquement lors du déménagement suivant. Cette capture se ferait " en passant " (ou en français: " en passant ").
Cas de test
Dans les images, les flèches vertes reprennent le mouvement sur le point d'être réalisé et les cercles verts représentent les pièces qui explosent.
Entrée: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
, g1f3
sortie:rnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R
Entrée: 3kBb1r/pp5p/3p4/4pn2/P7/1P2P1pP/2rP1P2/R1B3RK
, f2g3
sortie: 3kBb1r/pp5p/3p4/4pn2/P7/1P2P2P/2rP4/R1B3RK
(volée à http://en.lichess.org/ocoSfS5I/white#36 )
Entrée: rnbqk1nr/1pp5/p2pp1pp/5p2/1bN5/2P1PQ1N/PP1P1PPP/R1B1KB1R
, f3b7
sortie: 3qk1nr/2p5/p2pp1pp/5p2/1bN5/2P1P2N/PP1P1PPP/R1B1KB1R
(volée à http://en.lichess.org/NCUnA6LV/white#14 )
Entrée: rnbqk2r/pp2p2p/2p3pb/3pP3/5P2/2N5/PPPP2P1/R1BQKB1R
, e5d6
sortie: rnbqk2r/pp2p2p/2p3pb/8/5P2/2N5/PPPP2P1/R1BQKB1R
(volée http://en.lichess.org/AvgU4Skq/white#16 , ce ne fut pas le mouvement réel, mais je ne pouvais pas être pris la peine de trouver un jeu atomique qui avait fait en passant: P)
Entrée: 5r2/2k5/p1B5/1pP1p3/1P4P1/3P4/P7/1K3R1q
, c6h1
sortie: 5r2/2k5/p7/1pP1p3/1P4P1/3P4/P7/1K3R2
(volée à http://en.lichess.org/l77efXEb/white#58 )
Notation
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Réponses:
JavaScript ( ES6 ) 305
310 321En tant que fonction avec 2 paramètres réels (et beaucoup plus avec des valeurs par défaut, utilisée comme un moyen rapide et sale de définir les locaux)
Testez l'exécution de l'extrait ci-dessous (étant EcmaScript 6, Firefox uniquement)
Non golfé
la source
Java, (
946777776 caractères)1 caractère grâce à @ edc65
Remarque: les caractères sont comptés sans les cas de test insérés.
Code
Je ne sais pas si cette solution est optimale, mais je travaille plus sur le golf, toutes les suggestions sont les bienvenues. Je peux également commenter tout le code si quelqu'un le souhaite, mais je pense qu'il est principalement explicite, à l'exception de l'énumération des variables déroutante.
Explication
Étendu
Vieux
la source
String m,i="";m="";char[]n=m.toCharArray()
->String i=a[0];char[]n=a[1].toCharArray()
est plus court et vous obtenez donc les paramètres de l'extérieur (comme vous devriez quand même)