bitboard algorithm needed

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

Daniel Shawul
Posts: 4185
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: bitboard algorithm needed

Post by Daniel Shawul »

Indeed, I had a screwed bitboard printer which printed a mirrored bb thus switching FileA and FileH. I have now corrected it and it seems to work. It took 27 iterations where there are 29 pawns. The way it was progressing at the beginning (look at iteration 1 to 13) is a little suspect but I think it is working now

Code: Select all

do {
			oldm = m;
			m = (((&#40;m << 8&#41; | &#40;m >> 8&#41;) | 
				 ((&#40;m << 9&#41; | &#40;m << 1&#41;) & UINT64&#40;0xfefefefefefefefe&#41;) | 
				 ((&#40;m >> 7&#41; | &#40;m >> 1&#41;) & UINT64&#40;0x7f7f7f7f7f7f7f7f&#41;)) 
				 & wpawns&#41;;

			if&#40;m & UINT64&#40;0xff00000000000000&#41;) &#123;
				wins++;
				break;
			&#125;
			
		&#125; while&#40;m != oldm&#41;;
Result

Code: Select all

0 0 0 0 0 0 0 1
1 1 1 1 1 0 0 1
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

1.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

2.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

3.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

4.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

5.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

6.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

7.
0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

8.
0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

9.
0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

10.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

11.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

12.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

13.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 1 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

14.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 1 1 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

15.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

16.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

17.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

18.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0

19.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 0 0 0
1 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0

20.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 1 0 0
1 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0

21.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 1 0 0
1 0 0 1 0 0 1 0
1 0 0 0 0 0 0 0

22.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

23.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

24.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

25.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

26.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 1
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

27.
0 0 0 0 0 0 0 1
1 1 1 1 1 0 0 1
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

wins &#58; 1
Press any key to continue . . .
Edmund
Posts: 670
Joined: Mon Dec 03, 2007 3:01 pm
Location: Barcelona, Spain

Re: bitboard algorithm needed

Post by Edmund »

I thought you wanted to move top/top-right

in steps 11,18,21 you are moving bottom-right, thus skipping 3 squares.

then again on 19,22 you are correctly moving top-right

Code: Select all

             ((&#40;m << 9&#41; | &#40;m << 1&#41;) & UINT64&#40;0xfefefefefefefefe&#41;) | 
             ((&#40;m >> 7&#41; | &#40;m >> 1&#41;) & UINT64&#40;0x7f7f7f7f7f7f7f7f&#41;)) 
should be replaced by

Code: Select all

             ((&#40;m >> 7&#41; | &#40;m << 1&#41;) & UINT64&#40;0xfefefefefefefefe&#41;) | 
             ((&#40;m << 9&#41; | &#40;m >> 1&#41;) & UINT64&#40;0x7f7f7f7f7f7f7f7f&#41;)) 
Daniel Shawul
Posts: 4185
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: bitboard algorithm needed

Post by Daniel Shawul »

I was afraid the weird progression at the beginning with a hole (0) in it was really a problem, but it actually isn't. The current value of m is not ored on the next value that is why we see those gaps.

I think we should clear things up.

Code: Select all

top               = m << 8
top/right        = m << 9 = m << &#40;8 + 1&#41;
right              = m << 1
bottom          = m >> 8
bottom/left    = m >> 7 = m >> &#40;8 - 1&#41;
left               = m >> 1
The rights (m << 9) | (m << 1) are together and the lefts (m >> 7) | (m >> 1) are together.

~FileA = UINT64(0xfefefefefefefefe) so the (rights & ~FILEA)

I tried your version of it and it detects it in 28 steps (one more) but I think mine is correct according to the above explanation :? I totally expected yours to fail though.

Code: Select all

0 0 0 0 0 0 0 1
1 1 1 1 1 0 0 1
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

1.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

2.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

3.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

4.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

5.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

6.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

7.
0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

8.
0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

9.
0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

10.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

11.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

12.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

13.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 1 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

14.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 1 1 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

15.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

16.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

17.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0

18.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0

19.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 0 0 0
1 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0

20.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 1 0 0
1 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0

21.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 1 0 0
1 0 0 1 0 0 1 0
1 0 0 0 0 0 0 0

22.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 1 0 0
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

23.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 0
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

24.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 0
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

25.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

26.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

27.
0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 1
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

28.
0 0 0 0 0 0 0 1
1 1 1 1 1 0 0 1
1 0 0 0 0 1 0 1
1 0 1 1 1 1 0 1
1 0 1 0 0 0 0 1
1 0 1 0 1 1 0 1
1 0 0 1 0 0 1 1
1 0 0 0 0 0 0 0

wins &#58; 1
Press any key to continue . . .
Daniel Shawul
Posts: 4185
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: bitboard algorithm needed

Post by Daniel Shawul »

Image
Lets use the above board reduced to an 8x8 size.
A11 = 0, B11 = 1 ....

Shift ------Position of square on HEX board
m << 8 = top/left
m << 9 = top/right
m >> 8 = bottom/right
m >> 7 = bottom/left
m << 1 = right
m >> 1 = left


More trouble. I found a position which causes an infinite loop
Position = 0x7f8e4236891ada9a

Code: Select all


1 1 1 1 1 1 1 0
0 1 1 1 0 0 0 1
0 1 0 0 0 0 1 0
0 1 1 0 1 1 0 0
1 0 0 1 0 0 0 1
0 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1
0 1 0 1 1 0 0 1

1.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 1 1 0 0 1

2.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

3.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

4.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

5.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

6.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

7.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

8.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

9.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

10.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

2
11.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

12.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

13.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

14.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

15.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

16.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

17.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

18.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0

19.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 0 0 1 1 0 1 0
0 1 0 1 1 0 0 1

20.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0
0 1 0 1 1 0 0 1
0 0 0 1 1 0 0 0
..
..
..
Edmund
Posts: 670
Joined: Mon Dec 03, 2007 3:01 pm
Location: Barcelona, Spain

Re: bitboard algorithm needed

Post by Edmund »

The infinite loop can probably be fixed by placing m |= ..
Daniel Shawul
Posts: 4185
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: bitboard algorithm needed

Post by Daniel Shawul »

I tried "m|=" but it but it didn't help.

Here is the position on a hex board.
Black has won! See the connecting 0s from left to top-right corner.

1 1 1 1 1 1 1 0
X 0 1 1 1 0 0 0 1
X X 0 1 0 0 0 0 1 0
X X X 0 1 1 0 1 1 0 0
X X X X 1 0 0 1 0 0 0 1
X X X X X 0 1 0 1 1 0 0 0
X X X X X X 0 1 0 1 1 0 1 1
X X X X X X X 0 1 0 1 1 0 0 1
Edmund
Posts: 670
Joined: Mon Dec 03, 2007 3:01 pm
Location: Barcelona, Spain

Re: bitboard algorithm needed

Post by Edmund »

why doesn't the m|= work?

the infinite loop was because bit 2,10 and 18 were flipping. with the or they should all remain switched on.

btw. don't you want to join tlcv (e.g. fonzys server)
Daniel Shawul
Posts: 4185
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: bitboard algorithm needed

Post by Daniel Shawul »

Ok I will be there tommorrow.
I will think about it this evening.
Edmund
Posts: 670
Joined: Mon Dec 03, 2007 3:01 pm
Location: Barcelona, Spain

Re: bitboard algorithm needed

Post by Edmund »

try replacing 7 by 9 that should fix the other bug
Daniel Shawul
Posts: 4185
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: bitboard algorithm needed

Post by Daniel Shawul »

Trust me that is hopeless :) I tried it on many positions and mine is correct sorry. And not surprisingly it said win in 7 for white for this position. But black actually wins.

Code: Select all

1 1 1 1 1 1 1 0
0 1 1 1 0 0 0 1
0 1 0 0 0 0 1 0
0 1 1 0 1 1 0 0
1 0 0 1 0 0 0 1
0 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1
0 1 0 1 1 0 0 1

1.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 1 1 0 0 1

2.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 1 1 0 0 1
0 1 0 1 1 0 0 1

3.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1
0 1 0 1 1 0 0 1

4.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
1 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1
0 1 0 1 1 0 0 1

5.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 1 1 0 1 0 0 0
1 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1
0 1 0 1 1 0 0 1

6.
0 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0
0 1 0 0 0 0 0 0
0 1 1 0 1 1 0 0
1 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1
0 1 0 1 1 0 0 1

7.
0 1 1 1 0 0 0 0
0 1 1 1 0 0 0 0
0 1 0 0 0 0 1 0
0 1 1 0 1 1 0 0
1 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1
0 1 0 1 1 0 0 1

wins &#58; 1
Press any key to continue . . .