3

I wrote a program that converts moves in ICCF notation into a total of ten notations:

  • SAN
  • FAN
  • LAN
  • MAN
  • RAN
  • CRAN
  • Smith
  • Descriptive
  • Coordinate
  • ICCF

I previously posted a question asking for suggestions of unusual circumstances (like a pawn that captures into a promotion) so that I could make sure my program was assembling the notations correctly, but perhaps "raise your hand if you aren't here" wasn't the best approach.

What I've done now is converted the Byrne-Fischer Game of the Century into ICCF and run it through the program. Since this game is available in SAN on its Wikipedia page, I was at least able to make sure my program's output matched those moves. After cleaning up the code for disambiguation and castling, it is now a correct match.

My current hope is to get some reviews of the full output. I realize this match doesn't have some basic stuff like promotions, but maybe there are errors in the other notations (especially descriptive - I can't make head or tail of that stuff), and maybe seeing this output will help prompt some ideas for other situations I can test.

SAN    FAN    LAN      MAN   RAN       CRAN    Smith  Descriptive  Coord  ICCF  Comments
Nf3    ♘f3    Ng1-f3   Nf3   Ng1-f3    Nf3     g1f3   KN1N-KB3     G1-F3  7163
Nf6    ♞f6    Ng8-f6   Nf6   Ng8-f6    Nf6     g8f6   KN1N-KB3     G8-F6  7866
c4     c4     c2-c4    c4    c2-c4     c4      c2c4   QB2P-QB4     C2-C4  3234
g6     g6     g7-g6    g6    g7-g6     g6      g7g6   KN2P-KN3     G7-G6  7776
Nc3    ♘c3    Nb1-c3   Nc3   Nb1-c3    Nc3     b1c3   QN1N-QB3     B1-C3  2133
Bg7    ♝g7    Bf8-g7   Bg7   Bf8-g7    Bg7     f8g7   KB1B-KN2     F8-G7  6877
d4     d4     d2-d4    d4    d2-d4     d4      d2d4   Q2P-Q4       D2-D4  4244
0-0    0-0    0-0      0-0   0-0       0-0     e8g8c  O-O          E8-G8  5878
Bf4    ♗f4    Bc1-f4   Bf4   Bc1-f4    Bf4     c1f4   QB1B-KB4     C1-F4  3164
d5     d5     d7-d5    d5    d7-d5     d5      d7d5   Q2P-Q4       D7-D5  4745
Qb3    ♛b3    Qd1-b3   Qb3   Qd1-b3    Qb3     d1b3   Q1Q-QN3      D1-B3  4123
dxc4   dxc4   d5xc4    dc4   d5xPc4    d:Pc4   d5c4p  Q4PxQB5P     D5-C4  4534
Qxc4   ♛xc4   Qb3xc4   Qc4   Qb3xPc4   Q:Pc4   b3c4p  QN3QxQB4P    B3-C4  2334
c6     c6     c7-c6    c6    c7-c6     c6      c7c6   QB2P-QB3     C7-C6  3736
e4     e4     e2-e4    e4    e2-e4     e4      e2e4   K2P-K4       E2-E4  5254
Nd7    ♞d7    Nb8-d7   Nd7   Nb8-d7    Nd7     b8d7   QN1N-Q2      B8-D7  2847
Rd1    ♖d1    Ra1-d1   Rd1   Ra1-d1    Rd1     a1d1   QR1R-Q1      A1-D1  1141
Nb6    ♞b6    Nd7-b6   Nb6   Nd7-b6    Nb6     d7b6   Q2N-QN3      D7-B6  4726
Qc5    ♛c5    Qc4-c5   Qc5   Qc4-c5    Qc5     c4c5   QB4Q-QB5     C4-C5  3435
Bg4    ♝g4    Bc8-g4   Bg4   Bc8-g4    Bg4     c8g4   QB1B-KN5     C8-G4  3874
Bg5    ♗g5    Bf4-g5   Bg5   Bf4-g5    Bg5     f4g5   KB4B-KN5     F4-G5  6475  ?
Na4    ♞a4    Nb6-a4   Na4   Nb6-a4    Na4     b6a4   QN3N-QR5     B6-A4  2614  !!
Qa3    ♛a3    Qc5-a3   Qa3   Qc5-a3    Qa3     c5a3   QB5Q-QR3     C5-A3  3513
Nxc3   ♞xc3   Na4xc3   Nc3   Na4xNc3   N:Nc3   a4c3n  QR5NxQB6N    A4-C3  1433
bxc3   bxc3   b2xc3    bc3   b2xNc3    b:Nc3   b2c3n  QN2PxQB3N    B2-C3  2233
Nxe4   ♞xe4   Nf6xe4   Ne4   Nf6xPe4   N:Pe4   f6e4p  KB3NxK5P     F6-E4  6654  !
Bxe7   ♗xe7   Bg5xe7   Be7   Bg5xPe7   B:Pe7   g5e7p  KN5BxK7P     G5-E7  7557
Qb6    ♕b6    Qd8-b6   Qb6   Qd8-b6    Qb6     d8b6   Q1Q-QN3      D8-B6  4826
Bc4    ♗c4    Bf1-c4   Bc4   Bf1-c4    Bc4     f1c4   KB1B-QB4     F1-C4  6134
Nxc3   ♞xc3   Ne4xc3   Nc3   Ne4xPc3   N:Pc3   e4c3p  K5NxQB6P     E4-C3  5433  !
Bc5    ♗c5    Be7-c5   Bc5   Be7-c5    Bc5     e7c5   K7B-QB5      E7-C5  5735
Rfe8+  ♜fe8+  Rf8-e8+  Rfe8  Rf8-e8+   Rfe8+   f8e8   KB1R-K1+     F8-E8  6858
Kf1    ♔f1    Ke1-f1   Kf1   Ke1-f1    Kf1     e1f1   K1K-KB1      E1-F1  5161
Be6    ♝e6    Bg4-e6   Be6   Bg4-e6    Be6     g4e6   KN5B-K3      G4-E6  7456  !!
Bxb6   ♗xb6   Bc5xb6   Bb6   Bc5xQb6   B:Qb6   c5b6q  QB5BxQN6Q    C5-B6  3526  ?
Bxc4+  ♝xc4+  Be6xc4+  Bc4   Be6xBc4+  B:Bc4+  e6c4b  K3BxQB5B+    E6-C4  5634
Kg1    ♔g1    Kf1-g1   Kg1   Kf1-g1    Kg1     f1g1   KB1K-KN1     F1-G1  6171
Ne2+   ♞e2+   Nc3-e2+  Ne2   Nc3-e2+   Ne2+    c3e2   QB6N-K7+     C3-E2  3352
Kf1    ♔f1    Kg1-f1   Kf1   Kg1-f1    Kf1     g1f1   KN1K-KB1     G1-F1  7161
Nxd4+  ♞xd4+  Ne2xd4+  Nd4   Ne2xPd4+  N:Pd4+  e2d4p  K7NxQ5P+     E2-D4  5244
Kg1    ♔g1    Kf1-g1   Kg1   Kf1-g1    Kg1     f1g1   KB1K-KN1     F1-G1  6171
Ne2+   ♞e2+   Nd4-e2+  Ne2   Nd4-e2+   Ne2+    d4e2   Q5N-K7+      D4-E2  4452
Kf1    ♔f1    Kg1-f1   Kf1   Kg1-f1    Kf1     g1f1   KN1K-KB1     G1-F1  7161
Nc3+   ♞c3+   Ne2-c3+  Nc3   Ne2-c3+   Nc3+    e2c3   K7N-QB6+     E2-C3  5233
Kg1    ♔g1    Kf1-g1   Kg1   Kf1-g1    Kg1     f1g1   KB1K-KN1     F1-G1  6171
axb6   axb6   a7xb6    ab6   a7xBb6    a:Bb6   a7b6b  QR2PxQN3B    A7-B6  1726
Qb4    ♛b4    Qa3-b4   Qb4   Qa3-b4    Qb4     a3b4   QR3Q-QN4     A3-B4  1324
Ra4    ♜a4    Ra8-a4   Ra4   Ra8-a4    Ra4     a8a4   QR1R-QR5     A8-A4  1814  !
Qxb6   ♛xb6   Qb4xb6   Qb6   Qb4xPb6   Q:Pb6   b4b6p  QN4QxQN6P    B4-B6  2426
Nxd1   ♞xd1   Nc3xd1   Nd1   Nc3xRd1   N:Rd1   c3d1r  QB6NxQ8R     C3-D1  3341
h3     h3     h2-h3    h3    h2-h3     h3      h2h3   KR2P-KR3     H2-H3  8283
Rxa2   ♜xa2   Ra4xa2   Ra2   Ra4xPa2   R:Pa2   a4a2p  QR5RxQR7P    A4-A2  1412
Kh2    ♔h2    Kg1-h2   Kh2   Kg1-h2    Kh2     g1h2   KN1K-KR2     G1-H2  7182
Nxf2   ♞xf2   Nd1xf2   Nf2   Nd1xPf2   N:Pf2   d1f2p  Q8NxKB7P     D1-F2  4162
Re1    ♖e1    Rh1-e1   Re1   Rh1-e1    Re1     h1e1   KR1R-K1      H1-E1  8151
Rxe1   ♜xe1   Re8xe1   Re1   Re8xRe1   R:Re1   e8e1r  K1RxK8R      E8-E1  5851
Qd8+   ♛d8+   Qb6-d8+  Qd8   Qb6-d8+   Qd8+    b6d8   QN6Q-Q8+     B6-D8  2648
Bf8    ♝f8    Bg7-f8   Bf8   Bg7-f8    Bf8     g7f8   KN2B-KB1     G7-F8  7768
Nxe1   ♘xe1   Nf3xe1   Ne1   Nf3xRe1   N:Re1   f3e1r  KB3NxK1R     F3-E1  6351
Bd5    ♝d5    Bc4-d5   Bd5   Bc4-d5    Bd5     c4d5   QB5B-Q4      C4-D5  3445
Nf3    ♘f3    Ne1-f3   Nf3   Ne1-f3    Nf3     e1f3   K1N-KB3      E1-F3  5163
Ne4    ♞e4    Nf2-e4   Ne4   Nf2-e4    Ne4     f2e4   KB7N-K5      F2-E4  6254
Qb8    ♛b8    Qd8-b8   Qb8   Qd8-b8    Qb8     d8b8   Q8Q-QN8      D8-B8  4828
b5     b5     b7-b5    b5    b7-b5     b5      b7b5   QN2P-QN4     B7-B5  2725
h4     h4     h3-h4    h4    h3-h4     h4      h3h4   KR3P-KR4     H3-H4  8384
h5     h5     h7-h5    h5    h7-h5     h5      h7h5   KR2P-KR4     H7-H5  8785
Ne5    ♘e5    Nf3-e5   Ne5   Nf3-e5    Ne5     f3e5   KB3N-K5      F3-E5  6355
Kg7    ♚g7    Kg8-g7   Kg7   Kg8-g7    Kg7     g8g7   KN1K-KN2     G8-G7  7877
Kg1    ♔g1    Kh2-g1   Kg1   Kh2-g1    Kg1     h2g1   KR2K-KN1     H2-G1  8271
Bc5+   ♝c5+   Bf8-c5+  Bc5   Bf8-c5+   Bc5+    f8c5   KB1B-QB4+    F8-C5  6835
Kf1    ♔f1    Kg1-f1   Kf1   Kg1-f1    Kf1     g1f1   KN1K-KB1     G1-F1  7161
Ng3+   ♞g3+   Ne4-g3+  Ng3   Ne4-g3+   Ng3+    e4g3   K5N-KN6+     E4-G3  5473
Ke1    ♔e1    Kf1-e1   Ke1   Kf1-e1    Ke1     f1e1   KB1K-K1      F1-E1  6151
Bb4+   ♝b4+   Bc5-b4+  Bb4   Bc5-b4+   Bb4+    c5b4   QB4B-QN5+    C5-B4  3524
Kd1    ♔d1    Ke1-d1   Kd1   Ke1-d1    Kd1     e1d1   K1K-Q1       E1-D1  5141
Bb3+   ♝b3+   Bd5-b3+  Bb3   Bd5-b3+   Bb3+    d5b3   Q4B-QN6+     D5-B3  4523
Kc1    ♔c1    Kd1-c1   Kc1   Kd1-c1    Kc1     d1c1   Q1K-QB1      D1-C1  4131
Ne2+   ♞e2+   Ng3-e2+  Ne2   Ng3-e2+   Ne2+    g3e2   KN6N-K7+     G3-E2  7352
Kb1    ♔b1    Kc1-b1   Kb1   Kc1-b1    Kb1     c1b1   QB1K-QN1     C1-B1  3121
Nc3+   ♞c3+   Ne2-c3+  Nc3   Ne2-c3+   Nc3+    e2c3   K7N-QB6+     E2-C3  5233
Kc1    ♔c1    Kb1-c1   Kc1   Kb1-c1    Kc1     b1c1   QN1K-QB1     B1-C1  2131
Rc2    ♜c2    Ra2-c2   Rc2   Ra2-c2    Rc2     a2c2   QR7R-QB7     A2-C2  1232  # 0-1

I got the ICCF notations by running through this match in my chess program and then converting its internal move notation to ICCF. I added the check indicators, annotation, etc. to the ICCF moves manually. You can see that I currently consider the check indicator to be part of a move, but anything else (e.g. !, #) is considered a comment. I don't know if that's correct, either.

  • Figurine algebraic notation doesn't use different symbols for White and Black pieces. Just use the white piece symbol for all moves, even Black ones. – dfan Sep 9 '15 at 2:08
  • I don't see a spec for MAN (Minimal Algebraic Notation) anywhere, but I bet that dc4 would be more idiomatic as dc, which is the standard minimal way to write captures of pawns by pawns. – dfan Sep 9 '15 at 2:10
  • @dfan - The Wikipedia page on chess notation shows black piece icons for black moves in FAN. It also says that "Minimal algebraic notation (MAN) is similar to SAN but omits the indicators for capture ("x") and check ("+")." I can't find much info on either of these issues, even on FIDE.com. – TigerhawkT3 Sep 12 '15 at 3:02
  • Hmm, that is true (well, I see one move, and it's presumably by Black, and it has a Black symbol). I don't know what its authority is here, but I can tell you that in published books one (overwhelmingly) uses just the White symbol. – dfan Sep 12 '15 at 13:16
2

You can see that I currently consider the check indicator to be part of a move, but anything else (e.g. !, #) is considered a comment. I don't know if that's correct, either

No, it's not correct. The final move is Rc2#. The "#" means "checkmate" and is part of the move in the same way as "+" for "check".

That obviously only applies if it occurs immediately after the move and not as part of a comment. The same would apply to a symbol like "+=" which means something like "white stands a little bit better"

  • How about other symbols, like "!"? If you could list all the symbols/annotations that should be part of the move itself, that would be great. – TigerhawkT3 Sep 6 '15 at 16:49
  • @TigerhawkT3 "!" is not part of the move. It is a comment meaning "good move". One commentator can put "!" another can disagree and put "?" but the move is the same. For symbols/annotations that are part of the move apart from "+" = check, "#" = checkmate you also have "e.p." = en passant capture, "=Q", "=R", "=B", "=N" = pawn promotions to queen, rook, bishop, knight respectively and "=" = draw offer. There are no symbols for stalemate, resigns, lost on time, lost because phone rang, etc. Perhaps there should be :-) – Brian Towers Sep 6 '15 at 17:26
  • I already have promotions as part of the move. Where in a move notation should e.p. go, and is that only for algebraic? – TigerhawkT3 Sep 6 '15 at 17:45
  • The Wikipedia page on algebraic notation says that the e.p. is optional. How optional is it? – TigerhawkT3 Sep 6 '15 at 17:46
  • @TigerhawkT3 +, #, =, e.p. are all optional from the viewpoint of the FIDE rules. It is not a requirement when recording the moves to include these symbols. They all appear immediately after the algebraic part of the move. eg "fg e.p. +" would mean "f pawn takes g pawn en passant check" – Brian Towers Sep 6 '15 at 20:20
1

Your descriptive notation is much more verbose than anyone would write in reality. For example, the first two moves would normally be written 1.N-KB3 N-KB3 2.P-B4 P-KN3. Note that the prefix denoting which exact piece is moving is not supplied unless it is necessary to disambiguate the move, and that P-B4 is sufficient to describe White's second move because there's only one bishop pawn he can move.

In general writing idiomatic descriptive notation is a bit of an art, which is one reason that everyone switched to algebraic (I grew up with descriptive and don't miss it). The general rule is to be as terse as possible unless the extra information (which piece is moving, which side of the board is being moved to, where is the piece being captured) is necessary. If only one pawn can capture one other pawn, write PxP; if you write PxQP or KPxP or god forbid KPxQP, it should be because you have to.

  • I've been trying to find a more concrete recipe for descriptive notation, but it all seems to involve a lot of "art," "sometimes," "typically," "etc.," and "alternatively." I was hoping for something similar to this description for Smith notation which was really clear and easy to adhere to. – TigerhawkT3 Sep 12 '15 at 3:09
  • @TigerhawkT3 I think one problem is that descriptive notation was pretty obsolete by the time people started wanting to parse it or generate it with computers, so there's no formal spec (that I know of). – dfan Sep 12 '15 at 21:46
  • Yeah, I've simply commented the descriptive notation out of the program. It seems a little too nebulous. – TigerhawkT3 Sep 12 '15 at 23:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.