Resist Repetition Work-Around
After releasing the original V1.00 version of this project, it turned out that
Sargon 1978 UCI engine became unexpectedly popular as a training partner.
There were some complaints though, in particular people didn't understand
why Sargon would often simply repeat and concede a draw in overwhelming positions.
Version 1.01 was released to try and work around this problem, to some extent
at least. The UCI wrapper now checks whether Sargon is repeating the position,
and if so it asks Sargon to try again, with repeating moves eliminated from
the candidate list. If Sargon can find a non-repeating move that still leaves
it better (in its opinion) that move is played instead.
Sargon will not magically become an aggressive finisher, it will just resist
making an immediate draw. If its position is not overwhelming this might mean
it just dithers, failing to make progress. It might make for a worse user
experience as this could be more frustrating to experience than an immediate draw.
There are some other tweaks to make Sargon V1.01 a little more efficient and
effective as a chess engine. If a fixed depth is specified, Sargon does
no longer iterates to that depth (seemed a good idea at the time). Instead it
goes directly to the depth, which is a significant speed up. Also if Sargon
1978 calculates a forced mate it will play down the forced mate PV if given
the opportunity. This will solve a different problem (to the repetition problem)
where Sargon 1978 sometimes dallies even when it has a forced mate.