def hot_potato(name_list, times): name_queue = MyQueue() for name in name_list: name_queue.enqueue(name) while name_queue.size() > 1: for i in range(times): name_queue.enqueue(name_queue.dequeue()) name_queue.dequeue() return name_queue.dequeue()
class TestMethods(unittest.TestCase): def setUp(self) -> None: self.test_stack = Stack() self.test_queue = MyQueue() self.test_array = [] def test_stack(self): # проверяю, что создаётся пустым self.assertTrue(self.test_stack.empty()) # добавляю 100 элементов - после каждого добавления проверяю empty # - должен возвращать false - т.к. элементы добавляются for x in range(100): self.test_stack.push(x) self.assertFalse(self.test_stack.empty()) # переопределил __eq__ в Node для сравнения только значений # извлекаю 99 значений, создавая для каждого Node с ожидаемым значением и сравниваю их for x in range(99, 0, -1): equals_node = Node(x) self.assertEqual(self.test_stack.pop(), equals_node) # проверяю, что стек не пустой. Затем достаю последний Node и проверяю ещё раз self.assertFalse(self.test_stack.empty()) self.test_stack.pop() self.assertTrue(self.test_stack.empty()) # проверяю, что пустой стэк при попытки достать элемент - возвращает None self.assertIsNone(self.test_stack.pop()) def test_my_queue(self): # делаю такие же проверки, как для стека # проверяю, что создаётся пустым self.assertTrue(self.test_queue.empty()) # добавляю 100 элементов - после каждого добавления проверяю empty # - должен возвращать false - т.к. элементы добавляются for x in range(100): self.test_queue.enqueue(x) self.assertFalse(self.test_queue.empty()) # извлекаю 99 значений, создавая для каждого Node с ожидаемым значением и сравниваю их for x in range(99): equals_node = Node(x) self.assertEqual(self.test_queue.dequeue(), equals_node) # проверяю, что стек не пустой. Затем достаю последний Node и проверяю ещё раз self.assertFalse(self.test_queue.empty()) self.test_queue.dequeue() self.assertTrue(self.test_queue.empty()) # проверяю, что пустой стэк при попытки достать элемент - возвращает None self.assertIsNone(self.test_queue.dequeue())
def bfs(start): # start.distance = 0 # start.previous = None vertex_queue = MyQueue() vertex_queue.enqueue(start) while vertex_queue.size() > 0: current = vertex_queue.dequeue() for nbr in current.connections: if nbr.state == 'unprocessed': nbr.state = 'processing' nbr.distance = current.distance + 1 nbr.previous = current vertex_queue.enqueue(nbr) current.state = 'processed'
def simulation(seconds, print_speed): printer = Printer(print_speed) print_queue = MyQueue() wait_time_list = [] for current_second in range(seconds): if Task.new_task(): task = Task(current_second) print_queue.enqueue(task) if (not printer.busy()) and (not print_queue.is_empty()): new_task = print_queue.dequeue() wait_time_list.append(new_task.wait_time(current_second)) printer.start_next(new_task) printer.tick() average_wait_time = sum(wait_time_list) / len(wait_time_list) print( f'Average wait {average_wait_time:6.2f}, {print_queue.size():3d} tasks remaining' )