69 lines
1.6 KiB
Raku
69 lines
1.6 KiB
Raku
my %scores = (
|
|
'Solomon' => 44,
|
|
'Jason' => 42,
|
|
'Errol' => 42,
|
|
'Garry' => 41,
|
|
'Bernard' => 41,
|
|
'Barry' => 41,
|
|
'Stephen' => 39
|
|
);
|
|
|
|
sub tiers {
|
|
my(%s) = @_; my(%h);
|
|
push @{$h{$s{$_}}}, $_ for keys %s;
|
|
@{\%h}{reverse sort keys %h};
|
|
}
|
|
|
|
sub standard {
|
|
my(%s) = @_; my($result);
|
|
my $rank = 1;
|
|
for my $players (tiers %s) {
|
|
$result .= "$rank " . join(', ', sort @$players) . "\n";
|
|
$rank += @$players;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
sub modified {
|
|
my(%s) = @_; my($result);
|
|
my $rank = 0;
|
|
for my $players (tiers %s) {
|
|
$rank += @$players;
|
|
$result .= "$rank " . join(', ', sort @$players) . "\n";
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
sub dense {
|
|
my(%s) = @_; my($n,$result);
|
|
$result .= sprintf "%d %s\n", ++$n, join(', ', sort @$_) for tiers %s;
|
|
return $result;
|
|
}
|
|
|
|
sub ordinal {
|
|
my(%s) = @_; my($n,$result);
|
|
for my $players (tiers %s) {
|
|
$result .= sprintf "%d %s\n", ++$n, $_ for sort @$players;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
sub fractional {
|
|
my(%s) = @_; my($result);
|
|
my $rank = 1;
|
|
for my $players (tiers %s) {
|
|
my $beg = $rank;
|
|
my $end = $rank += @$players;
|
|
my $avg = 0;
|
|
$avg += $_/@$players for $beg .. $end-1;
|
|
$result .= sprintf "%3.1f %s\n", $avg, join ', ', sort @$players;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
print "Standard:\n" . standard(%scores) . "\n";
|
|
print "Modified:\n" . modified(%scores) . "\n";
|
|
print "Dense:\n" . dense(%scores) . "\n";
|
|
print "Ordinal:\n" . ordinal(%scores) . "\n";
|
|
print "Fractional:\n" . fractional(%scores) . "\n";
|