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())
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()
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.")