def simulation(numSeconds, PPM): printer = Printer(PPM) queue = Queue() waitingTime = [] for currentTime in range(numSeconds): if newTask(): queue.insert(Task(currentTime)) if (not printer.isBusy()) and (not queue.isEmpty()): nextTask = queue.remove() waitingTime.append(nextTask.waitingTime(currentTime)) printer.startNewTask(nextTask) printer.tick() averageWait = sum(waitingTime) / len(waitingTime) print("Average Wait %6.2f secs %3d tasks remaining." % (averageWait, queue.size()))
def hot_potato(name_list, num): #number_of_rounds number_of_rounds = num #empty queue sim_queue = Queue() #populate the Queue for name in name_list: sim_queue.enqueue(name) print(sim_queue.items) #game end when Queue.size == 1 while sim_queue.size() > 1: #loop till the number_of_rounds limit for index in range(number_of_rounds): #going in a circle #simulating passing the ball #imagine children moving through a pipe # exiting from front # and reentering through the rear # until the number of exits = limit # eliminate the kid who is at the front end #dequeing and enqueing #dequeue name = sim_queue.dequeue() #enque it back as we have to go more rounds sim_queue.enqueue(name) #one round complete #deque that person sim_queue.dequeue() print(sim_queue.items) return sim_queue.dequeue()
def simulation( num_seconds:int, pages_per_minute:int): lab_printer = Printer( pages_per_minute ) print_queue = Queue() waiting_times = [] #loop through each second for current_second in range(num_seconds): #check if a print task has been created ## the code to check that ## generates a print task every 180 sec if new_print_task(): #print task created task = Task(current_second) #enqueue the atsk print_queue.enqueue(task) #check printer status # check if printer is busy # Check if print_queue is empty if ((not lab_printer.busy()) and (not print_queue.is_empty())): #printer is idle and tasks in queue #get next task from qeueue next_task = print_queue.dequeue() #calculate wait time i.e # current_time - task_created_time_stamp wait_time = next_task.wait_time( current_second ) #add to list to calculate average wait time waiting_times.append(wait_time) #start task # The printer now does one second of printing # also subtracts 1 second # from the time required for that task. lab_printer.start_next(next_task) #manage printer state # if no task ..set to idle lab_printer.tick() #calculate average wait time average_wait = \ sum( waiting_times ) / len(waiting_times) print( "Average Wait %6.2f secs %3d tasks remaining." \ %(average_wait, print_queue.size()) )