#!/your/perl/here
use strict;
use warnings;
my $str="17:43:33:21:23:19:27:6";
my %hash=split/:/,$str;
my $count;
my %ad_lookup;
foreach my $k(keys %hash)
{
$count += $k;
$ad_lookup{$count} = $hash{$k};
}
my @ad_lookup_sorted_keys = sort {$b <=> $a} keys %ad_lookup;
my %seen;
for my $rand ( 1..$count )
{
# my $rand = rand($count);
my $adid;
foreach my $key ( @ad_lookup_sorted_keys )
{
if ( $rand <= $key )
{
$adid = $ad_lookup{$key};
}
else
{
last;
}
}
# print "$adid\n";
$seen{$adid}++;
}
foreach my $k ( sort {$a <=> $b} keys %seen )
{
print "\$seen{$k}: $seen{$k}\n";
}
####
$seen{6}: 27
$seen{19}: 23
$seen{21}: 33
$seen{43}: 17
####
$ad_lookup{$count} = $hash{$k};
####
$ad_lookup{$count-1} = $hash{$k};