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]))