Всем привет. Давненько, а может и не очень, не виделись. Решил поделится с вами некоторой информацией, надеюсь кому-то пригодится.
"Достаточно ли ты 1337?
Хотел бы ты работать в Paradox Interactive, самом дружелюбном к утконосам работодателе на свете? Ты умеешь кодить? Отлично, выполни тестовое задание и возможно именно ты станешь частью нашей команды!"
Хотел бы ты работать в Paradox Interactive, самом дружелюбном к утконосам работодателе на свете? Ты умеешь кодить? Отлично, выполни тестовое задание и возможно именно ты станешь частью нашей команды!"
Таков дословный перевод баннера с заглавной страницы парадоксплазы. Ребята из PI ищут талантливого программиста к себе в команду. Возраст, опыт, образование не имеют значения! Главное - талант, способность найти необычное решение проблемы.
Преамбулу к тестовому заданию можно прочитать тут:
Задание может быть выполнено на C, C#, C++, Go, Haskell, Java, JavaScript, Objective-C, PHP, Python 2 или Python 3. Нужно создать алгоритм поиска пути (path-finding algorithm) который позволяет проложить путь и вернуться обратно самым коротким путем между 2 точками на двухмерной плоскости. Лимит времени - 4 секунды. Лимит памяти - 1024 МБ.
Подробнее само тестовое задание можно почитать тут:
Если кто решиться его сделать - уважуха и респект. Расскажите потом как все прошло. Удачи.
Послесловие
Paradox Interactive - шведская компания, расположенная в Стокгольме, занимающаяся разработкой компьютерных игр, преимущественно глобальных исторических стратегий. Из наиболее известных игр - серии Europa Universalis, Hearts of Iron, Victoria и Crusader Kings.
Ред. prog
Ред. Kozinaka
Между точками юзаем лучевой эвристический поиск пути. Он быстро, очень быстро находит все пути. Алгоритм дает разветвление на препятствиях. По оптимистичному сценарию, как вы помните, мы просто берем короткую "руку" и сохраняем.
Но нам нужен кратчайший путь. Мы сохраняем оба результата. Понятно, что на стадии сглаживания, создавая всего по 4 вариации (сгладить левый и правый рукав со следующим левым и правым) пути мы так или иначе найдем, какой рукав короче. Таким образом мы найдем и кратчайший путь. В результате мы получаем относительно быстрый алгоритм без необходимости запекания (немного жертвуем скоростью, но все равно опережаем астар). И это еще без оптимизаций.
Говорю про лучевой алгоритм не с потолка, это самое частое решение для RTS. И есть несколько способов сделать из него "кратчайший" поиск.
Ред. AsagiriGen