Friday, March 24, 2017
Standard Algebraic Notation Headache
In iCE I actually never bothered with the Standard Algebraic Notation described by FIDE. The UCI protocol uses Long Algebaric Notation (LAN) which is much simpler to implement in a chess program.
For SAN you have to implement a move generator, move making code, check and mate detection. And this all to just output a given move on the screen. For LAN output all you need is a table with the square names (0 = A1, 1 = B1, ... 63 = H8) and the piece letters for promotion (n,b,r,q).
The core engine functionality does not require SAN implementation however I have some helper functions e.g. running an EPD test suite or the simple output of the divide function (divide counts the resulting positions that are reached up to a given depth for all legal moves in a position) where it would be nice to have the output correctly.
So to not get out of programming practice I implemented SAN output in iCE. It is still not fully correct as it will include the source file or rank if two pieces can reach a target square even if one of the pieces is pinned. But this will not keep me wake at night.
Here is how it looks now. Probably no one except me will ever see such output but that is the point in chess programming. You mainly do it for yourself.
position fen b3k1r1/4p3/4K3/8/R5R1/8/8/6R1 w - - 0 1
divide 5
move divide #
------------------
Rxa8# 0
Rxg8# 0
Ke5 384.173
Kf5 316.308
Rga1 212.167
Rb1 263.331
Rc1 260.142
Rd1 230.933
Re1 235.617
Rf1 233.239
------------------
Rh1 254.486
R1g2 170.818
R1g3 183.832
Raa1 209.972
Ra2 244.058
Ra3 242.493
Rab4 199.705
Rac4 188.081
Rad4 159.635
Rae4 99.606
------------------
Raf4 144.555
Ra5 241.343
Ra6 204.052
Ra7 205.495
R4g2 244.212
R4g3 258.546
Rgb4 294.265
Rgc4 302.132
Rgd4 282.184
Rge4 204.924
------------------
Rgf4 300.731
Rh4 359.710
Rg5 224.460
Rg6 166.798
Rg7 168.936
Total Nodes of 35 moves : 7.690.939, Time : 0.062 sec
Subscribe to:
Posts (Atom)