From c28c40186e22d901720ddc29bc99d2db4a08b4a2 Mon Sep 17 00:00:00 2001 From: Paul-Nicolas Madelaine Date: Mon, 3 Nov 2025 16:07:38 +0100 Subject: [PATCH] revert pinned pieces computation --- src/position.rs | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/position.rs b/src/position.rs index df270ed..c492edf 100644 --- a/src/position.rs +++ b/src/position.rs @@ -1050,13 +1050,10 @@ impl Position { } let blockers_x_ray = blockers & !(x | y); - let pinned_diagonally = (lookup::bishop(king_square, blockers_x_ray) & theirs.bishop()) - .map(|sq| lookup::segment(king_square, sq)) - .reduce_or(); - let pinned_horizontally = (lookup::rook(king_square, blockers_x_ray) & theirs.rook()) - .map(|sq| lookup::segment(king_square, sq)) - .reduce_or(); - let pinned = pinned_diagonally | pinned_horizontally; + let pinned = ((lookup::bishop(king_square, blockers_x_ray) & theirs.bishop()) + | (lookup::rook(king_square, blockers_x_ray) & theirs.rook())) + .map(|sq| lookup::segment(king_square, sq)) + .reduce_or(); let checker = checkers.first(); let block_check = checker @@ -1228,28 +1225,31 @@ impl Position { // pinned pieces { - let aux = |visitor: &mut T, role, mask| { - for from in global_mask_from & *ours.get(role) & mask { + let aux = |visitor: &mut T, role| { + for from in global_mask_from & *ours.get(role) & pinned { visitor.moves( - (global_mask_to & !us & pinned & lookup::line(king_square, from)).map( - |to| RawMove { - kind: MoveType::PieceMove, - from, - to, - role, - }, - ), + (global_mask_to + & !us + & pinned + & lookup::line(king_square, from) + & lookup::targets(role, from, blockers)) + .map(|to| RawMove { + kind: MoveType::PieceMove, + from, + to, + role, + }), ) } }; if visitor.roles(Role::Bishop) { - aux(visitor, Role::Bishop, pinned_diagonally); + aux(visitor, Role::Bishop); } if visitor.roles(Role::Rook) { - aux(visitor, Role::Rook, pinned_horizontally); + aux(visitor, Role::Rook); } if visitor.roles(Role::Queen) { - aux(visitor, Role::Queen, pinned); + aux(visitor, Role::Queen); } } }