ajout du fichier utilisé pour le Secret Santa-lent
(Talent) utilisé pour le Noël 2023 chez Astrolabe CAE
This commit is contained in:
parent
fab858923f
commit
7760551648
82
tirage.py
Normal file
82
tirage.py
Normal file
@ -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}")
|
Loading…
Reference in New Issue
Block a user