Author: Ulrich Tuerke
Date: 07:41:32 03/26/01
Go up one level in this thread
On March 26, 2001 at 09:53:55, Paul wrote: >And the message you probably mean is 119911 (now isn't that a nice number :), >written by John Stanback: > >**************************************************************************** >Here is a routine that I used in gnuchess a long time ago. The >variable "cnt" contains the number of repetitions of the current >position (P). GameCnt is the ply number of current position, including >game history and current search path. Game50 is the last irrersable >move. GameList[] contains all the game+search moves. >Initially the array b[] is zero'd. Then the GameList[] array is >followed backward until the last non-reversible move >and b[f] is incremented and b[t] is decremented. Variable c contains >a count of the number squares which are different from board position P. >If c == 0 it means that the board position in the loop matches >position P and *cnt is incremented. I think there are some rare cases >where this doesn't work quite right, but it worked fine in practice. >It doesn't slow down the search because typically there has been >an irreversible move recently so that GameCnt <= Game50+3. > > >John > > > >repetition(int *cnt) >{ >int i,c,f,t; >unsigned char b[64]; >unsigned int m; > > *cnt = c = 0; > if (GameCnt > Game50+3) > { > for (i = 0; i < 64; b[i++] = 0); > for (i = GameCnt; i > Game50; i--) > { > m = GameList[i].gmove; > f = m>>8; > t = m&0xFF; > if (++b[f] == 0) c--; else c++; > if (--b[t] == 0) c--; else c++; > if (c == 0) (*cnt)++; > } > } >} >**************************************************************************** > >Hope this is it ... >Paul Do you think that this is simpler than just comparing the hash codes ? I don't. Uli
This page took 0.01 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.