-
Notifications
You must be signed in to change notification settings - Fork 0
/
wait_time_solution.py
116 lines (102 loc) · 2.89 KB
/
wait_time_solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import math
# List to keep track of the number of people in line:
people_in_line = []
def enqueue_user(user_no):
"""
Adds a new user to the back of the queue.
Parameter:
user_no: a number to represent an entry
in the turnstile.
"""
# Add to the back of the list
people_in_line.append(user_no)
def dequeue_user():
"""
Removes the user in the back of the queue.
"""
# If the list is empty and there's
# a dequeue print a message saying:
# "No people in the line"
if len(people_in_line) == 0:
return print("No people in the line")
# Remove the first on the front of
# the list
else:
people_in_line.pop(0)
def size(list):
"""
Computes the size of the list.
parameter:
list: python list
return length
"""
# Get the length of the list
length = len(list)
return length
def join_rollercoaster():
"""
People leave the line because they
enter the roller coaster. The capacity
of the roller coaster is 40 people a ride
"""
# 40 people enter the roller coaster
# and leave the line
for person in range(0, 40):
dequeue_user()
def wait_time(list):
"""
Computes the estimated time the user has to
wait until it's his turn to join the ride
parameter:
list: python list
"""
number_people = size(list)
capacity = 40
time_per_ride = 2 # 2 minutes
# If the number of people is equal or less
# than 40 it means it's your turn
if number_people <= 40:
return f"It's your turn!"
# Compute the wait time
else:
wait = math.floor((number_people / capacity)) * time_per_ride
return wait
# TESTING
print("Roller coaster line")
print("There are 290 people waiting on the line.")
for person in range(0, 290):
enqueue_user(person)
print()
print("You joined the line!")
enqueue_user("You")
time = wait_time(people_in_line)
print()
print(f"You have to wait {time} minutes until it's")
print("your turn to enter the roller coaster.")
print()
# 2 rides have passed
join_rollercoaster()
join_rollercoaster()
current_size = size(people_in_line)
time = wait_time(people_in_line)
print(f"2 rides have already passed, which means there")
print(f"are {current_size} people waiting, including you.")
print(f"You have to wait {time} minutes for your turn.")
# 5 rides have passed
join_rollercoaster()
join_rollercoaster()
join_rollercoaster()
join_rollercoaster()
join_rollercoaster()
current_size = size(people_in_line)
print()
print(f"5 rides have already passed, there are {current_size}")
print(f"people waiting in front of you. Therefore,")
print(wait_time(people_in_line)) # It's your turn!
print()
print("You should be the last person in the line:")
print(people_in_line)
print()
print("*Testing when there's a dequeue but the line is empty:")
for person in range(0, 12):
dequeue_user() # No people in the line