#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ---------------------------------------------------------------------------- # Created By : Yannick Le Duc # Created Date: 2023/12/22 # version ='1.0' import os import time import random import datetime date_tirage = datetime.datetime.now() # soit on affiche en temps réel les permutations (avec un timer) => mettre à True # soit on affiche que le résultat final => mettre à False affichage_temps_réel = True # liste des participants (1 participant distinct par ligne) # ATTENTION : pas d'homonymes possibles participants = """ TODO : REMPLACER ICI PAR LA LISTE DES PARTICIPANTS, 1 PAR LIGNE """ # on met ça dans une liste triée : ce sont les donneurs donneurs = participants.strip().splitlines() donneurs.sort() # petit tri alphabétique pour faire joli # au début, on initialise la liste des receveurs avec arbitrairement que chaque donneur donne à celui qui le suit dans la liste receveurs = { donneur : donneurs[(i +1 )%len(donneurs)] for i, donneur in enumerate(donneurs) } # et après on fait plein de mélanges/permutations compteur = 0 while compteur < 1024: # 1024 par ex ;-) # on permute aléatoirement 2 receveurs random1 = random.randint(0, len(donneurs)-1) random2 = random.randint(0, len(donneurs)-1) if ( receveurs[ donneurs[random2] ] == donneurs[random1] ) or \ ( receveurs[ donneurs[random1] ] == donneurs[random2] ) : # on saute/annule cette permutation si cela reviendrait à ce que le donneur et le receveur soit identique continue compteur += 1 # on permute temporaire = receveurs[ donneurs[random1] ] receveurs[ donneurs[random1] ] = receveurs[ donneurs[random2] ] receveurs[ donneurs[random2] ] = temporaire if affichage_temps_réel: # on affiche tout cela en faisant un clear screen avant os.system("clear" if os.name == 'posix' else "cls") print(f"Itération #{compteur}\n") for donneur, receveur in receveurs.items(): print(f"{donneur:>20} donne à {receveur:20}") time.sleep(0.006) if not affichage_temps_réel: print(f"Itération #{compteur}\n") for donneur, receveur in receveurs.items(): print(f"{donneur:>20} donne à {receveur:20}") # Fini ! print(f"\nTirage effectué le {date_tirage}")