90 lines
2.5 KiB
Text
90 lines
2.5 KiB
Text
F mc_rank([(Int, String)] iterable)
|
||
‘Modified competition ranking’
|
||
[(Float, (Int, String))] r
|
||
V lastresult = -1
|
||
[(Int, String)] fifo
|
||
L(item) iterable
|
||
I item[0] == lastresult
|
||
fifo [+]= item
|
||
E
|
||
V n = L.index
|
||
L !fifo.empty
|
||
r.append((n, fifo.pop(0)))
|
||
lastresult = item[0]
|
||
fifo [+]= item
|
||
L !fifo.empty
|
||
r.append((iterable.len, fifo.pop(0)))
|
||
R r
|
||
|
||
F sc_rank([(Int, String)] iterable)
|
||
‘Standard competition ranking’
|
||
[(Float, (Int, String))] r
|
||
V lastresult = -1
|
||
V lastrank = -1
|
||
L(item) iterable
|
||
I item[0] == lastresult
|
||
r.append((lastrank, item))
|
||
E
|
||
V n = L.index + 1
|
||
r.append((n, item))
|
||
lastresult = item[0]
|
||
lastrank = n
|
||
R r
|
||
|
||
F d_rank([(Int, String)] iterable)
|
||
‘Dense ranking’
|
||
[(Float, (Int, String))] r
|
||
V lastresult = -1
|
||
V lastrank = 0
|
||
L(item) iterable
|
||
I item[0] == lastresult
|
||
r.append((lastrank, item))
|
||
E
|
||
lastresult = item[0]
|
||
lastrank++
|
||
r.append((lastrank, item))
|
||
R r
|
||
|
||
F o_rank([(Int, String)] iterable)
|
||
‘Ordinal ranking’
|
||
R enumerate(iterable, 1).map((i, item) -> ((Float(i), item)))
|
||
|
||
F f_rank([(Int, String)] iterable)
|
||
‘Fractional ranking’
|
||
[(Float, (Int, String))] r
|
||
V last = -1
|
||
[(Int, (Int, String))] fifo
|
||
L(item) iterable
|
||
I item[0] != last
|
||
I !fifo.empty
|
||
V mean = Float(sum(fifo.map(f -> f[0]))) / fifo.len
|
||
L !fifo.empty
|
||
r.append((mean, fifo.pop(0)[1]))
|
||
last = item[0]
|
||
fifo.append((L.index + 1, item))
|
||
I !fifo.empty
|
||
V mean = sum(fifo.map(f -> f[0])) / fifo.len
|
||
L !fifo.empty
|
||
r.append((mean, fifo.pop(0)[1]))
|
||
R r
|
||
|
||
V scores = [(44, ‘Solomon’),
|
||
(42, ‘Jason’),
|
||
(42, ‘Errol’),
|
||
(41, ‘Garry’),
|
||
(41, ‘Bernard’),
|
||
(41, ‘Barry’),
|
||
(39, ‘Stephen’)]
|
||
|
||
print("\nScores to be ranked (best first):")
|
||
L(n, s) scores
|
||
print(‘ #2 #.’.format(n, s))
|
||
|
||
L(ranker, ranking_method) [(sc_rank, ‘Standard competition ranking’),
|
||
(mc_rank, ‘Modified competition ranking’),
|
||
(d_rank, ‘Dense ranking’),
|
||
(o_rank, ‘Ordinal ranking’),
|
||
(f_rank, ‘Fractional ranking’)]
|
||
print("\n#.:".format(ranking_method))
|
||
L(rank, score) ranker(scores)
|
||
print(‘ #3, (#., #.)’.format(rank, score[0], score[1]))
|