Shark & Smart
Smart Smart
Привет, Акула, давай устроим небольшой челлендж – кто быстрее напишет функцию для расчета кратчайшего маршрута дрона-доставщика по городской сетке с препятствиями? Я привнесу строгий алгоритмический подход, а ты – драйв и азарт. Готов считать?
Shark Shark
Да, я за. Прихвати свой алгоритм, я позабочусь о том, чтобы дрон летел прямо и быстро – без отступлений, никаких оправданий. Посмотрим, кто первым проложит этот маршрут.
Smart Smart
Отлично, давай будем краткими. Я набросаю алгоритм A* с приоритетной очередью, работающий за O(E log V). Представь, что у нас есть двумерная сетка, некоторые ячейки заблокированы, дрон может двигаться на север, юг, восток и запад. Эвристика – манхэттенское расстояние. Вот основной цикл на Python, без лишних слов: ```python def shortest_path(start, goal, grid): h = lambda p: abs(p[0]-goal[0]) + abs(p[1]-goal[1]) open_set = [(h(start), 0, start, [start])] closed = set() while open_set: _, cost, node, path = heapq.heappop(open_set) if node == goal: return path if node in closed: continue closed.add(node) for dx,dy in [(1,0),(-1,0),(0,1),(0,-1)]: nxt = (node[0]+dx,node[1]+dy) if 0<=nxt[0]<len(grid) and 0<=nxt[1]<len(grid[0]) and not grid[nxt[0]][nxt[1]]: heapq.heappush(open_set,(cost+1+h(nxt), cost+1, nxt, path+[nxt])) return None ``` Функция возвращает список координат. Если нужны диагонали или взвешенные стоимости, просто поправь список соседей и стоимость. Запусти это за несколько миллисекунд на обычном ноутбуке. И небольшое напоминание: в 11:03 я выскочу с уведомлением, если ты забудешь поесть – чтобы я сам не ушел в режим анализа данных. Удачи, посмотрим, кто окажется самым эффективным.
Shark Shark
Отличный код, но я собираюсь поднять планку выше. Добавлю сетку 20 на 20 с 30% заполнением, запускаю в 11:03, смотри, как я первым закончу. Думаешь, ты быстрый? Попробуй догнать.
Smart Smart
Конечно, вот быстрая настройка для теста: сетка 20 на 20, 30 процентов препятствий, A* с манхэттенской эвристикой и простая реализация на Python. Обычно завершается меньше 0.2 секунды на ядре 3 ГГц. Если ты запустишь этот же граф в 11:03, просто включи таймер и выведи путь дрона. Напомню, если забудешь поесть, а то посмотрим, кто быстрее закончит. Удачи, пусть победит самый выгодный маршрут.
Shark Shark
Понял. Сбрасывай сетку, запускай таймер, и я порву этот 0.2 секунды – перерывы на перекус не нужны, только чистый ход. Посмотрим, кто тут самый быстрый.
Smart Smart
Ну, сетка 20 на 20 готова, препятствия расставлены, таймер запущен. Результат: длина пути 32 шага, общая стоимость 32, вычислено за 0.082 секунды. Дрон должен прибыть быстрее всех. Твой ход – активируй триггер на 11:03 и скажи, если у тебя получится быстрее моего времени. Удачи!
Shark Shark
Ну что, давай. Тридцать два шага, семьдесят пять сотых секунды. Переплюнул – получилось. Без вариантов, я лучший.
Smart Smart
Отлично, 0.075 секунды – результат чистый. Запишу это как новый личный рекорд – всего на несколько наносекунд быстрее предыдущего, но всё равно победа. Если хочешь проверить крайние случаи, добавь динамические препятствия или диагональные движения, посмотрим, как масштабируется эвристика. А пока что – поздравляю с обходом эталона. Следи за таймером перекуса – а то вдруг запустишь цикл дрейфа данных!