Добавлен , опубликован
Тема
Всем привет. Давненько, а может и не очень, не виделись. Решил поделится с вами некоторой информацией, надеюсь кому-то пригодится.
"Достаточно ли ты 1337?
Хотел бы ты работать в 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.
`
ОЖИДАНИЕ РЕКЛАМЫ...
30
Из наиболее известных игр - серии Europa Universalis, Hearts of Iron, Victoria и Crusader Kings.
Нет ведь.
  • Mount&Blade
  • Magicka
  • Majesty 2
  • Cities: Skylines
  • Pillars of Eternity
Вот, что у неё на данный момент самое интересное.
Кстати, помимо навыков программирования неплохо обладать языковыми навыками. Так или иначе, компания очень сильная и по отзывам работать в ней очень классно.
16
Clamp, во всех играх которые ты привел, PI является издателем. В тех которые привел я - разработчиком.
30
Таранес, ну вот известны они как раз по этим играм, лол.
23
Clamp, хз хз. Это сейчас всякие маунты с блейдами да пилларчики известнее стратежек. Энное кол-во лет назад парадоксы были известны как раз тем, что делали сами.
20
You can use any of the languages...
Implement a path-finding algorithm in C++ that finds and returns a shortest path between two points in a 2-dimensional grid.
okayface
Я так понял, наружу должен торчать интерфейс как у них, чтобы из сишного кода они могли вызывать твой код. А твоя реализация уже может быть на любом языке.
21
Clamp, Crusader Kings особо хороша, только политика бесконечных DLC всё портит
Странно, а раньше у них не было такого скрипта или они ищут парня, который сможет сделать что-то подобное?)
но введение в Европу возможности рандомного нового света(просто полностью рандомный материк с рандомными локациями) это уже чрезмерная наркомания xD
24
А откуда инфа о том, что можно не только на C+ + сдавать решение? Все ссылки ведут только на С++ версию.
6
prog:
А откуда инфа о том, что можно не только на C+ + сдавать решение? Все ссылки ведут только на С++ версию.
На странице с заданием в самом верху написано:
Your program should read from standard input and write to standard output. You can use any of the languages C, C#, C++, Go, Haskell, Java, JavaScript, Objective-C, PHP, Python 2, or Python 3. Send your code as an attachment to puzzle@paradox.kattis.com with subject paradoxpath.
23
prog, а ещё выше есть ссылки на остальные задания парадокса и документацию, как писать задания на различных языках.
9
Это к чему: к тому, что это очень легко или к тому, что это очень сложно? Такой алгоритм на C++ писали на первом курсе - поиск в глубину, менее, чем за 4 секунды(с нормального размера входными). Или им что-то нестандартное нужно с меньшей временной сложностью? Не понятно.
Это просто мысли вслух.
24
GeneralElConsul, как по мне, поиск в глубину это не лучший алгоритм поиска пути. Что касается временных ограничений - 4 секунды это очень много и столько может позволить себе занимать только очень большой объем данных - как правило, в таких заданиях время выполнения ожидается намного меньше заявленного максимума.
Что касается того, чего же ждут от выполнения этого задания - как правило, от таких заданий ждут не только соответствия формальным требованиям (скорость, правильность, отсутствие ошибок), но и определенного уровня качества кода, как в смысле обработки особых случаев, так и в смысле архитектуры и читабельности кода.
BaHeK, SomeFire, спасибо, был сонный и не заметил.
20
Но ведь есть уже куча алгоритмов, среди них есть и вполне хорошие(JPS, например).
20
Главное - талант, способность найти необычное решение проблемы.
Зато сами не могут придумать необычную задачу. Как можно решить такую фигню "необычным способом"?
24
Mihahail, сомневаюсь что кто-то надеется на таком задании получить уникальный алгоритм, который еще не был ни кем придуман, суть задания в другом. Во-первых оценивается сам факт знания алгоритмов поиска пути помимо дийкстры и A*, во-вторых оценивается качество отправленного кода с точки зрения стандартов качества кода и архитектуры (и то и другое уже в ручном режиме после первичного отбора роботом, который отфильтрует все не работающие и слишком медленные алгоритмы). Все выше сказанное - мое личное мнение, основанное на опыте, так что оно вполне может быть ошибочным и не соответствовать действительности.
14
Как можно решить такую фигню "необычным способом"?
Предобработкой карты. В реальных играх никто не рубит в лоб A* или чем-там ещё сколько бы не был он оптимизирован. Если у тебя большая карта и много юнитов, то ты просто заранее считаешь популярные пути, делишь карту на сектора с известными путями между ними и прочая - вот там полёт фантазии не ограничен ничем. Может быть 4 секунды тут дают именно на демонстрацию такого подхода.
А вообще явно задание на общее нахождение в теме и организацию архитектуры решения, оформление кода, как ты оптимизацию используешь и всё такое.
24
Кстати, обратите внимание на один хитрый нюанс, в задании есть оговорка, что путь должен быть кратчайшим. Некоторые быстрые "аналитические" алгоритмы поиска пути находят далеко не кратчайший путь, а просто "хороший" путь к цели, такие с большой долей вероятности засыпятся на заковыристых заданиях со сложной картой.
Еще есть оговорка, что это путь туда и обратно. На сетке с одинаковой проходимостью это условие кажется лишним, так что либо авторы вопроса просто "старались", либо есть какая-то заковырка, суть которой мне не ясна.
Еще из интересного есть решение задачи выбора при наличии нескольких путей одинаковой сложности - тут можно проявить массу креатива (желательно так, чтобы автоматический тест алгоритм все-же проходил, а красивости были доступны уже в ручном режиме, если до него в принципе дойдет дело и алгоритм не будет отфильтрован раньше по формальным признакам).
Предобработкой карты. В реальных играх никто не рубит в лоб A* или чем-там ещё сколько бы не был он оптимизирован. Если у тебя большая карта и много юнитов, то ты просто заранее считаешь популярные пути, делишь карту на сектора с известными путями между ними и прочая - вот там полёт фантазии не ограничен ничем. Может быть 4 секунды тут дают именно на демонстрацию такого подхода.
Сильно сомневаюсь, что в этом дело. Во-первых давать завышенный фиксированный лимит времени это стандартная практика при использовании автоматической проверки решений. Во-вторых с таким подходом просто не где развернуться в этом задании - на каждой итерации используется новая копия твоей программы и, скорее всего, другая карта, а запрос на поиск маршрута только один за итерацию - буферизировать и оптимизировать банально не чего. Думаю, если бы ожидалось решение такого типа, то и условия проверки были бы соответствующие.
30
Если у тебя большая карта и много юнитов, то ты просто заранее считаешь популярные пути, делишь карту на сектора с известными путями между ними и прочая
Авторитетно заявляю, что если игра - стратегия, то такое не делается по куче причин.
Если игра - РПГ, например, то все вейпоинты мобов лежат на плечах дизайнера уровней.
Если игра - шутер, то пишется скрипт, которые автоматически считает роуты и хайдспоты по пути для ботов.
\о/
prog:
либо есть какая-то заковырка, суть которой мне не ясна.
Возможно, путь может изменяться.
24
Авторитетно заявляю
Чем подкреплен авторитет, если не секрет?
30
darkowlom, тремя с половиной годами на должностях гейм-дизайнера/дизайнера уровней в паре крупных компаний.
14
Авторитетно заявляю, что если игра - стратегия, то такое не делается по куче причин.
Обоснуй пожалуйста! Я как автор одной-единственной, но стратегии (клона первого Starcraft'а) имею противоположный опыт. Я вообще использовал примитивный поиск в ширину, т.к. он никогда не искал в большой зоне, он был нужен только для поиска внутри мелких квадратов карты и для обхода динамических препятствий. Большие пути собирались из заранее рассчитанных. Только так я мог считать пути сразу для большого количества юнитов вне зависимости от расстояние на которое им нужно было переместиться. Проблемой может быть только динамически изменяющийся ландшафт карты, которого в моём случае не было.
30
Обоснуй пожалуйста!
Если руками прописывать роуты и вейпоинты каждой карте, то необходимые для нормального функционирования новых карт действия начнут выходить из компетенции дизайнера уровней, что приведёт к очень сильному повышению затрат на разработку игры в целом. Кроме того, такой подход полностью лишит игру расширяемости за счёт пользовательского контента.

Разумеется, я говорю о более-менее крупных проектах, которые делает команда и которые имеют бюджет в целом.
14
Clamp, никаких роутов и вейпоинтов. Делишь большую карту на крупные квадраты и рассчитываешь кратчайшие пути между центрами этих квадратов. Пути от каждого квадрата к каждому. Теперь когда тебе нужно найти путь из точки А в точку Б, то ты узнаешь в каком квадрате А, в каком квадрате Б. Путь между этими квадратами у тебя уже рассчитан заранее. Осталось просчитать коротенькие пути до центров этих квадратов и сгладить полученный конгломерат, чтобы естественно смотрелось. Дёшево и сердито. Зависимость времени расчета от длины пути - константа! Пофигу куда искать - в соседний тайл или в противоположный конец карты. Астар, не астар, любой честный проход по сетке не может иметь константную сложность.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.