Skip to content

Instantly share code, notes, and snippets.

@JuniorPolegato
Last active July 6, 2017 20:05
Show Gist options
  • Save JuniorPolegato/658cd09e1ce3b85adcdc69a57164df1b to your computer and use it in GitHub Desktop.
Save JuniorPolegato/658cd09e1ce3b85adcdc69a57164df1b to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def disputa_round_robin(nomes, fixar_primeiro=True, sentido_horario=True,
com_volta=False, debug=False):
n = len(nomes)
if n % 2 == 1:
n += 1
nomes['~'] = 'Ninguém'
jogadores = sorted(nomes)
rounds = n - 1 # cada round terá n/2 jogos
jogos = []
round = 1
linha1 = jogadores[:n // 2]
linha2 = jogadores[n // 2:][::-1]
while True:
pares = zip(linha1, linha2)
jogos.extend(pares)
if debug:
print("Round", round)
print(linha1)
print(linha2)
print('Pares:', pares)
print('-' * 40)
for par in pares:
print(nomes[par[0]], 'x', nomes[par[1]])
print('=' * 40)
if round == rounds:
break
round += 1
if fixar_primeiro:
if sentido_horario:
linha1.insert(1, linha2.pop(0))
linha2.append(linha1.pop())
else:
linha1.append(linha2.pop())
linha2.insert(0, linha1.pop(1))
else:
if sentido_horario:
linha1.insert(0, linha2.pop(0))
linha2.insert(-1, linha1.pop())
else:
linha2.insert(0, linha1.pop(0))
linha1.append(linha2.pop(-2))
if com_volta:
jogos.extend([j[::-1] for j in jogos])
return jogos
if __name__ == "__main__":
# Testes
# nomes = {x: x for x in range(1, 15)}
# nomes = {x: chr(64 + x) for x in range(1, 15)}
# disputa_round_robin(nomes, debug=True, com_volta=False,
# fixar_primeiro=True, sentido_horario=True)
# disputa_round_robin(nomes, debug=True, com_volta=False,
# fixar_primeiro=True, sentido_horario=False)
# disputa_round_robin(nomes, debug=True, com_volta=False,
# fixar_primeiro=False, sentido_horario=True)
# disputa_round_robin(nomes, debug=True, com_volta=False,
# fixar_primeiro=False, sentido_horario=False)
# Nomes em dicionátio no formato 'L': 'Nome', onde L é letras/dígitos
# e Nome é o nome do jogador,
nomes = {'A': 'Mateus Sino',
'B': 'Jean Peter',
'C': 'Lucas Sino',
'D': 'Lucas Guarnieri'}
jogos = disputa_round_robin(nomes, debug=False, com_volta=True,
fixar_primeiro=False, sentido_horario=False)
for jogadores in jogos:
print("%s x %s" % (nomes[jogadores[0]], nomes[jogadores[1]]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment