From 7760551648b05c84c1ddc787864d2e4467aeda25 Mon Sep 17 00:00:00 2001 From: Yannick Le Duc Date: Fri, 22 Dec 2023 15:48:27 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20du=20fichier=20utilis=C3=A9=20pour=20le?= =?UTF-8?q?=20Secret=20Santa-lent=20(Talent)=20utilis=C3=A9=20pour=20le=20?= =?UTF-8?q?No=C3=ABl=202023=20chez=20Astrolabe=20CAE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tirage.py | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 tirage.py diff --git a/tirage.py b/tirage.py new file mode 100644 index 0000000..babc112 --- /dev/null +++ b/tirage.py @@ -0,0 +1,82 @@ +#!/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 = """ +Florent +Perrine +Claire +Océane +Yannick +Florence +Nelly +Vincent +Jean-Christophe +Antoine +Renaud +Stéphane +Elias +Valerie +Sylvain +Sébastien +Jacques-Olivier +Charlotte +""" + +# 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}")