Skip to content

Instantly share code, notes, and snippets.

@kbjarkefur
Last active November 19, 2024 22:15
Show Gist options
  • Save kbjarkefur/1dfaca45df38494d22622a91aebd232e to your computer and use it in GitHub Desktop.
Save kbjarkefur/1dfaca45df38494d22622a91aebd232e to your computer and use it in GitHub Desktop.
Maltider Grabbhelg
import random
# Set the seed for reproducibility (optional for debugging)
random.seed(161317)
grabbar = ["Albert", "Anders", "Anton", "Bamse", "Gruvan", "Jonas", "Kristoffer", "Kribbe", "Per", "Petrus"]
# Invalid people for specific meals
invalid_assignments = {
"Fredag Middag": ["Albert", "Anders", "Anton","Kribbe","Per"],
"Frukost": ["Albert", "Anders"],
"Söndag Lunch": ["Gruvan"]
}
# Step 1: Shuffle and assign meals
def assign_maltid():
random.shuffle(grabbar)
return {
"Fredag Middag" : grabbar[:2],
"Frukost" : grabbar[2:4],
"Lördag Lunch" : grabbar[4:6],
"Lördag Middag" : grabbar[6:8],
"Söndag Lunch" : grabbar[8:]
}
# Step 2: Validate meal assignments
def valid_assignment(assigned_maltider):
# Check if any invalid assignment is present
for meal, restricted_people in invalid_assignments.items():
if any(person in assigned_maltider[meal] for person in restricted_people):
return False
return True
# Step 3: Keep randomizing until valid assignment is found
def get_valid_maltider():
for _ in range(1000):
assigned_maltider = assign_maltid()
print(_,assigned_maltider)
if valid_assignment(assigned_maltider):
return assigned_maltider
raise ValueError("Could not find a valid assignment within the maximum number of attempts.")
# Run and print the result
try:
assigned_maltider = get_valid_maltider()
for maltid,grabb_par in assigned_maltider.items():
print(f"{grabb_par[0]} och {grabb_par[1]} ansvarar for {maltid}")
except ValueError as e:
print(e)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment