Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: and finally?

Author: Sune Fischer

Date: 17:48:00 03/24/04

Go up one level in this thread


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.

Hi Gerd,

I have not fully understood what it is you do.
Can you explain what the while loop does?

I was think one could just do something like

  bb = FillBishopOccluded((D4|D5|E4|E5),~tabu);
  bb = FillBishopOccluded(bb,~tabu);
  return (~FillBishopOccluded(bb,~tabu));

So all those squares not reachable from the center is trappable squares.

It needs to be done for both sides, as the tabu isn't the same for black and
white, assuming I have understood it correctly that is.

-S.



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.