Would appreciate help in finding utilities to:
a) convert from .pgn LAN to list of (position + chosen-move-from-that-position) ... preferably handling multiple games per file, and
b) to check that a list of moves are all playable from a given FEN position
thanks in advance - Guy
Seeking various 'utility functions'
Moderators: hgm, Dann Corbit, Harvey Williamson
-
Dann Corbit
- Posts: 12482
- Joined: Wed Mar 08, 2006 8:57 pm
- Location: Redmond, WA USA
Re: Seeking various 'utility functions'
Rémi Coulom's pgn2epd writes the chosen move as bm:guyhaw wrote:Would appreciate help in finding utilities to:
a) convert from .pgn LAN to list of (position + chosen-move-from-that-position) ... preferably handling multiple games per file, and
http://remi.coulom.free.fr/
c:\tmp>pgn2epd < winboard.pgn
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - bm e4;
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - bm e5;
rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - bm Nf3;
rnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - bm Nc6;
r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - bm Bb5;
r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - bm a6;
r1bqkbnr/1ppp1ppp/p1n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - bm Ba4;
r1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - bm Nf6;
Tim Foden's pgn2fen writes chosen moves as pm:
c:\tmp>pgn2fen winboard.pgn -e
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - fmvn 1; hmvc 0; pm e4;
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - fmvn 1; hmvc 0; pm e5;
rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - fmvn 2; hmvc 0; pm Nf3;
rnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - fmvn 2; hmvc 1; pm Nc6;
r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - fmvn 3; hmvc 2; pm Bb5;
r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - fmvn 3; hmvc 3; pm a6;
r1bqkbnr/1ppp1ppp/p1n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - fmvn 4; hmvc 0; pm Ba4;
PGNposition by Koundinya Veluri creates pm annotated EPD.
c:\tmp>pgnposition winboard.pgn winboard.epd
PGNposition by Koundinya Veluri
Output file winboard.epd contains:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - pm e4;
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 pm e5;
rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq e6 pm Nf3;
rnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - pm Nc6;
r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - pm Bb5;
r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - pm a6;
r1bqkbnr/1ppp1ppp/p1n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - pm Ba4;
r1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - pm Nf6;
Crafty's epdpfdr will detect any errors in an EPD record.
b) to check that a list of moves are all playable from a given FEN position
thanks in advance - Guy
As a related note, my friend Les Fernandez has written a utility that will take an EPD record and turn all of the pm, bm, and pv fields into the resulting (forward) EPD records.
So that {for instance} this record:
rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1P2PPPP/R1BQKB1R w KQkq - acd 24; acn 3067947357; acs 410400; bm g3; c0 "Analysis by Rybkav2.3.2a.mp.x64 @10800sec@3.0GHz@4threads W512MB hash"; ce 7; pm Bd2 {92} Nxd5 {3} Qa4+ {8} Qc2 {591} e3 {367}; pv g3 Be7 Bg2 Nxc3 bxc3 Be4 O-O O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
is transformed into this:
rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2NP1/1P2PP1P/R1BQKB1R b KQkq - id "NM(pv)-1a"; pv Be7 Bg2 Nxc3 bxc3 Be4 O-O O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1qk2r/pbp1bppp/1p2p3/3n4/3P4/P1N2NP1/1P2PP1P/R1BQKB1R w KQkq - id "NM(pv)-1b"; pv Bg2 Nxc3 bxc3 Be4 O-O O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1qk2r/pbp1bppp/1p2p3/3n4/3P4/P1N2NP1/1P2PPBP/R1BQK2R b KQkq - id "NM(pv)-1c"; pv Nxc3 bxc3 Be4 O-O O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1qk2r/pbp1bppp/1p2p3/8/3P4/P1n2NP1/1P2PPBP/R1BQK2R w KQkq - id "NM(pv)-1d"; pv bxc3 Be4 O-O O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1qk2r/pbp1bppp/1p2p3/8/3P4/P1P2NP1/4PPBP/R1BQK2R b KQkq - id "NM(pv)-1e"; pv Be4 O-O O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1qk2r/p1p1bppp/1p2p3/8/3Pb3/P1P2NP1/4PPBP/R1BQK2R w KQkq - id "NM(pv)-1f"; pv O-O O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1qk2r/p1p1bppp/1p2p3/8/3Pb3/P1P2NP1/4PPBP/R1BQ1RK1 b kq - id "NM(pv)-1g"; pv O-O Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1q1rk1/p1p1bppp/1p2p3/8/3Pb3/P1P2NP1/4PPBP/R1BQ1RK1 w - - id "NM(pv)-1h"; pv Ne5 Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1q1rk1/p1p1bppp/1p2p3/4N3/3Pb3/P1P3P1/4PPBP/R1BQ1RK1 b - - id "NM(pv)-1i"; pv Bxg2 Kxg2 Nc6 Nf3 Qd5;
rn1q1rk1/p1p1bppp/1p2p3/4N3/3P4/P1P3P1/4PPbP/R1BQ1RK1 w - - id "NM(pv)-1j"; pv Kxg2 Nc6 Nf3 Qd5;
rn1q1rk1/p1p1bppp/1p2p3/4N3/3P4/P1P3P1/4PPKP/R1BQ1R2 b - - id "NM(pv)-1k"; pv Nc6 Nf3 Qd5;
r2q1rk1/p1p1bppp/1pn1p3/4N3/3P4/P1P3P1/4PPKP/R1BQ1R2 w - - id "NM(pv)-1l"; pv Nf3 Qd5;
r2q1rk1/p1p1bppp/1pn1p3/8/3P4/P1P2NP1/4PPKP/R1BQ1R2 b - - id "NM(pv)-1m"; pv Qd5;
r4rk1/p1p1bppp/1pn1p3/3q4/3P4/P1P2NP1/4PPKP/R1BQ1R2 w - - id "NM(pv)-1n";
rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2NP1/1P2PP1P/R1BQKB1R b KQkq - id "NM(bm)-1a";
rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1P1BPPPP/R2QKB1R b KQkq - id "NM(pm)-1a";
rn1qkb1r/pbp2ppp/1p2p3/3N4/3P4/P4N2/1P2PPPP/R1BQKB1R b KQkq - id "NM(pm)-1b";
rn1qkb1r/pbp2ppp/1p2p3/3n4/Q2P4/P1N2N2/1P2PPPP/R1B1KB1R b KQkq - id "NM(pm)-1c";
rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1PQ1PPPP/R1B1KB1R b KQkq - id "NM(pm)-1d";
rn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N1PN2/1P3PPP/R1BQKB1R b KQkq - id "NM(pm)-1e";
-
guyhaw
Re: Seeking various 'utility functions'
Thanks Dan. Forgot to specify that the chosen-move shown after the FEN position should be in LAN rather than SAN. Is that possible? Thanks. g