#!/usr/bin/perl -w use strict; ## my %letters; for my $x ('A'..'Z') { $letters{$x}=int(rand(10)+1); } my $reps=5; my %reps; for my $x (1..$reps) { $reps{$x}{size}=0; } my $pos=1; ## keep going until we run out while (keys %letters) { ## get highest my($h,undef)=sort { $letters{$b} <=> $letters{$a} } keys %letters; ## note the grouping $reps{$pos}{letter}.="$h($letters{$h}) "; $reps{$pos}{size}+=$letters{$h}; delete $letters{$h}; ## find the lowest position ($pos,undef)=sort { $reps{$a}{size} <=> $reps{$b}{size} } keys %reps; } for my $r (keys %reps) { print "$r: $reps{$r}{letter} $reps{$r}{size}\n"; }