Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: and finally?

Author: Gerd Isenberg

Date: 15:49:34 03/25/04

Go up one level in this thread


On March 25, 2004 at 18:30:17, Gerd Isenberg wrote:

>On March 25, 2004 at 08:36:18, Vasik Rajlich wrote:
>
>>On March 24, 2004 at 18:59:02, Gerd Isenberg wrote:
>>
>>>Some minor changes because inOne == inThree is not general enough.
>>>Better to look for no further growing:
>>>if ( (inThree & ~(fromBB|inOne|inTwo)) == 0 && ...
>>>
>>>
>>>// fixed is subset of tabu (may be equal), the set of all own blocked
>>>//  and backward pawns.
>>>// tabu may contain enemy pawn attacks which don't terminate the attack ray
>>>
>>>BitBoard getTrappedBishopSquares(BitBoard fixed, BitBoard tabu, int n)
>>>{
>>>   BitBoard trappedBishopSquares = 0;
>>>   BitBoard potb = ~tabu;
>>>   while ( potb ) {
>>>      BitBoard fromBB  = potb & -potb;
>>>      BitBoard inOne   = fillBishopAttacks(fromBB, ~fixed) & ~tabu;
>>>      BitBoard inTwo   = fillBishopAttacks(inOne,  ~fixed) & ~tabu;
>>>      BitBoard inThree = fillBishopAttacks(inTwo,  ~fixed) & ~tabu;
>>>      // tag all reachable in up to three moves as done
>>>      potb    &= ~(fromBB|inOne|inTwo|inThree);
>>>      inThree &= ~(fromBB|inOne|inTwo); // growing?
>>>      if ( inThree == 0 && popCount(inOne|inTwo) < n )
>>>         trappedBishopSquares |= (fromBB|inOne|inTwo);
>>>   }
>>>   return trappedBishopSquares;
>>>}
>>>
>>>popCount > n considers the whole fill area reachable in two moves.
>>
>>Gerd,
>>
>>thanks, I'll try it in Rybka.
>
>I'll too in IsiChessXMM ;-)
>
>As Sune already mentioned,
>
>fillBishopOccluded(fromBB, ~tabu)
>
>is a bit faster (one 64-bit shift,two ands less for each of four directions)
>than
>
>fillBishopAttacks(fromBB, ~tabu) & ~tabu;
>
>But the latter has the option, to distinguish between mechanical own fixed pawns
>(or defended enemy pawns) and additional enemy pawn controls ...
>
>fillBishopAttacks(fromBB, ~fixed) & ~tabu;


oups wrong! fillOccluded is still faster here than getAttacks and may even
supplied with an additional masking out of enemy pawn attacks.

fillBishopOccluded(fromBB, ~fixed) & ~tabu;



// fixed is subset of taboo (may be equal), the set of all own blocked
//  and backward pawns.
// tabu may contain enemy pawn attacks which don't terminate the attack ray

BitBoard getTrappedBishopSquares(BitBoard fixed, BitBoard taboo, int n)
{
   BitBoard trappedBishopSquares = 0;
   BitBoard potb = ~taboo;
   while ( potb ) {
      BitBoard fromBB  = potb & -potb;
      BitBoard inOne   = fillBishopOccluded(fromBB, ~fixed) & ~taboo;
      BitBoard inTwo   = fillBishopOccluded(inOne,  ~fixed) & ~taboo;
      BitBoard inThree = fillBishopOccluded(inTwo,  ~fixed) & ~taboo;
      // tag all reachable in up to three moves as done
      potb    &= ~inThree;
      inThree &= ~inTwo; // growing?
      if ( inThree == 0 && popCount(inTwo) < n )
         trappedBishopSquares |= inTwo;
   }
   return trappedBishopSquares;
}



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.