#!/usr/bin/perl -w use strict; ## my %letters=( A => 5, B => 1, C => 2, D => 5, E => 4, ); my $reps=3; my %reps; ## hackarific! my $pos=1; my $dir=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; $reps{$pos}{size}+=$letters{$h}; delete $letters{$h}; ## sorry folks, couldn't think of a better way fast enough :) if ($dir==1) { $pos++; if ($pos>$reps) { $pos--; $dir=0; } } else { $pos--; if ($pos==0) { $pos++; $dir=1; } } } for my $r (keys %reps) { print "$r: $reps{$r}{letter} $reps{$r}{size}\n"; }