sub n_sides {6} sub attack {3} sub defend {2} sub loss { my ($att, $def) = @_; return (($att->[0] <= $def->[0]) + ($att->[1] <= $def->[1])); } sub pair_prob { my ($K, $pair) = @_; my ($i, $j) = @{$pair}; return (((($i < $j) ? ($K * $i ** ($K-1)) : ($i ** $K - ($i-1) ** $K)) - $K * ($i-1) ** ($K-1)) / (n_sides() ** $K)); } my @pairs = map {my $j = $_; map {[$_,$j]} (1..$j) } (1..n_sides()); my @losses; foreach my $att (@pairs) { foreach my $def (@pairs) { $losses[loss($att,$def)] += pair_prob(attack(), $att) * pair_prob(defend(), $def); } } print "P(loss = $_) = ", $losses[$_], "\n" for (0..@losses-1);