Skip to content

Commit

Permalink
Bug fix for KQKRPs endgame
Browse files Browse the repository at this point in the history
This lost position 8/8/3q4/8/5k2/2P1R3/2K2P2/8 w - - 0 1
was previously evaluated as a draw.

The king and rook need to be correctly placed with
respect to the _same_ pawn.

(Note also that the check for the pawn being on RANK_2
in the old version is redundant: it must be on RANK_2 if
it hopes to protect a rook on RANK_3)

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
  • Loading branch information
ceebo authored and mcostalba committed Oct 15, 2013
1 parent 5aeb907 commit 2bf18bf
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/endgame.cpp
Expand Up @@ -464,10 +464,10 @@ ScaleFactor Endgame<KQKRPs>::operator()(const Position& pos) const {

if ( relative_rank(weakSide, kingSq) <= RANK_2
&& relative_rank(weakSide, pos.king_square(strongSide)) >= RANK_4
&& (pos.pieces(weakSide, ROOK) & rank_bb(relative_rank(weakSide, RANK_3)))
&& (pos.pieces(weakSide, PAWN) & rank_bb(relative_rank(weakSide, RANK_2)))
&& (pos.attacks_from<KING>(kingSq) & pos.pieces(weakSide, PAWN))
&& (pos.attacks_from<PAWN>(rsq, strongSide) & pos.pieces(weakSide, PAWN)))
&& relative_rank(weakSide, rsq) == RANK_3
&& ( pos.pieces(weakSide, PAWN)
& pos.attacks_from<KING>(kingSq)
& pos.attacks_from<PAWN>(rsq, strongSide)))
return SCALE_FACTOR_DRAW;

return SCALE_FACTOR_NONE;
Expand Down

0 comments on commit 2bf18bf

Please sign in to comment.