Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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())
Exemplo n.º 3
0
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'
Exemplo n.º 4
0
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'
    )