use strict;
use warnings;
my @array=qw(a b c d e);
my $num = 13;
sub jw {
my $average = int($num/@array);
my %result = map{$_=>$average} @array;
for my $i (1..($num - $average*@array)){
++$result{$array[$i-1]};
}
%result }
sub ike1 { my %result; my $n=$num; $result{$array[$n%@array]}++ whil
+e ($n--); %result }
sub ike1b { my %result; $result{$array[$_%@array]}++ for (1..$num); %
+result }
sub ike3 { my $i; map{$array[$i++],length}('1'x$num)=~/^@{['(.*)'.'(
+\1.?)'x$#array]}$/ }
sub zaxo { my %result; @result{@array} = map { int($num/@array) + ($
+_ < $num % @array) } 0 .. $#array; %result }
sub davido { my %result; my @a=@array; my $n=$num; $result{do{my$v=shi
+ft@a;push@a,$v;$v}}++while$n--; %result }
sub ted { my %result; my $n=0; $result{$array[$n++]} = int($num / (
+$#array + 1)) + ($num % ($#array + 1) > $n) while ($n <= $#array); %r
+esult }
sub pela { my %result;
foreach (1..$num) { $result{$array[int(rand(scalar(@array)))]}++; }
$result{$_} ||= 0 foreach (@array);
%result }
use Benchmark ();
Benchmark::cmpthese(0, {
jw => \&jw,
ike1 => \&ike1,
ike3 => \&ike3,
ike1b => \&ike1b,
zaxo => \&zaxo,
davido => \&davido,
ted => \&ted,
pela => \&pela,
});
__END__