par sos-math(21) » mer. 2 déc. 2020 10:00
Bonjour,
j'ai réfléchi à votre problème qui a des solutions.
Il existe par exemples pour les rencontres d'échecs ou l'organisation de championnat, les tables de Berger qui organisent les rencontres deux à deux de manière simultanée :
https://fr.wikipedia.org/wiki/Tournoi_toutes_rondes et
https://fr.wikipedia.org/wiki/Table_de_Berger
Je vous propose un programme que j'ai rédigé en, Python qui permet d'avoir les rencontres entre n personnes (n pair, si n est impair, on rajoute une personne "repos") :
https://repl.it/@rnivelle/tablesberger
Dont voici le code :
Code : Tout sélectionner
def berger(n):
table = [[] for i in range(n-1)]
table[0]=[(i+1,n-i) for i in range(n//2)]
for i in range(1,n-1):
if i%2==0:
table[i].append((table[i-1][-1][1], n))
for j in range(0,n//2-2):
table[i].append((table[i-1][n//2-j-2][1],table[i-1][n//2-1-j][0]))
table[i].append((table[i-1][0][1], table[i-1][1][0]))
else:
table[i].append((n,table[i-1][-1][1]))
for j in range(0,n//2-2):
table[i].append((table[i-1][n//2-j-2][1],table[i-1][n//2-1-j][0]))
table[i].append((table[i-1][0][0], table[i-1][1][0]))
return table
def affichage(n):
for i in range(n-1):
print(f"Ronde n°{i+1} : {berger(n)[i]}")
Un appel de la fonction pour dix participants donne :
Code : Tout sélectionner
Ronde n°1 : [(1, 10), (2, 9), (3, 8), (4, 7), (5, 6)]
Ronde n°2 : [(10, 6), (7, 5), (8, 4), (9, 3), (1, 2)]
Ronde n°3 : [(2, 10), (3, 1), (4, 9), (5, 8), (6, 7)]
Ronde n°4 : [(10, 7), (8, 6), (9, 5), (1, 4), (2, 3)]
Ronde n°5 : [(3, 10), (4, 2), (5, 1), (6, 9), (7, 8)]
Ronde n°6 : [(10, 8), (9, 7), (1, 6), (2, 5), (3, 4)]
Ronde n°7 : [(4, 10), (5, 3), (6, 2), (7, 1), (8, 9)]
Ronde n°8 : [(10, 9), (1, 8), (2, 7), (3, 6), (4, 5)]
Ronde n°9 : [(5, 10), (6, 4), (7, 3), (8, 2), (9, 1)]
Bonne continuation
Bonjour,
j'ai réfléchi à votre problème qui a des solutions.
Il existe par exemples pour les rencontres d'échecs ou l'organisation de championnat, les tables de Berger qui organisent les rencontres deux à deux de manière simultanée : [URL_B]https://fr.wikipedia.org/wiki/Tournoi_toutes_rondes[/URL_B] et [URL_B]https://fr.wikipedia.org/wiki/Table_de_Berger[/URL_B]
Je vous propose un programme que j'ai rédigé en, Python qui permet d'avoir les rencontres entre n personnes (n pair, si n est impair, on rajoute une personne "repos") : https://repl.it/@rnivelle/tablesberger
Dont voici le code :
[code]def berger(n):
table = [[] for i in range(n-1)]
table[0]=[(i+1,n-i) for i in range(n//2)]
for i in range(1,n-1):
if i%2==0:
table[i].append((table[i-1][-1][1], n))
for j in range(0,n//2-2):
table[i].append((table[i-1][n//2-j-2][1],table[i-1][n//2-1-j][0]))
table[i].append((table[i-1][0][1], table[i-1][1][0]))
else:
table[i].append((n,table[i-1][-1][1]))
for j in range(0,n//2-2):
table[i].append((table[i-1][n//2-j-2][1],table[i-1][n//2-1-j][0]))
table[i].append((table[i-1][0][0], table[i-1][1][0]))
return table
def affichage(n):
for i in range(n-1):
print(f"Ronde n°{i+1} : {berger(n)[i]}")[/code]
Un appel de la fonction pour dix participants donne :
[code]Ronde n°1 : [(1, 10), (2, 9), (3, 8), (4, 7), (5, 6)]
Ronde n°2 : [(10, 6), (7, 5), (8, 4), (9, 3), (1, 2)]
Ronde n°3 : [(2, 10), (3, 1), (4, 9), (5, 8), (6, 7)]
Ronde n°4 : [(10, 7), (8, 6), (9, 5), (1, 4), (2, 3)]
Ronde n°5 : [(3, 10), (4, 2), (5, 1), (6, 9), (7, 8)]
Ronde n°6 : [(10, 8), (9, 7), (1, 6), (2, 5), (3, 4)]
Ronde n°7 : [(4, 10), (5, 3), (6, 2), (7, 1), (8, 9)]
Ronde n°8 : [(10, 9), (1, 8), (2, 7), (3, 6), (4, 5)]
Ronde n°9 : [(5, 10), (6, 4), (7, 3), (8, 2), (9, 1)][/code]
Bonne continuation