Untitled
unknown
plain_text
a year ago
3.4 kB
9
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