X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=remoteglot.pl;h=5e1e94aa99cdf28cfbe1909b5f84a5d2817ef689;hb=ddc3383ef834627f59f3dd810e78040f6de2105b;hp=e021c664894e4fb0a077f82ec81d79abff6fc61b;hpb=48c786c43fab6dfe37c0fe70aa474431f33d2b27;p=remoteglot diff --git a/remoteglot.pl b/remoteglot.pl index e021c66..5e1e94a 100755 --- a/remoteglot.pl +++ b/remoteglot.pl @@ -121,7 +121,7 @@ my $ev1 = AnyEvent->io( } ); if (defined($remoteglotconf::target)) { - if ($remoteglotconf::target =~ /^http:/) { + if ($remoteglotconf::target =~ /^https?:/) { fetch_pgn($remoteglotconf::target); } else { $t->cmd("observe $remoteglotconf::target"); @@ -526,7 +526,7 @@ sub prettyprint_pv_no_cache { sub prettyprint_pv { my ($pos, @pvs) = @_; - my $cachekey = join('', @pvs); + my $cachekey = $pos->{'fen'} . join('', @pvs); if (exists($pos->{'prettyprint_cache'}{$cachekey})) { return @{$pos->{'prettyprint_cache'}{$cachekey}}; } else { @@ -536,6 +536,8 @@ sub prettyprint_pv { } } +my %tbprobe_cache = (); + sub complete_using_tbprobe { my ($pos, $info, $mpv) = @_; @@ -553,11 +555,18 @@ sub complete_using_tbprobe { # Run through the PV until we are at a 6-man position. # TODO: We could in theory only have 5-man data. my @pv = @{$info->{'pv' . $mpv}}; - my $key = join('', @pv); + my $key = $pos->fen() . " " . join('', @pv); my @moves = (); - if (exists($pos->{'tbprobe_cache'}{$key})) { - @moves = $pos->{'tbprobe_cache'}{$key}; + if (exists($tbprobe_cache{$key})) { + @moves = @{$tbprobe_cache{$key}}; } else { + if ($mpv ne '') { + # Force doing at least one move of the PV. + my $move = shift @pv; + push @moves, $move; + $pos = $pos->make_move(parse_uci_move($move)); + } + while ($pos->num_pieces() > 6 && $#pv > -1) { my $move = shift @pv; push @moves, $move; @@ -579,6 +588,8 @@ sub complete_using_tbprobe { ($pos, $uci_move) = $pos->make_pretty_move($move); push @moves, $uci_move; } + + $tbprobe_cache{$key} = \@moves; } $info->{'pv' . $mpv} = \@moves; @@ -1079,7 +1090,7 @@ sub score_digest { if ($score == 0 && $info->{'tablebase'}) { return ['d', undef]; } else { - return ['cp', $score]; + return ['cp', int($score)]; } } }