91 lines
2.5 KiB
Text
91 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]))
|