#! perl -slw use strict; use Data::Dump qw[ pp ]; use List::Util qw[ sum ]; use Math::Random::MT qw[ rand ]; my $throws = 5; my $sides = 5; my @probs = ( 0.05, 0.1, 0.2, 0.3, 0.35 ); my @values = ( 1, 5, 7, 13, 17 ); my @lookup = map{ ( $values[ $_ ] ) x ( $probs[ $_ ] * 100 ); } 0 .. $#values; our $MIN //= 60; our $RUNS //= 1e5; my $moreThanMin = 0; for ( 1 .. $RUNS ) { my $total = sum map{ $lookup[ rand( scalar @lookup ) ] } 1 .. $throws; ++$moreThanMin if $total > $MIN; } printf "Probability based on $RUNS simulations: %.3f%%", $moreThanMin / $RUNS * 100; __END__ c:\test>895892 -RUNS=1e6 Probability based on 1e6 simulations: 48.752%