Untitled
unknown
plain_text
a month ago
3.4 kB
6
Indexable
import random import collections def generate_random_entries(num_entries): """ Generate a list of entries params: num_entries number of entries to return returns: entires list of generated entries """ entries = [] for x in range(num_entries): entries.append( { "name": "test" + str(x), "num_tix_requested": random.randint(1,4) } ) return entries def generate_entry_places(entries): """ For each entry in entries, generate a random number between 1 and len(entries). On collision, regenerate random number until no collision params: entries list of entries returns: ordered_placed_entries ordered dict of entries where key is place and value is entry """ placed_entries = {} for entry in entries: done = False while not done: random_place = random.randint(1, len(entries)) if random_place not in placed_entries: placed_entries[random_place] = entry done = True ordered_placed_entries = collections.OrderedDict(sorted(placed_entries.items())) return ordered_placed_entries def assign_tickets(available_tickets, placed_entries): """ Assign tickets to entries in random order params: available_tickets Total # of tickets available placed_entries Entries in random order returns: assignments Dictionary of entries with assigned tickets """ assignments = {} for entry in placed_entries: requested = placed_entries[entry]["num_tix_requested"] if available_tickets > 0: if available_tickets - requested >= 0: assigned = requested available_tickets -= assigned placed_entries[entry]['assigned'] = assigned assignments[entry] = placed_entries[entry] elif available_tickets - requested < 0: assigned = available_tickets placed_entries[entry]['assigned'] = assigned assignments[entry] = placed_entries[entry] available_tickets -= assigned else: break return assignments # Enter inputs here TOTAL_ENTRIES = 1000000 AVAILABLE_TICKETS = 110000 entries = generate_random_entries(TOTAL_ENTRIES) print("\nEntries in signup order: ") for entry in entries: print(f"Name: {entry['name']} | requested tickets: {entry['num_tix_requested']}") placed_entries = generate_entry_places(entries) print("\nEntries in randomized order: ") for entry in placed_entries: print(f"Place: {entry} | Name: {placed_entries[entry]['name']} | requested tickets: {placed_entries[entry]['num_tix_requested']}") ticket_assignments = assign_tickets(AVAILABLE_TICKETS, placed_entries) print("\nAllocations: ") for assignment in ticket_assignments: print(f"{assignment} | Entry: {ticket_assignments[assignment]['name']} | Tickets Requested: {ticket_assignments[assignment]['num_tix_requested']} | Tickets Allocated: {ticket_assignments[assignment]['assigned']}") print(f"\nTotal entries fulfilled: {len(ticket_assignments)} / {TOTAL_ENTRIES}")
Editor is loading...
Leave a Comment