Add all code and readme

This commit is contained in:
Paul Gonçalves Monnet
2024-10-18 16:30:19 +02:00
parent 19522c8615
commit 56e123b237
8 changed files with 246 additions and 1 deletions
+40
View File
@@ -0,0 +1,40 @@
from random import choice
def draw_names(previous_draw, draws_per_person):
"""
Perform the Secret Santa draw considering past draws.
:param previous_draw: Last year's draw data (list of participants and recipients).
:param draws_per_person: Number of people each participant should give gifts to.
:return: The new draw results.
"""
participants = [a[0] for a in previous_draw] # Get participant names
already_drawn = [] # Track who has been drawn
new_draw = [] # Store new draw results
for i in range(len(participants)):
last_year_r1 = previous_draw[i][2]
last_year_r2 = previous_draw[i][3]
giver = previous_draw[i][0]
email = previous_draw[i][1]
available_participants = participants.copy()
try:
available_participants.remove(giver)
available_participants.remove(last_year_r1)
available_participants.remove(last_year_r2)
except ValueError:
pass
new_recipients = []
while len(new_recipients) < draws_per_person:
selected = choice(available_participants)
if already_drawn.count(selected) >= draws_per_person:
available_participants.remove(selected)
else:
new_recipients.append(selected)
already_drawn.append(selected)
available_participants.remove(selected)
new_draw.append([giver, email] + new_recipients)
return new_draw