Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
74
Task/Ranking-methods/Python/ranking-methods.py
Normal file
74
Task/Ranking-methods/Python/ranking-methods.py
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
def mc_rank(iterable, start=1):
|
||||
"""Modified competition ranking"""
|
||||
lastresult, fifo = None, []
|
||||
for n, item in enumerate(iterable, start-1):
|
||||
if item[0] == lastresult:
|
||||
fifo += [item]
|
||||
else:
|
||||
while fifo:
|
||||
yield n, fifo.pop(0)
|
||||
lastresult, fifo = item[0], fifo + [item]
|
||||
while fifo:
|
||||
yield n+1, fifo.pop(0)
|
||||
|
||||
|
||||
def sc_rank(iterable, start=1):
|
||||
"""Standard competition ranking"""
|
||||
lastresult, lastrank = None, None
|
||||
for n, item in enumerate(iterable, start):
|
||||
if item[0] == lastresult:
|
||||
yield lastrank, item
|
||||
else:
|
||||
yield n, item
|
||||
lastresult, lastrank = item[0], n
|
||||
|
||||
|
||||
def d_rank(iterable, start=1):
|
||||
"""Dense ranking"""
|
||||
lastresult, lastrank = None, start - 1,
|
||||
for item in iterable:
|
||||
if item[0] == lastresult:
|
||||
yield lastrank, item
|
||||
else:
|
||||
lastresult, lastrank = item[0], lastrank + 1
|
||||
yield lastrank, item
|
||||
|
||||
|
||||
def o_rank(iterable, start=1):
|
||||
"""Ordinal ranking"""
|
||||
yield from enumerate(iterable, start)
|
||||
|
||||
|
||||
def f_rank(iterable, start=1):
|
||||
"""Fractional ranking"""
|
||||
last, fifo = None, []
|
||||
for n, item in enumerate(iterable, start):
|
||||
if item[0] != last:
|
||||
if fifo:
|
||||
mean = sum(f[0] for f in fifo) / len(fifo)
|
||||
while fifo:
|
||||
yield mean, fifo.pop(0)[1]
|
||||
last = item[0]
|
||||
fifo.append((n, item))
|
||||
if fifo:
|
||||
mean = sum(f[0] for f in fifo) / len(fifo)
|
||||
while fifo:
|
||||
yield mean, fifo.pop(0)[1]
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
scores = [(44, 'Solomon'),
|
||||
(42, 'Jason'),
|
||||
(42, 'Errol'),
|
||||
(41, 'Garry'),
|
||||
(41, 'Bernard'),
|
||||
(41, 'Barry'),
|
||||
(39, 'Stephen')]
|
||||
|
||||
print('\nScores to be ranked (best first):')
|
||||
for s in scores:
|
||||
print(' %2i %s' % (s ))
|
||||
for ranker in [sc_rank, mc_rank, d_rank, o_rank, f_rank]:
|
||||
print('\n%s:' % ranker.__doc__)
|
||||
for rank, score in ranker(scores):
|
||||
print(' %3g, %r' % (rank, score))
|
||||
Loading…
Add table
Add a link
Reference in a new issue