체스 세계에서 많은 일들이 이루어졌습니다. 예를 들어, .pgn
이동 목록을 포함하여 체스 게임을 설명 하는 표준화 된 파일 형식 이 있습니다. 또한 .fen
보드 위치를 설명하는 다른 파일 형식이 있습니다. 오늘날의 과제는 체스 동작 목록 ( 대수 표기법 )을 보드 위치 로 변환하는 것 입니다.
정의
- 위치
[a-h][1-8]
: 행 (파일)과 열 (순위)을 추가하여 지정합니다. 보드에서 64 개의 가능한 위치 중 하나를 정의합니다. - 조각들은
[KQRBNP]?
다음 나타냄 K에 보내고, Q의 ueen, R의 OOK, B의 iShop에서, K N의 ight, P를 까끄라기. 대수 표기법에서는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
당신은 이동 목록을 가지고 보드를 반환해야합니다. 입력이 유효하다고 가정 할 수 있습니다.
예
-> 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
이것은 코드 골프 이므로 가능한 한 빨리 답변하십시오!
그래서 enpassant : p?
—
Adnan
@Adnan 저는 테스트 사례에 전임자가 포함되어 있다고 생각합니다.
—
Nathan Merrill
미안, 나는 그것을 보지 못했다. 나는 항상 en passant 움직임을 표시하는 데 사용됩니다
—
Adnan
e.p.
.
대신 공백으로 구분하여 이동해도됩니까?
—
orlp
물론이야. 모든 목록 형식이 허용됩니다.
—
Nathan Merrill