63 lines
1.3 KiB
Plaintext
63 lines
1.3 KiB
Plaintext
var scores = [
|
|
Pair(Solomon => 44),
|
|
Pair(Jason => 42),
|
|
Pair(Errol => 42),
|
|
Pair(Garry => 41),
|
|
Pair(Bernard => 41),
|
|
Pair(Barry => 41),
|
|
Pair(Stephen => 39),
|
|
]
|
|
|
|
func tiers(s) {
|
|
s.group_by { .value }.kv.sort.flip.map { .value.map{.key} }
|
|
}
|
|
|
|
func standard(s) {
|
|
var rank = 1
|
|
gather {
|
|
for players in tiers(s) {
|
|
take(Pair(rank, players))
|
|
rank += players.len
|
|
}
|
|
}
|
|
}
|
|
|
|
func modified(s) {
|
|
var rank = 0
|
|
gather {
|
|
for players in tiers(s) {
|
|
rank += players.len
|
|
take(Pair(rank, players))
|
|
}
|
|
}
|
|
}
|
|
|
|
func dense(s) {
|
|
tiers(s).map_kv { |k,v| Pair(k+1, v) }
|
|
}
|
|
|
|
func ordinal(s) {
|
|
s.map_kv { |k,v| Pair(k+1, v.key) }
|
|
}
|
|
|
|
func fractional(s) {
|
|
var rank = 1
|
|
gather {
|
|
for players in tiers(s) {
|
|
var beg = rank
|
|
var end = (rank += players.len)
|
|
take(Pair(sum(beg ..^ end) / players.len, players))
|
|
}
|
|
}
|
|
}
|
|
|
|
func display(r) {
|
|
say r.map {|a| '%3s : %s' % a... }.join("\n")
|
|
}
|
|
|
|
say "Standard:"; display( standard(scores))
|
|
say "\nModified:"; display( modified(scores))
|
|
say "\nDense:"; display( dense(scores))
|
|
say "\nOrdinal:"; display( ordinal(scores))
|
|
say "\nFractional:"; display(fractional(scores))
|