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 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()
Beispiel #4
0
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())
            )