Complicating code in C#

Discussion of chess software programming and technical issues.

Moderator: Ras

Daniel Anulliero
Posts: 772
Joined: Fri Jan 04, 2013 4:55 pm
Location: Nice

Re: Complicating code in C#

Post by Daniel Anulliero »

What is the interest to win on time? Even versus sf 13 ?
Better trying to win one normal game each month at the joost's monthly tournament 😁
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

Daniel Anulliero wrote: Sat May 29, 2021 12:46 pm What is the interest to win on time? Even versus sf 13 ?
Better trying to win one normal game each month at the joost's monthly tournament 😁
No that's too difficult or truly impossible. I only do easy goals like winning from Stockfish.

Maybe we should organize a hyperbulllet tournament. Makes it possible for Skipper to win a game.
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

Show goes on. 35 seconds game. Skipper using (only) 20 seconds.

[pgn]
[Event "Computer Chess Game"]
[Site "LAPTOP-1FK7MTIP"]
[Date "2021.05.30"]
[Round "-"]
[White "Skipper_8_16"]
[Black "Stockfish 13"]
[Result "1-0"]
[TimeControl "35"]
[Annotator "1. -0.21 1... -0.19"]

1. e4 {-0.21/8} e5 {-0.19/22 1.6} 2. Nf3 {-0.12/7 0.6} Nc6 {-0.07/19 0.2}
3. Bc4 {-0.27/7 0.6} Nf6 {-0.22/20 0.2} 4. Nc3 {-0.30/6 0.6} Nxe4
{+0.03/19 0.4} 5. Nxe4 {-0.47/7 0.6} d5 {+0.00/21 0.2} 6. Bd3 {-0.54/7 0.6}
dxe4 {+0.03/21 0.1} 7. Bxe4 {-0.27/7 0.5} Bd6 {+0.16/21 0.5} 8. d3
{-0.26/7 0.5} Ne7 {+0.44/18 0.5} 9. d4 {-0.89/6 0.5} f5 {+3.07/18 0.3} 10.
dxe5 {-1.99/6 0.5} Bb4+ {+5.10/18 0.7} 11. Bd2 {-2.28/8 0.5} fxe4
{+5.42/19 0.4} 12. Bxb4 {-1.90/8 0.5} Qxd1+ {+5.55/18 0.4} 13. Rxd1
{-1.55/9 0.5} exf3 {+5.67/19 0.2} 14. gxf3 {-1.47/8 0.5} Rf8 {+5.36/21 1.1}
15. Rd3 {-0.88/6 0.5} Be6 {+5.62/20 1.9} 16. a3 {-1.13/6 0.5} Rf4
{+5.89/21 3} 17. Bd2 {-0.86/6 0.5} Rc4 {+5.86/19 0.7} 18. Bc3 {-1.22/7 0.5}
g6 {+6.78/20 2.2} 19. Rd4 {-1.05/7 0.5} Rxd4 {+6.67/17 0.4} 20. Bxd4
{-1.10/8 0.4} Nf5 {+6.55/23 4} 21. Bc3 {-2.20/8 0.5} Rd8 {+6.71/21 0.5} 22.
f4 {-1.14/7 0.4} b6 {+6.22/23 4} 23. a4 {-1.01/7 0.4} Rd5 {+6.09/21 1.7}
24. Rf1 {-0.89/6 0.4} Rc5 {+6.71/17 0.6} 25. Kd2 {-1.25/7 0.4} Rc4
{+7.25/16 0.3} 26. a5 {-1.87/8 0.4} Rxf4 {+6.27/21 2.3} 27. axb6
{-1.85/8 0.4} axb6 {+6.71/16 0.3} 28. Kc1 {-2.55/7 0.4} Nd4 {+6.63/19 1.6}
29. Bd2 {-2.03/6 0.4} Re4 {+6.83/16 0.3} 30. Re1 {-2.28/8 0.4} Rg4
{+6.01/18 0.7} 31. Bc3 {-1.99/6 0.4} b5 {+6.17/18 0.1} 32. b4 {-1.85/6 0.4}
Nf5 {+6.63/18 0.4} 33. Re2 {-1.84/6 0.4} Rc4 {+8.63/15 0.2} 34. Kb2
{-2.12/8 0.4} Ne7 {+6.29/18 0.5} 35. Bd2 {-2.20/7 0.4} Nd5 {+7.74/16 0.3}
36. c3 {-2.35/7 0.3} Nb6 {+7.47/19 0.5} 37. f4 {-1.90/6 0.4} Rc6
{+8.25/17 0.2} 38. Kc2 {-2.10/7 0.3} Bf5+ {+7.82/14 0.2} 39. Kb3
{-2.28/8 0.3} Bg4 {+7.81/17 0.1} 40. Rg2 {-2.36/7 0.3} Bh3 {+6.76/15 0.2}
41. Rg3 {-2.25/8 0.3} Bf5 {+6.84/12 0.2} 42. Ka2 {-2.18/7 0.3} Nc4
{+10.52/13 0.2} 43. Kb3 {-6.41/7 0.4} Nxd2+ {+10.06/11 0.3} 44. Kb2
{-7.15/8 0.3} Rc4 {+11.48/19 0.1} 45. Kc1 {-7.20/7 0.3} Ne4 {+11.44/4 0.1}
46. Rf3 {-8.28/8 0.3}
{White wins on time} 1-0
[/pgn]
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

hi hi hi. I'm mad. 40s

[pgn]
[Event "Computer Chess Game"]
[Site "LAPTOP-1FK7MTIP"]
[Date "2021.05.31"]
[Round "-"]
[White "Skipper_8_16"]
[Black "Stockfish 13"]
[Result "1-0"]
[TimeControl "40"]
[Annotator "1. +0.61 1... -0.12"]

1. d4 {+0.61/8} Nf6 {-0.12/22 2.7} 2. c4 {+0.82/7 0.7} e6 {-0.11/20 0.1} 3.
Nf3 {+0.66/7 0.7} d5 {-0.05/19 0.2} 4. Nc3 {+0.60/7 0.7} c5 {-0.17/18 0.4}
5. cxd5 {+0.60/7 0.6} cxd4 {-0.37/19 0.7} 6. dxe6 {+0.88/7 0.6} dxc3
{+1.40/18 0.9} 7. exf7+ {+0.27/8 0.6} Ke7 {+1.30/19 0.1} 8. Qxd8+
{+0.87/9 0.6} Kxd8 {+1.87/17 0.4} 9. bxc3 {+2.89/8 0.6} Nc6 {+1.94/16 0.1}
10. Bf4 {+2.89/6 0.6} Ke7 {+2.24/16 0.5} 11. e4 {+0.56/7 0.6} Nxe4
{+2.72/19 1.3} 12. Bd3 {-0.89/7 0.6} Nc5 {+2.87/19 0.2} 13. Bb5
{-1.42/7 0.6} a6 {+3.32/17 0.6} 14. Bxc6 {-0.30/7 0.6} Nd3+ {+3.63/16 0.5}
15. Kd2 {-0.57/8 0.5} Nxf4 {+3.49/18 0.1} 16. Be8 {-0.53/7 0.5} Nxg2
{+3.55/19 2.4} 17. Rab1 {-1.19/7 0.5} g6 {+4.20/17 0.5} 18. Rhg1
{-1.21/5 0.5} Bh6+ {+4.06/19 0.6} 19. Kd1 {-1.19/6 0.5} Nf4 {+4.65/17 0.1}
20. Re1+ {-1.18/5 0.5} Kf8 {+4.59/19 0.7} 21. Nd4 {-1.52/6 0.5} b5
{+4.63/20 0.8} 22. Bc6 {-0.87/6 0.5} Ra7 {+5.59/18 0.5} 23. Re8+
{-1.18/7 0.5} Kg7 {+5.89/19 0.7} 24. a4 {-2.16/6 0.5} Rxf7 {+5.48/21 1.0}
25. Rxh8 {-2.45/7 0.5} Kxh8 {+5.55/20 0.3} 26. axb5 {-2.37/8 0.5} axb5
{+5.46/19 0.2} 27. Rxb5 {-2.62/7 0.4} Bh3 {+5.25/24 6} 28. Be4
{-2.02/7 0.4} Nh5 {+5.50/18 0.2} 29. Bf3 {-2.00/6 0.5} Nf6 {+5.78/18 0.6}
30. Rb8+ {-2.31/8 0.4} Rf8 {+5.72/22 1.0} 31. Rxf8+ {-2.72/7 0.4} Bxf8
{+5.50/21 0.8} 32. Nb5 {-3.13/7 0.4} Be7 {+5.33/21 2.3} 33. Ke1
{-2.99/7 0.4} Nh5 {+5.23/22 1.0} 34. Be4 {-2.55/7 0.4} Kg7 {+5.22/18 0.3}
35. c4 {-2.74/7 0.4} Bc5 {+5.59/16 0.2} 36. Nc7 {-2.82/7 0.4} Nf6
{+5.40/21 0.8} 37. Bd5 {-3.03/7 0.4} Bd6 {+5.09/19 1.0} 38. Ne6+
{-3.25/7 0.4} Kh6 {+4.72/18 0.2} 39. Nd8 {-3.44/7 0.4} Bc5 {+4.78/20 0.7}
40. Nf7+ {-2.72/7 0.4} Kh5 {+5.28/19 0.7} 41. Ne5 {-2.84/7 0.4} Bf5
{+5.36/15 0.2} 42. Bf3+ {-2.84/7 0.4} Kh6 {+5.29/17 0.2} 43. Kf1
{-2.79/6 0.3} Kg7 {+5.01/18 0.2} 44. Kg2 {-2.97/6 0.3} h6 {+4.92/18 0.6}
45. Bc6 {-3.00/6 0.3} Nh5 {+5.25/17 0.4} 46. Bd5 {-2.87/7 0.3} g5
{+5.13/19 1.2} 47. f3 {-3.00/7 0.3} Nf4+ {+7.21/18 0.2} 48. Kf1
{-3.39/8 0.3} Bb4 {+5.75/21 0.9} 49. Nc6 {-3.10/8 0.3} Bc5 {+5.69/18 0.4}
50. Ke1 {-3.17/7 0.3} Kf6 {+5.35/19 0.4} 51. Kf1 {-3.40/7 0.3} h5
{+5.86/16 0.3} 52. Ke1 {-3.55/7 0.3} h4 {+6.17/17 0.2} 53. Kd2
{-3.58/7 0.3} Bg1 {+6.83/16 0.2} 54. Be4 {-3.64/7 0.3} Bxe4 {+7.78/17 0.1}
55. fxe4 {-3.33/8 0.3} g4 {+7.94/16 0.2} 56. e5+ {-4.17/8 0.3} Kg5
{+8.44/14 0.2} 57. Nd8 {-4.11/7 0.3} Bxh2 {+8.73/14 0.2} 58. c5
{-7.18/9 0.3} g3 {+9.63/14 0.2} 59. c6 {-6.74/9 0.3} Nd5 {+10.01/13 0.2}
60. Ne6+ {-10.45/8 0.3} Kg4 {+11.17/18 0.2} 61. Nd4 {-10.36/8 0.3} g2
{+11.36/15 0.2} 62. Ne2 {-11.87/8 0.3} h3 {+16.15/20 0.2} 63. Kd3
{-10.72/7 0.3} Bxe5 {+7.79/5 0.1} 64. Ke4 {-13.58/8 0.3} h2 {+60.96/25 0.1}
65. Kxd5 {-14.12/8 0.3} h1=Q {+60.20/6 0.2} 66. Kxe5 {-14.00/8 0.2}
{White wins on time} 1-0
[/pgn]
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

Instead of FiftyMovesCount++

I now have written this

Code: Select all

 var fiftyMoves = Pieces[OTHER] & FIFTY_MOVES;
 var newVal = (ulong)(-(long)(~fiftyMoves));        
 Pieces[OTHER] &= NOT_FIFTY_MOVES;
 Pieces[OTHER] |= newVal;
Because x + 1 = -(~x) I found on internet;
And I reserved FiftyMovesCount = Pieces[OTHER] & FIFTY_MOVES in the bitboard
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

Henk wrote: Tue Jun 01, 2021 10:42 am Instead of FiftyMovesCount++

I now have written this

Code: Select all

 var fiftyMoves = Pieces[OTHER] & FIFTY_MOVES;
 var newVal = (ulong)(-(long)(~fiftyMoves));        
 Pieces[OTHER] &= NOT_FIFTY_MOVES;
 Pieces[OTHER] |= newVal;
Because x + 1 = -(~x) I found on internet;
And I reserved FiftyMovesCount = Pieces[OTHER] & FIFTY_MOVES in the bitboard
I doubt if that is correct. Have to test or check. For
public const UInt64 FIFTY_MOVES = ((2 << 7) - 1) << 8;

And not 0 .. bits are reserved. Otherwise I might as well have written
newVal = fiftyMoves + 1

Or maybe I have to rewrite so that first bits are reserved for fifty moves count.
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

Henk wrote: Tue Jun 01, 2021 11:26 am
Henk wrote: Tue Jun 01, 2021 10:42 am Instead of FiftyMovesCount++

I now have written this

Code: Select all

 var fiftyMoves = Pieces[OTHER] & FIFTY_MOVES;
 var newVal = (ulong)(-(long)(~fiftyMoves));        
 Pieces[OTHER] &= NOT_FIFTY_MOVES;
 Pieces[OTHER] |= newVal;
Because x + 1 = -(~x) I found on internet;
And I reserved FiftyMovesCount = Pieces[OTHER] & FIFTY_MOVES in the bitboard
I doubt if that is correct. Have to test or check. For
public const UInt64 FIFTY_MOVES = ((2 << 7) - 1) << 8;

And not 0 .. bits are reserved. Otherwise I might as well have written
newVal = fiftyMoves + 1

Or maybe I have to rewrite so that first bits are reserved for fifty moves count.
No does not work of course. Being stupid. Probably best is to make fifty moves first n bits. Or otherwise do the extra shifting:

Code: Select all

 public const int OFFSET_FIFTY_MOVES = 8;

 var fiftyMoves = (Pieces[OTHER] & FIFTY_MOVES) >> OFFSET_FIFTY_MOVES;
 var newVal = fiftyMoves + 1;   
 Pieces[OTHER] &= NOT_FIFTY_MOVES;
 Pieces[OTHER] |= newVal << OFFSET_FIFTY_MOVES;          
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

45 sec

[pgn]
[Event "Computer Chess Game"]
[Site "LAPTOP-1FK7MTIP"]
[Date "2021.06.01"]
[Round "-"]
[White "Skipper_8_16"]
[Black "Stockfish 13"]
[Result "1-0"]
[TimeControl "45"]
[Annotator "1. +0.19 1... -0.39"]

1. e4 {+0.19/8} e5 {-0.39/22 3} 2. Bc4 {+0.36/7 0.7} Nf6 {+0.02/18 0.5} 3.
Nc3 {+0.50/7 0.8} Nc6 {+0.10/19 0.5} 4. Nf3 {+0.10/7 0.7} Nxe4
{-0.02/21 0.2} 5. Nxe4 {+0.14/7 0.7} d5 {+0.00/22 0.2} 6. Bd3 {+0.08/8 0.7}
dxe4 {+0.06/23 0.1} 7. Bxe4 {-0.13/7 0.7} Bd6 {+0.19/21 0.1} 8. d3
{+0.20/7 0.7} Ne7 {+0.42/20 1.8} 9. d4 {+0.42/6 0.7} f5 {+2.84/19 0.5} 10.
dxe5 {-1.54/7 0.7} Bb4+ {+5.01/18 0.5} 11. Bd2 {-1.69/9 0.7} fxe4
{+5.60/19 0.6} 12. Bxb4 {-1.37/9 0.6} Qxd1+ {+5.67/17 0.2} 13. Rxd1
{-1.12/9 0.6} exf3 {+5.79/19 0.2} 14. gxf3 {-1.02/8 0.6} Nc6 {+5.78/22 2.7}
15. Bc3 {-0.44/7 0.6} Be6 {+5.87/19 0.5} 16. a4 {-0.44/6 0.6} O-O
{+5.98/22 4} 17. Rd3 {-1.48/7 0.6} Rf5 {+5.86/19 0.3} 18. Re3 {-1.58/7 0.6}
Raf8 {+6.21/23 3} 19. a5 {-1.38/7 0.6} b5 {+6.09/22 3} 20. b4 {-0.94/7 0.6}
Rf4 {+7.17/21 3} 21. O-O {-0.94/7 0.6} Rc4 {+6.54/25 5} 22. a6
{-0.35/8 0.5} Rd8 {+7.17/22 1.6} 23. Kh1 {-0.13/6 0.5} Ne7 {+7.55/21 2.1}
24. Rc1 {+1.19/6 0.6} Rd5 {+7.02/21 0.9} 25. Kg2 {+0.59/6 0.5} Ng6
{+8.40/18 0.4} 26. Kg1 {+0.41/5 0.5} Nf4 {+8.09/19 0.4} 27. Be1
{-0.32/7 0.6} Rd8 {+6.97/22 1.8} 28. c3 {+0.89/7 0.5} Kf7 {+8.58/18 0.2}
29. Ra1 {+1.07/7 0.5} Ke8 {+7.00/24 1.8} 30. Kh1 {+1.40/7 0.5} Ng6
{+7.14/19 0.9} 31. f4 {+0.29/7 0.5} Nxf4 {+7.96/17 0.3} 32. Kg1
{+0.15/7 0.5} h5 {+8.21/20 0.1} 33. Rb1 {+0.22/7 0.5} Rd7 {+7.86/21 0.7}
34. Kf1 {+0.19/6 0.5} g5 {+7.92/19 0.7} 35. Ra1 {+0.19/7 0.5} g4
{+8.83/17 0.4} 36. Rb1 {+0.06/6 0.5} h4 {+8.80/18 0.5} 37. Ra1
{-0.19/6 0.4} h3 {+10.48/16 0.2} 38. Ra5 {-0.43/6 0.5} Rd5 {+8.78/17 0.3}
39. Kg1 {-1.42/7 0.4} Rd1 {+10.09/14 0.2} 40. Kf1 {-1.12/6 0.4} Ng2
{+11.90/21 0.1} 41. Rxb5 {-2.67/7 0.4} Rf4 {+11.99/14 0.2} 42. Rb8+
{-5.06/7 0.5} Kd7 {+13.48/11 0.2} 43. Rd3+ {-7.58/8 0.4} Rxd3
{+99.83/34 0.1} 44. Rh8 {-7.62/7 0.4} Re4 {+99.89/4 0.2} 45. Rh7+
{-10.45/7 0.5}
{White wins on time} 1-0
[/pgn]
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

Current performance bottleneck is computing hashkeys. So I try Zobrist key again. But I only saved a small portion of the code. So I have to implement it again. Promotion moves, Castling, En Passant, captures. The whole circus.
Henk
Posts: 7251
Joined: Mon May 27, 2013 10:31 am

Re: Complicating code in C#

Post by Henk »

15 sec against Fairy-Max 4.8V. By the way I forgot that I still have to repair three fold repetition bug in Skipper.

[pgn]
[Event "Computer Chess Game"]
[Site "LAPTOP-1FK7MTIP"]
[Date "2021.06.03"]
[Round "-"]
[White "Skipper_8_16"]
[Black "Fairy-Max 4.8V"]
[Result "1-0"]
[TimeControl "15"]
[Annotator "1. +0.09 2... +0.09"]

1. e4 {+0.09/7} c6 2. Nf3 {+0.27/6 0.3} d6 {+0.09/6 0.4} 3. d4
{+0.62/6 0.3} f5 {+0.13/5 0.3} 4. Nc3 {+0.50/6 0.3} Be6 {+0.04/5 0.2} 5.
Ng5 {+1.25/6 0.3} Bd7 {-0.35/7 0.5} 6. Bc4 {+1.86/6 0.3} d5 {-0.79/6 0.4}
7. exd5 {+1.44/6 0.2} b5 {-0.68/5 0.4} 8. Be2 {+2.14/6 0.2} Qa5
{-0.85/6 1.2} 9. Bh5+ {+2.51/5 0.3} g6 {-0.63/5 0.6} 10. Bf3 {+2.03/5 0.2}
b4 {-0.55/6 0.2} 11. dxc6 {+1.78/6 0.2} Nxc6 {-0.59/6 0.3} 12. Ne2
{+1.65/5 0.2} Bg7 {-0.83/5 1.0} 13. Ne6 {+1.89/5 0.2} Bh6 {-0.93/5 0.2} 14.
Bxh6 {+2.75/6 0.2} Nxh6 {-1.07/6 0.2} 15. Ng7+ {+2.69/5 0.2} Kf7
{+0.02/5 0.2} 16. d5 {+1.39/5 0.2} Ne5 {-0.16/6 0.2} 17. Ne6 {+1.33/6 0.2}
b3+ {-0.20/5 0.2} 18. Nc3 {+1.38/6 0.2} Nxf3+ {-0.21/6 0.3} 19. gxf3
{+1.20/6 0.2} bxc2 {-0.50/6 0.2} 20. Qxc2 {+1.48/5 0.2} Bxe6 {-0.46/6 0.1}
21. dxe6+ {+2.09/7 0.2} Kxe6 {-0.84/6 1.0} 22. O-O-O {+2.17/6 0.2} Kf7
{-0.49/6 0.2} 23. Kb1 {+2.27/5 0.2} Rab8 {-0.10/5 0.2} 24. Rd7
{+1.69/5 0.2} Rhc8 {+0.00/5 0.2} 25. Qe2 {+1.78/5 0.2} Ng8 {-0.03/5 0.1}
26. Nd1 {+1.37/5 0.2} Qa4 {+0.03/5 0.2} 27. Rd3 {+1.30/5 0.2} Nf6
{-0.04/4 0.2} 28. Ne3 {+0.93/5 0.2} h5 {-0.02/4 0.2} 29. Nd5 {+1.34/5 0.2}
Nxd5 {+0.02/5 0.2} 30. Rxd5 {+1.24/6 0.2} h4 {-0.03/4 0.2} 31. Re5
{+1.35/5 0.2} Rb7 {-0.06/5 0.2} 32. Qd2 {+1.37/5 0.2} Rcb8 {+0.34/5 0.3}
33. Qd5+ {+1.37/5 0.2} Kf8 {+0.36/5 0.2} 34. b3 {+0.88/5 0.2} h3
{+0.59/6 0.2} 35. Qd2 {+1.16/5 0.2} Rxb3+ {+1.38/6 0.3} 36. Ka1
{-0.92/6 0.2} Qa3 {+1.37/5 0.1} 37. Ra5 {-0.49/5 0.2} Qb2+ {+1.38/7 0.2}
38. Qxb2 {-0.81/8 0.2} Rxb2 {+1.26/7 0.1} 39. Rxa7 {-0.85/7 0.2} Rxf2
{+1.44/7 0.1} 40. Ra3 {-1.71/7 0.2} Kf7 {+2.01/6 0.2} 41. f4 {-1.11/7 0.1}
Rh8 {+1.46/8 0.2} 42. Re3 {-1.44/7 0.2} Ra8 {+1.47/7 0.2} 43. a3
{-1.04/7 0.2} Rh8 {+1.33/7 0.2} 44. Rhe1 {-1.08/7 0.2} Rxf4 {+1.30/7 0.2}
45. Rxe7+ {-1.70/7 0.1} Kf6 {+1.29/8 0.2} 46. Ka2 {-1.76/6 0.1} Rf2+
{+1.38/6 0.2} 47. R7e2 {-2.27/8 0.1} Rf3 {+1.33/6 0.2} 48. Re6+
{-1.91/7 0.2} Kf7 {+1.32/7 0.2} 49. Re7+ {-1.86/8 0.1} Kf8 {+1.28/7 0.1}
50. Re8+ {-1.80/8 0.2} Kg7 {+1.38/8 0.2} 51. R1e7+ {-1.84/8 0.1} Kf6
{+1.32/7 0.2} 52. Re6+ {-1.80/8 0.2} Kf7 {+0.01/8 0.1} 53. R8e7+
{-1.76/8 0.2} Kg8 {+0.02/8 0.2} 54. Rxg6+ {-1.30/7 0.1} Kf8 {+0.67/6 0.1}
55. Rb7 {-0.58/7 0.1} Rh5 {+0.59/5 0.2} 56. Rf6+ {-0.38/6 0.2} Ke8
{+0.63/6 0.2} 57. Rc6 {-0.40/7 0.1} Rd3 {+0.57/5 0.2} 58. Rc8+
{-0.30/8 0.1} Rd8 {+0.52/7 0.1} 59. Rxd8+ {-0.29/9 0.2}
{White wins on time} 1-0
[/pgn]