- for my $d2 (3 .. 9) {
- my ($np2, $ns2, $c2) = ($p2, $s2, $c1);
- $np2 += $d2;
- $np2 -= 10 while $np2 > 10;
- $ns2 += $np2;
- $c2 *= $state_count{$d2};
- if ($ns2 >= 21) {
- $wins[1] += $c2;
- next;
- }
- my $key = "$p1,$np2,$s1,$ns2";
- # say "key=$key";
- if ($states{$key}) {
- $states{$key} += $c2;
- } else {
- $states{$key} = $c2;
- push_heap @queue, [ $s1+$ns2, $p1, $np2, $s1, $ns2 ];
- }
+ my @nq = @$q;
+ $nq[0] += $pos;
+ $nq[1] = 1-$player;
+ $nq[2+$player] = $pos;
+ $nq[4+$player] = $score;
+ my $key = join(',', @nq);
+ if ($states{$key}) {
+ $states{$key} += $ncount;
+ } else {
+ $states{$key} = $ncount;
+ push_heap @queue, \@nq;