Last active
November 19, 2024 22:15
-
-
Save kbjarkefur/1dfaca45df38494d22622a91aebd232e to your computer and use it in GitHub Desktop.
Maltider Grabbhelg
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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