Example #1
0
def josephus(n, k):
    q = Queue()
    for i in range(1, n + 1):
        q.enqueue(i)
    while q.size() > 1:
        for _ in range(1, k):
            q.enqueue(q.dequeue())
        print(q.dequeue(), end=" ")
    print()
    return q.top()
    def test_top_when_non_empty_queue(self):
        # Arrange
        queue = Queue()
        queue.push("Umair")
        queue.push("Aamir")
        queue.push("Usman")

        # Act
        # Assert
        self.assertEqual("Umair", queue.top())
Example #3
0
class Stacky():
    def __init__(self):
        self.__q = Queue()
    
    def push(self, elem):
        self.__q.enqueue(elem)
    
    def pop(self): 
        temp = Queue()
        while self.__q.count() > 1:
            temp.enqueue(self.__q.dequeue())
        result = self.__q.dequeue()
        self.__q = temp    
        return result

    def is_empty(self):
        return self.__q.is_empty()
    
    def count(self):
        return self.__q.count()
    
    def top(self):
        return self.__q.top()
Example #4
0
    def new_random_time(self, time_needed=TIME_NEEDED):
        self.time_busy = randint(*time_needed)


if __name__ == '__main__':
    nb_served = nb_gone = nb_unserved = 0
    waiting_time = 0
    for _ in range(SIMULATION_DAYS):
        d = Desk()
        q = Queue()
        for t in range(DAY_DURATION):
            if randrange(NEW_ARRIVALS) == 0:
                q.enqueue((t, t + randint(*PATIENCE)))
            if not d.is_busy():
                while not q.is_empty() and q.top()[1] < t:
                    # waiting_time += q.top()[1] - q.top()[0]
                    q.dequeue()
                    nb_gone += 1
                if not q.is_empty():
                    nb_served += 1
                    waiting_time += t - q.dequeue()[0]
                    d.new_random_time()
            d.tick()
        while not q.is_empty():
            if q.dequeue()[1] < DAY_DURATION:
                nb_gone += 1
            else:
                nb_unserved += 1

    print("New client every", NEW_ARRIVALS, "seconds on average.")