チェスの世界で行われている非常に多くの仕事があります。たとえば、標準化されたファイル形式.pgn
があります。これは、移動リストを含むチェスゲームを記述しています。さらに、.fen
ボードの位置を説明する別のファイル形式があります。 今日の課題は、チェスの動きのリスト(代数表記)をボードの位置に変換することです。
定義
- 位置
[a-h][1-8]
:行(ファイル)と列(ランク)を追加することによって与えられます。ボード上の64の可能な位置の1つを定義します。 - 片
[KQRBNP]?
:表しKの ING、Qの ueen、R OOK、Bの iショップ、K Nの IGHT、Pの AWNを。代数表記でP
は、使用されません。ボードで使用する場合、文字は白の場合は大文字、それ以外の場合は小文字です。 - 移動
[KQRBN]?[a-h]?[1-8]?x?[a-h][1-8](=[KQRBN])?(+*?)?|O-O(-O)
:ピースの後に移動先の位置が続きます。- ピースがあいまいな場合は、行、列、またはその両方が示されます。
- ピースがピースをキャプチャしている場合、ピースと
x
位置の間に配置されます。 - 移動がキャスリングの場合、
O-O
キングサイドに与えられ、そうでない場合はに与えられますO-O-O
。 - ポーンがプロモートされている場合、移動にはプロモート
=
されているピースが追加されます。 - 移動によってキングがチェックされる場合、が追加されます
+
。 - 移動によって王がチェックメイトに置かれた場合、キングが追加され
#
ます。 - ピースの色はターン番号によって決まります(黒から始まる白と黒の交互ターン)。
- ボード
(([1-8]|[KQRBNPkqrbnp])*\/){8}
:行は、行の順序でピースをリストすることによって与えられます。空の四角がある場合、空の四角の各実行は、実行の長さを使用して与えられます。行は次を使用して区切られます/
ボードの初期位置はrnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
であり、次を表します。
rnbqkbnr
pppppppp
PPPPPPPP
RNBQKBNR
Moveのリストを取得して、Boardを返す必要があります。入力が有効であると想定できます。
例
-> rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
e4 -> rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR
e4,c5 -> rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5 -> rnbqkbnr/ppp2ppp/8/3Pp3/8/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5,dxe6 -> rnbqkbnr/ppp2ppp/4P3/8/8/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4 -> r1bqk2r/ppp2pp1/4Pn2/2P4p/6nP/8/PPP2PPN/RNBQKB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4 -> r1bqk2r/ppp2pp1/4P3/2P4p/3Q2nP/6P1/PPP2n1N/RNB1KB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O -> r1bq1rk1/ppp2pp1/4P3/2P4p/3Q1BnP/6P1/PPP2n1N/RN2KB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+ -> r1b2rk1/ppp2Pp1/8/2P3qp/3Q1BnP/N5P1/PPP4N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q -> r1br1Q2/ppp3pk/8/2P3Bp/3Q2nP/N5P1/PPP4N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q,Ngf2,c6,Rd7,cxd7,b6,d8=Q,c6,Q4d6,Ba6,Qd8f6 -> r4Q2/p5pk/bppQ1Q2/6Bp/7P/N5P1/PPP2n1N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q,Ngf2,c6,Rd7,cxd7,b6,d8=Q,c6,Q4d6,Ba6,Qd8f6,Rb8,Qdd8,b5,Qc5,b4,Qxb8,bxa3,Rd3,Nxd3+,Kd1,axb2,Bh3,b1=Q+,Kd2,Qxa2,Qh6+,gxh6,Qcd6,Qa1,Qbc7+,Kh8,Qdd8# -> 3Q3k/p1Q5/b1p4p/6Bp/7P/3n2PB/2PK3N/q6n
これはコードゴルフですので、できるだけ短く答えてください!
パッサンはありません:p?
—
アドナン
@Adnan私のテストケースには不合格者が含まれていると思います。
—
ネイサンメリル
ああ、すみませんでした。私はいつもパッセンジャーの動きを表記するのに慣れてい
—
アドナン
e.p.
ます。
代わりにスペースで区切られた動きを取ることができますか?
—
-orlp
もちろん。任意のリスト形式が受け入れられます。
—
ネイサンメリル