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 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.