From 2bf18bfc6396ae7292f57fc021b390fc05cd0f95 Mon Sep 17 00:00:00 2001 From: Chris Caino Date: Tue, 15 Oct 2013 00:09:05 +0100 Subject: [PATCH] Bug fix for KQKRPs endgame 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 --- src/endgame.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/endgame.cpp b/src/endgame.cpp index b9ac17a2..5906b4d5 100644 --- a/src/endgame.cpp +++ b/src/endgame.cpp @@ -464,10 +464,10 @@ ScaleFactor Endgame::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(kingSq) & pos.pieces(weakSide, PAWN)) - && (pos.attacks_from(rsq, strongSide) & pos.pieces(weakSide, PAWN))) + && relative_rank(weakSide, rsq) == RANK_3 + && ( pos.pieces(weakSide, PAWN) + & pos.attacks_from(kingSq) + & pos.attacks_from(rsq, strongSide))) return SCALE_FACTOR_DRAW; return SCALE_FACTOR_NONE; -- 2.39.2