Author: Gerd Isenberg
Date: 23:20:24 03/24/04
Go up one level in this thread
On March 25, 2004 at 02:00:30, Gerd Isenberg wrote: >On March 24, 2004 at 20:48:00, Sune Fischer 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. >> >>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. > >Hi Sune, > >yes, your idea seems fine because such positions are very unlikely ;-) > >[D] 7k/p7/2p1p1p1/2P1P3/2pBp3/2P1P3/8/6K1 w - - > >I start instead of the center, with the first (lsb) square (bit) set in the >potential trapped bishop attacks so far, most likely it starts with a1. Three >fills and tagging all in 0,1,2,3 reachable squares as done (they are either >trapped squares if third fill indicates no further growing, or not trapped >squares if third fill grows). > >If the third fill don't grows anymore, and the popcount of the filled area is >less than n (let say 4) the filled area is considered as trapped. > >With empty tabu set the while loop terminates in two runs (all light squares, >all dark squares). Worst case seems 10 runs with 10 not connected ilands and >eight trapped. ahem - this one: [D] 3k4/8/8/1p1p1p1p/1P1P1P1P/1p1p1p1p/1P1P1P1P/3K4 w - -
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.