2
棋盘上的爆炸
原子象棋是一种(非常有趣的)象棋的变体,其中每次捕获都会引起“爆炸”,破坏捕获的棋子,进行捕获的棋子,以及所有非棋子都在1平方毫米的半径内。挑战的目的不是玩完整的原子象棋游戏,而是简单地模拟做出特定动作时发生的情况。 免责声明:不包括爆炸声效。 输入值 董事会职位将以Forsyth-Edwards表示法 (通常称为FEN)给出,但只有第一个字段。例如,输入: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR 代表起始位置: 必须将其视为字符串或您的语言的等效字符串。保证有效;例如,您不必关心是否有十个国王,或者根本没有国王。 您还将获得要模拟的移动,该移动用两个正方形名称表示:要移动的块所在的正方形以及要移动到的正方形。例如,在上图上将国王的棋子向前移动两个空格将表示为: e2e4 这也必须作为字符串。此举将始终有效,并且您无需支持castling。您确实需要支持en passant,这将在下一部分中进一步详细说明。 输出量 程序的输出应与输入使用相同的部分FEN表示法,并进行指定的移动(如有必要,任何部分都应爆炸)。 爆炸的确切规则是-捕获一块时: 删除要捕获的片段(这将始终是输入中指定的第二个正方形上的片段,除非捕获为pass)。 删除正在捕获的片段(这将始终是输入中指定的第一个正方形上的片段)。 删除以下所有内容: 位于围绕捕获发生位置的8个正方形之一中(对于enpassant,这是捕获典当不会爆炸时将位于的正方形)。 不是典当。 快速概述顺便规则,对于那些谁不熟悉:如果从它开始的排名棋子移动两个空格前锋,并且有可能已经捕捉到它,如果它只能移动一格前进的棋子,它可以无论如何捕捉它,但仅在后续移动中。据说此捕获是“ 通过 ”完成的(或法语:“ en passant ”)。 测试用例 在图片中,绿色箭头重新预设了要进行的移动,绿色圆圈表示爆炸的片段。 输入:rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR,g1f3 输出:rnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R 输入:3kBb1r/pp5p/3p4/4pn2/P7/1P2P1pP/2rP1P2/R1B3RK,f2g3 输出:(3kBb1r/pp5p/3p4/4pn2/P7/1P2P2P/2rP4/R1B3RK 从http://en.lichess.org/ocoSfS5I/white#36盗取) 输入:rnbqk1nr/1pp5/p2pp1pp/5p2/1bN5/2P1PQ1N/PP1P1PPP/R1B1KB1R,f3b7 输出:(3qk1nr/2p5/p2pp1pp/5p2/1bN5/2P1P2N/PP1P1PPP/R1B1KB1R 从http://en.lichess.org/NCUnA6LV/white#14窃取) 输入:rnbqk2r/pp2p2p/2p3pb/3pP3/5P2/2N5/PPPP2P1/R1BQKB1R,e5d6 输出:(rnbqk2r/pp2p2p/2p3pb/8/5P2/2N5/PPPP2P1/R1BQKB1R 从http://en.lichess.org/AvgU4Skq/white#16窃取;这不是实际的举动,但是我不费心去寻找一个实际上具有过人之处的原子游戏: P) 输入:5r2/2k5/p1B5/1pP1p3/1P4P1/3P4/P7/1K3R1q,c6h1 输出:(5r2/2k5/p7/1pP1p3/1P4P1/3P4/P7/1K3R2 从http://en.lichess.org/l77efXEb/white#58盗取) 计分 这是code-golf,因此以字节为单位的最短代码获胜。