Сообщения

Генерация лабиринтов с использованием теории графов

Изображение
Перевод моей статьи с HackerNoon .  В нашем предыдущем посте мы рассмотрели алгоритмы поиска путей в графах, которые по своей сути похожи на решение поиска выхода из лабиринта. Когда я делал карту для проекта Wall-E из прошлой статьи, я наткнулся на варианты построения лабиринтов. И чем больше я читал, тем дальше погружался в большой и увлекательный мир лабиринтов. Ранее я не осознавал всю широту и глубину этой темы, и обнаружил, например, что лабиринты можно классифицировать семью различными способами, каждый из которых можно сгенерировать различными алгоритмами. Кстати, я не нашел ни одной книги, которая бы всесторонне охватывала эту тему, и даже на странице Википедии нет систематического обзора. К счастью, я наткнулся на потрясающий ресурс, который охватывает различные типы и алгоритмы лабиринтов . Я начал изучать различные классификации лабиринтов, включая размерные и гиперразмерные вариации, идеальные лабиринты и уникурсальные (unicursal) лабиринты, плоские и разреженные лабири

Алгоритмы обхода графов: различия в производительности

Изображение
  Перевод моей статьи с HackerNoon .   В моем последнем посте я показал способ унификации самых известных алгоритмов обхода графов. Теперь давайте сделаем это более наглядно и рассмотрим различия в производительности. Предистория Несколько лет назад Яндекс организовал конкурс Роботы Курьеры с заманчивым призом: билетом на закрытую конференцию по беспилотным технологиям для профессионалов. Конкурс напоминал игру, в которой участникам нужно было находить оптимальные маршруты на карте и оптимизировать доставку с помощью роботизированных курьеров. Углубляясь в эту тему, я обнаружил, что, несмотря на то, что задача поиска маршрутов уже решена, она продолжает вызывать интерес у профессионального сообщества разработчиков, например, игр. Между 2010 и 2020 годами инженеры сделали значительные оптимизации алгоритма A* , что было особенно полезно для AAA игр с огромными картами. Могу порекомендовать почитать статьи и научные работы из этой сферы. Однако, требования конкурса Яндекс были разра

Универсальная реализация алгоритмов BFS, DFS, дейкстры и A*

Изображение
 Перевод моей статьи с HackerNoon .   Оказывается, что известные алгоритмы BFS, DFS, Дейкстры и А* являются, по сути, вариациями одного и того же алгоритма. Я продемонстрирую это на реальной реализации. Другими словами, можно реализовать универсальную структуру данных, которая может переключаться между этими алгоритмами, не требуя изменений в своих основных компонентах. Хотя существуют некоторые ограничения, исследование этого подхода представляет интерес. Весь рабочий код этих алгоритмов можно найти в моем репозитории GitHub здесь . Я рекомендую экспериментировать с кодом во время чтения этой статьи, так как практический опыт лучше, чем просто теоретическое понимание. Представление графа Рассмотрим граф с 25 узлами, расположенными в виде сетки 5x5, где мы стремимся найти путь от узла 0 в верхнем левом углу до узла 24 в нижнем правом углу:  ``` ( 0  ) - ( 1  ) - ( 2  ) - ( 3  ) - ( 4  )   |        |        |        |        | ( 5  ) - ( 6  ) - ( 7  ) - ( 8  ) - ( 9  )   |        |     

Как дебажить ваш Roslyn анализатор кода не выходя из JetBrains Rider IDE

Изображение
  Платформа компилятора .NET становится все больше, и в то же время вокруг нее растет набор инструментов. Таким образом, её становится легче использовать. Хотя написание Source Geneartor - кода, который разбирает и анализирует ваш код, — непростая задача, он может быть полезен по-разному. Один из способов, которому я недавно научился благодаря моим коллегам, — это рефакторинг.   Обычно код вашего анализатора исходного кода и/или генератора будет не самым простым для чтения и поддержки. Но идея в том, что это не всегда нужно! Идея состоит в том, что вы должны использовать генератор исходного кода как временное решение, которое упрощает рефакторинг для вас и вашей команды. Ведь п осле некоторого рефакторинга вы можете просто выбросить этот код как устаревший. Пожалуй, рефакторинг - это самое правильное применение идеи .NET Compiler Platform. Я думаю, что на ютубе и в интернете есть много примеров, так что мне не нужно делиться еще одним «примером».   Вместо этого я поделюсь пра

Заметки по версионированию API

Изображение
Я недавно посмотрел курс Designing & Versioning HTTP/REST APIs от Jeffrey Richter , известнейшего автора таких основополагающих книг как CLR via C# и Windows API via C++ . Надеюсь, вы сталкивались с ними или даже читали их. Я рекомендую этот курс к просмотру, особенно тем, кто считает что дизайн API это легко (что-то вроде "перекладывания JSON'ов"). Однако, как и с многими другими курсами, просмотр такого материала не даёт нужного глубокого понимания вопросов. Даже с таким автором. Комбинирование практики с теорией обязательно в основоении любого материала, а тем более в применении его в условиях релиза Эта рекомендация относится к разработчикам любого уровня. Легко просмотреть курс и поставить новую галочку в резюме, однако "Дьявол кроется в деталях". Во время реальной разработки возникает множество вопросов, о которых не так просто вспомнить в момент обучения. Ну, довольно слов. Давайте рассмотрим конкретный пример, часть курса по теме Versioning

Проблемы GraphQL

Изображение
  Довольно просто полюбить новую технологию по проспектам профессиональных маркетологов. Но важно не попасть в ловушку, потому что в программировании не существует серебряной пули, решающей все проблемы разом. GraphQL находится в центре внимания уже пару лет. Прежде чем вы добавите эту красивую аббревиатуру в своё резюме, я хотел бы поделиться краткими выводами и мыслями, основанными на опыте использования GraphQL в продакшене. Недавно вышло обзорное видео от знаменитого Алекса Сюй (автора книг по системному дизайну), которое полезно посмотреть перед чтением дальше, так как я не хочу повторять все те вещи, о которых другие авторы сказали лучше.   Я подтверждаю всё, о чём сказано в видео, однако хотел бы добавить кое что, так как часто слышу от разработчиков ошибочные заявления. GraphQL не является заменой REST или SOAP Это просто еще один способ создать API немного по-другому, но определенно его нельзя считать «лучшим, потому что новый». Я бы даже сказал, что GraphQL больше схож с S