Ranking methods: Difference between revisions

Content added Content deleted
(→‎{{header|Python}}: New d & sc rankers.)
(→‎{{header|Python}}: mc_rank without name: first and using enumerate.)
Line 26: Line 26:
<lang python>def mc_rank(iterable, start=1):
<lang python>def mc_rank(iterable, start=1):
"""Modified competition ranking"""
"""Modified competition ranking"""
first, fifo = True, []
lastresult, lastrank, fifo = None, None, []
for item in iterable:
for n, item in enumerate(iterable, start-1):
if first:
if item[0] == lastresult:
first = False
fifo += [item]
last, delta = item[0], 1
fifo.append(item)
else:
else:
if item[0] != last:
while fifo:
start += delta
yield n, fifo.pop(0)
while fifo:
lastresult, lastrank, fifo = item[0], n, fifo + [item]
yield start - 1, fifo.pop(0)
delta = 1
else:
delta += 1
last = item[0]
fifo.append(item)
start += delta
while fifo:
while fifo:
yield start - 1, fifo.pop(0)
yield n+1, fifo.pop(0)