17 my @queue = [ 0, 0, $ARGV[0], $ARGV[1], 0, 0 ];
19 my %states = ( join(',', @{ $queue[0] }) => 1 );
23 while (my $q = pop_heap @queue) {
24 my $count = $states{join(',', @$q)};
25 for my $dice (3 .. 9) {
27 my $pos = $q->[2+$player];
28 my $score = $q->[4+$player];
30 $pos -= 10 while $pos > 10;
32 my $ncount = $count * $state_count{$dice};
34 $wins[$player] += $ncount;
41 $nq[2+$player] = $pos;
42 $nq[4+$player] = $score;
43 my $key = join(',', @nq);
45 $states{$key} += $ncount;
47 $states{$key} = $ncount;
48 push_heap @queue, \@nq;
53 say $wins[0], ' vs ', $wins[1], " winner is ",
54 $wins[0] > $wins[1] ? 'first' : 'second';