原子象棋是一种(非常有趣的)象棋的变体,其中每次捕获都会引起“爆炸”,破坏捕获的棋子,进行捕获的棋子,以及所有非棋子都在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,因此以字节为单位的最短代码获胜。