I was thinking along those lines too
For tracking 3 fold repetition, which by definition requires two or more 'complete' board states to be = , i was thinking of putting the information into a string. If String A = any previous string then you are one step closer to 3fold repetition. If string A <> any previous string then add it to the list of all previous strings.
knowing if you are 1 or 2 steps away from 3fold repetition will profoundly effect the valuations of the effected positions
any half decent chess engine will need that value at all times, as its creating the move tree AND when its deciding which branches to prune
Chess games are typically 30 to 70 moves long but you can cull the 3fold list every time certain events occur so the length of the list you need to check will most often range between 1 and 10. Though it may exceed 50 in certain end games but then you have a whole heap less to calculate as most of the pieces are off the board by then....The computation problem arises when you need to compute it along side the many thousands or millions of board positions you generate each and every move. Im not sure what % CPU burden this will cause, perhaps insignificant in the overall scheme of things.
I have played several games where sacking a piece has enabled me to escape defeat as by that action i exposed the enemy king and got a draw through repetition...Its for reasons like this that its wise to include 3fold evaluation at every stage and not just an after thought.
Board representationhttp://en.wikipedia.org/wiki/Board_repr ... 28chess%29
Chess piece relative value.http://en.wikipedia.org/wiki/Chess_piece_relative_value
Im also considering embedding all important information in the board representation. The value of the pieces, live en passant, the check status of the king. The data size might double but it might make evaluation of the board and legality checking a much swifter process.
An eloquent board representation might
well reduce the amount of fudge code/computation required for 100% legal move generation and at the same time yield 'ball park figures' for evaluations.
example in decimal for clarity
eg a king might be 9000 its piece value, +/- smaller numbers which define its board position, value at that position, check status, castling potential, freedoms of movement etc
The key problem for 100% legal move generation is having to wade through miles & miles of unimportant data in search of the snippets of important data. If some or perhaps even all of those golden nuggets can be encoded in the board representation then you don't have to go looking to far for them.