#!/usr/bin/perl
use strict;
use warnings;
my @list = (1,2,1,3,3,2,2,1,3,1,3,2);
my @a0 = map {{rank => chr(65+int(rand(6))), val => $_}} @list;
my @a1 = sort {$b->{val} <=> $a->{val}} @a0;
my @a2 = sort {$b->{val} <=> $a->{val} or $a->{rank} cmp $b->{rank}} @a0;
print "DEFAULT: ".join(" ", map {"$_->{val}:$_->{rank}"} @a0)."\n";
print "SORT_BY_VAL: ".join(" ", map {"$_->{val}:$_->{rank}"} @a1)."\n";
print "BY_VAL_RANK: ".join(" ", map {"$_->{val}:$_->{rank}"} @a2)."\n";
my $sel = $a2[0];
for (my $i = 1; $i <@a2 and $a2[$i-1]{val} == $a2[$i]{val}; $i++) {
rand($i+1) < 1 && ($sel = $a2[$i]);
}
print "RANDOM_TOP: $sel->{val}:$sel->{rank}\n";
% ./randomtop.pl DEFAULT: 1:B 2:F 1:B 3:D 3:D 2:E 2:B 1:B 3:B 1:B 3:E 2:A SORT_BY_VAL: 3:D 3:D 3:B 3:E 2:F 2:E 2:B 2:A 1:B 1:B 1:B 1:B BY_VAL_RANK: 3:B 3:D 3:D 3:E 2:A 2:B 2:E 2:F 1:B 1:B 1:B 1:B RANDOM_TOP: 3:D % ./randomtop.pl DEFAULT: 1:A 2:B 1:A 3:C 3:A 2:E 2:D 1:E 3:E 1:A 3:D 2:F SORT_BY_VAL: 3:C 3:A 3:E 3:D 2:B 2:E 2:D 2:F 1:A 1:A 1:E 1:A BY_VAL_RANK: 3:A 3:C 3:D 3:E 2:B 2:D 2:E 2:F 1:A 1:A 1:A 1:E RANDOM_TOP: 3:A % ./randomtop.pl DEFAULT: 1:A 2:B 1:E 3:F 3:C 2:B 2:D 1:C 3:D 1:D 3:E 2:C SORT_BY_VAL: 3:F 3:C 3:D 3:E 2:B 2:B 2:D 2:C 1:A 1:E 1:C 1:D BY_VAL_RANK: 3:C 3:D 3:E 3:F 2:B 2:B 2:C 2:D 1:A 1:C 1:D 1:E RANDOM_TOP: 3:F


