Search
Write a publication
Pull to refresh
0
@Pozdnyakovread⁠-⁠only

User

Send message

Пишем ИИ для игры Гомоку (5 в ряд)

Reading time8 min
Views7.1K

Разрабатывая браузерную игру Гомоку (5 в ряд) на языке JavaScript, я столкнулся с необходимостью реализации компьютерного противника (ИИ). В данной статье кратко описаны основные компоненты ИИ, а также приведено сравнение алгоритмов поиска Negamax, NegaScout и MTD-F.

Основные компоненты ИИ: функция оценки состояния игры, генератор ходов, алгоритм поиска, алгоритм определения победы.

Читать далее

Книга «Секреты Python Pro»

Reading time7 min
Views9.2K
image Привет, Хаброжители! Код высокого качества — это не просто код без ошибок. Он должен быть чистым, удобочитаемым и простым в сопровождении. Путь от рядового питониста к профи не прост, для этого вам нужно разбираться в стиле, архитектуре приложений и процессе разработки. Книга «Секреты Python Pro» научит проектировать ПО и писать качественный код, то есть делать его понятным, сопровождаемым и расширяемым.

Дейн Хиллард — профессиональный питонист, — с помощью примеров и упражнений он покажет вам как разбивать код на блоки, повышать качество за счет снижения сложности и т. д. Только освоив основополагающие принципы, вы сможете сделать так, чтобы чтение, сопровождение и переиспользование вашего кода не доставляло проблем ни вам ни вашим коллегам.
Читать дальше →

Удобное логирование на бэкенде. Доклад Яндекса

Reading time12 min
Views19K
Что-то всегда идет не по плану. Приходится отвечать на вопросы, «Что сломалось?», «Почему тормозит?» и «Почему мы не увидели этого раньше?». На примере простого приложения Даниил Галиев zefirior из Яндекс.Путешествий показал, как отвечать на эти вопросы и какие инструменты в этом помогут. Настроим логирование, прикрутим трассировку, разложим ошибки, и все это в удобном интерфейсе.

— Давайте начинать. Я расскажу об удобном логировании и инфраструктуре вокруг логирования, которую можно развернуть, чтобы вам с вашим приложением и его жизненным циклом было удобно жить.
Читать дальше →

Библиотека Frontend-разработчика, часть 4: Алгоритмы

Reading time4 min
Views15K

Frontend-разработчик в головах многих ассоциируется с разработкой, которая не требует сильных трудозатрат и хорошей математической подготовки. Если с первым еще можно поспорить, то со вторым - тут в точку. Математика на старте вряд ли пригодится разработчику интерфейсов, ибо ее просто негде использовать. Но это на старте.

Как и любой разработчик - True Frontend'eр должен расти в своей сфере, и конечно же, уходить от простой разработки интерфейсов к чему-то более сложному.
На фоне недавно нашумевшего сериала, можно выписать такой тезис - разработка, как игра в шахматы - неинтересно играть с тем, кто ниже рангом также, как и неинтересно всю жизнь делать одно и тоже одной сложности.
Всегда хочется лезть в дебри, повышать свой уровень. И там где дебри, начинается математика, структуры данных, алгоритмы. Хотите оптимизировать загрузку - это вам к алгоритмам. Хотите увеличить скорость отображения элементов на странице - необходимо обратиться к математике и алгоритмам. Возможно сортировка пузырьком элементов была лишней...

Отдельное слово хочу сказать о структурах данных - несмотря на то, что в js полный беспорядок в плане типов - всегда есть ts, где структуры данных - это основа основ. Для этого ts и был сделан. Контролировать беспорядок.

Ну и напоследок - любая активность мозга в направлении алгоритмов непременно ведет к увеличению скорости выполнения задач и прокачиванию навыка писать хороший поддерживаемый код. Вы сами увидите, как после ста задач на том же leetcode вы сможете быстро подбирать зарекомендованное решение.

Следующее, что стоить отметить - собеседования. И на собеседованиях часто требуют решить какую-нибудь простецкую задачку сворованную с очных собеседований из компании с красно-белым лого. После некоторого времени алгоритмической подготовки такие задачки будут для любого разработчика проще некуда.

Это статья о том, что алгоритмы разработчику нужны. Это статья о том, что по алгоритмам есть интересные и нескучные книжки, которые помогут быстро понять основы и прокачать свои hard-skills.

Ну, удиви

Как я изучал структуры данных и алгоритмы для собеседования в FAANG

Reading time12 min
Views68K
Продолжая тему устройства в FAANG, которую уже мы поднимали в нашем блоге, и специально к старту нового потока нашего курса по алгоритмам сегодня делюсь описанием пути Эско Обонга, старшего инженера-программиста Uber.

Эта история началась в 2015 году, когда стартап, к которому я присоединился как «сотрудник-основатель», закрылся через шесть месяцев после первого раунда инвестиций, и я искал новую работу. Первое моё собеседование было с  Codecademy, где на этапе телефонного разговора меня заверили: «Не волнуйтесь, мы не задаём сумасшедших вопросов об алгоритмах или что-то в этом роде». И я им поверил…


Приятного чтения!

Как проходят алгоритмические секции на собеседованиях в Яндекс

Reading time9 min
Views479K

Алгоритмическая секция с написанием кода на доске или бумаге — один из важнейших этапов собеседования разработчиков для получения работы в Яндексе. Мы решили подробнее рассказать о том, как устроены эти секции, чтобы помочь будущим кандидатам в подготовке. Кроме того, надеюсь, многие из тех, кто не решается прийти в Яндекс на собеседование, опасаясь слишком сложных испытаний, после этого рассказа поймут, что в действительности всё не так уж и страшно!


Так что мы подготовили для вас следующие материалы:


  • Специальный контест, содержащий задачи, похожие на те, что мы даём на интервью.
  • Этот пост. В нём рассказывается, почему нужно проводить такие секции, а также разбираются все задачи контеста.
  • Два видео, в которых разбираются задачи из контеста: в первом — задача попроще, во втором — две задачи посложнее. Из этих видео вы узнаете о типичных ошибках, допускаемых и при прохождении алгоритмических секций, и при написании продакшен-кода.
Читать дальше →

Укрощаем динамику в задаче о палиндромах

Reading time7 min
Views5K

Я уже давно не студент, но в свободное время изучаю материалы по Computer Science. Мне нравится получать знания и делиться ими. Недавно я наткнулся на любопытную задачу в известном учебнике "Алгоримы: Построение и Анализ". В этой статье я продемонстрирую принципы динамического программирования, используя эту задачу. Она интересная, не очень сложная и для её решения не требуется писать какие-то дополнительные структуры данных или библиотеки. Формулировка умещается в одно предложение:


Найти самую длинную палиндромную подпоследовательность в слове w длиной n.


Кому интересно, прошу под кат.

Читать дальше →

Удивительно быстрые алгоритмы

Reading time5 min
Views28K

Изучая программирование я встречаю примеры невозможных алгоритмов. Интуиция говорит, что такого не может быть, но компьютер опровергает её простым запуском кода. Как такую задачу, требующую минимум кубических затрат по времени, можно решить всего за квадрат? А вон ту я точно решу за линию. Что? Есть гораздо более эффективный и элегантный алгоритм, работающий за логарифм? Удивительно!


В этой статье я приведу несколько таких "ломающих шаблоны" алгоритмов, показывающих что интуиция может сильно переоценивать временную сложность задачи.


Интересно? Добро пожаловать под кат!

Читать дальше →

Трюк с XOR для собеседований и не только

Reading time8 min
Views136K


Есть целая куча популярных задач для собеседований, которые можно решить одним из двух способов: или логичным применением стандартных структур данных и алгоритмов, или использованием некоторых свойств XOR сложным для понимания способом.

Хоть и непривычно ожидать решения с XOR на собеседованиях, довольно забавно разбираться, как они работают. Оказывается, все они основаны на одном фундаментальном трюке, который я постепенно раскрою в этом посте. Далее мы рассмотрим множество способов применения этого трюка с XOR, например, при решении популярной задачи с собеседований:

Дан массив из n — 1 целых чисел, находящихся в интервале от 1 до n. Все числа встречаются только один раз, за исключением одного числа, которого нет. Найдите отсутствующее число.

Разумеется, существует множество прямолинейных способов решения этой задачи, однако есть и довольно неожиданный, в котором применяется XOR.
Читать дальше →

Constraint Programming или как решить задачу коммивояжёра, просто описав её

Reading time7 min
Views13K

Пожалуй, наиболее популярной парадигмой программирования является императивное программирование, но это не единственный вид программирования, широки известны функциональное и логическое программирование. Constraint Programming (Программирование в ограничениях/Ограниченное программирование) не так популярно. Но это очень мощный инструмент для решения комбинаторных задач. Вместо реализации алгоритма, который решает задачу, с последующей тратой кучи времени на его отладку, рефакторинг и оптимизацию, программирование с ограничениями позволяет вам просто описать модель в специальном синтаксисе, а особая программа (решатель) найдет решение для вас (или скажет, если их нет). Впечатляет не правда ли? Мне кажется, каждый программист должен знать о такой возможности.

Read more

Telegram-бот на Java для самых маленьких — от старта до бесплатного размещения на heroku

Reading time15 min
Views169K


В следующих сериях


Это первая статья в моей серии «для самых маленьких» — следующая посвящена Telegram-боту на вебхуках на Spring с блекджеком и Redis и клавиатурами. Будут ещё:)

Для кого написано


Если вы ни разу не писали Telegram-ботов на Java и только начинаете разбираться — эта статья для вас. В ней подробно и с пояснениями описано создание реального бота, автоматизирующего одну конкретную функцию. Можно использовать статью как мануал для создания скелета своего бота, а потом подключить его к своей бизнес-логике.

Предыстория


Когда моя дочь начала изучать арифметику, я между делом накидал алгоритм генерации простых примеров на сложение и вычитание вида «5 + 7 =», чтобы не придумывать и не гуглить для неё задания.

И тут на глаза попалась новость, что Telegram выпустил новую версию Bot API 5.0. Ботов я раньше не писал, и потому решил попробовать поднять бота как интерфейс для своей поделки. Все примеры, которые мне удалось найти, показались либо совсем простыми (нужные мне функции не были представлены), либо очень сложными для новичка. Также мне не хватало объяснений, почему выбран тот или иной путь. В общем, написано было сразу для умных, а не для меня. Потому я решил описать свой опыт создания простого бота — надеюсь, кому-нибудь это поможет быстрее въехать в тему.
Читать дальше →

Взламываем Ball Sort Puzzle

Reading time8 min
Views18K

Ball Sort Puzzle — это популярная мобильная игра на IOS/Android. Суть её заключается в перестановке шариков до тех пор, пока в колбах не будут шарики одного цвета. При этом шарик можно перетаскивать либо в пустую колбу, либо на такой же шарик.

Так случилось, что я в неё залип. Очнулся примерно через месяц, на 725 уровне. Он мне никак не давался — насколько бы глубоко я ни пытался продумать свою стратегию. В итоге — с этим вопросом я вышел в интернет, и заодно выяснил несколько интересных особенностей головоломки.

Во-первых, — игра бесконечна почти бесконечна. По крайней мере уже сейчас на YouTube есть прохождения всех уровней в плоть до 5350, а в телеграмме гуляют скриншоты 10к+ уровней. Вторая особенность, и вот это уже некрасиво, — не у всех уровней есть решение.

Ну это ни в какие ворота — против нас играет коварный ИИ. Нужно действовать соответственно!

Под катом мы:

• Придумаем алгоритм, решающий эту головоломку (Python)

• Научимся парсить скриншот игры, чтобы скармливать алгоритму задачки (OpenCV)

• Напишем телеграм бота, который будет принимать скриншоты и возвращать решения

• Выстроим CI/CD через GitHub Actions и задеплоим бота на Яндекс.Функции

Погнали!

Лень пораБОТила instagram

Reading time7 min
Views29K


Предисловие


Сейчас многие используют инстаграм (далее инста): кто-то там собирает альбомы, кто-то продает, кто-то покупает, а я там ленюсь. Мне всегда было интересно как там поживают мои друзья, одноклассники, коллеги и инста в этом помогала. Захотел узнать, что там нового — зашел, полистал ленту, увидел все, что интересовало ушел… НО! Мне почему-то всегда нужно было лайкнуть каждый пост (не могу обьяснить зачем, но такие вот дела). И вот представьте, неделю туда не заходил, сидишь, лайкаешь недельный пул, а когда у тебя 200+ подписок — это вообще ад.
Читать дальше →

Введение в аннотации типов Python

Reading time6 min
Views324K

Введение



Автор иллюстрации — Magdalena Tomczyk


Вторая часть


Python — язык с динамической типизацией и позволяет нам довольно вольно оперировать переменными разных типов. Однако при написании кода мы так или иначе предполагаем переменные каких типов будут использоваться (это может быть вызвано ограничением алгоритма или бизнес логики). И для корректной работы программы нам важно как можно раньше найти ошибки, связанные с передачей данных неверного типа.


Сохраняя идею динамической утиной типизации в современных версиях Python (3.6+) поддерживает аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций:



Аннотации типов просто считываются интерпретатором Python и никак более не обрабатываются, но доступны для использования из стороннего кода и в первую очередь рассчитаны для использования статическими анализаторами.


Меня зовут Тихонов Андрей и я занимаюсь backend-разработкой в Lamoda.


В этой статье я хочу объяснить основы использования аннотаций типов и рассмотреть типичные примеры, реализуемые аннотациями из пакета typing.

Читать дальше →

Введение в аннотации типов Python. Продолжение

Reading time4 min
Views75K


Автор иллюстрации — Magdalena Tomczyk


В первой части статьи я описал основы использования аннотаций типов. Однако несколько важных моментов остались не рассмотрены. Во-первых, дженерики — важный механизм, во-вторых иногда может оказаться полезным узнать информацию об ожидаемых типах в рантайме. Но начать хотелось с более простых вещей

Читать дальше →

Python Testing с pytest. Использование pytest с другими инструментами, ГЛАВА 7

Reading time24 min
Views46K

Вернуться


Обычно pytest используется не самостоятельно, а в среде тестирования с другими инструментами. В этой главе рассматриваются другие инструменты, которые часто используются в сочетании с pytest для эффективного и результативного тестирования. Хотя это отнюдь не исчерпывающий список, обсуждаемые здесь инструменты дадут вам представление о вкусе силы смешивания pytest с другими инструментами.


Читать дальше →

Устройство CPython. Доклад Яндекса

Reading time21 min
Views38K
Мы публикуем конспект вступительной лекции видеокурса «Бэкенд-разработка на Python». В ней Егор Овчаренко egorovcharenko, тимлид в Яндекс.Такси, рассказал о внутреннем устройстве интерпретатора CPython.


— Если кратко, какой у нас будет план? Сначала мы поговорим о том, почему будем изучать именно Python. Затем посмотрим, как работает интерпретатор CPython более глубоко, как он управляет памятью, как устроена система типов в Python, на словари, генераторы и исключения. Я думаю, это займет примерно час.
Читать дальше →

Как программисту переехать в Нидерланды

Reading time26 min
Views70K
Disclaimer: Эта статья была начата еще летом. Не так давно на хабре был всплеск статей на тему поиска работы за рубежом и переезда. Каждая из них придавала моей пятой точке некоторое ускорение. Что в итоге заставило меня перебороть свою лень и сесть написать, а точнее дописать, очередную статью. Часть материала может повторять статьи других авторов, но с другой стороны, у каждого свои фломастеры.



Итак, перед вами часть третья, и на данный момент последняя, о похождениях блудного попугая программиста. В первой части я уехал жить и работать на Кипр. Во второй части я пытался устроиться в Google и переехать в Швейцарию. В третьей части (вот этой самой) я устроился на работу и переехал в Нидерланды. Сразу скажу, что про поиск работы будет мало, так как его фактически не было. В основном будет про обустройство и жизнь в Нидерландах. В том числе про детей и покупку дома, что не было подробно описано в недавних статьях других авторов.
Так что кому интересно, прошу под кат.

Как подготовиться к собеседованию в Google и не пройти его. Дважды

Reading time15 min
Views130K


Заголовок статьи звучит как epic fail, но на самом деле все не так однозначно. Да и в общем и целом эта история закончилась весьма позитивно, хоть и не в Google. Но это уже тема для другой статьи. В этой же статье я расскажу о трех вещах: каким образом проходил мой процесс подготовки, каким образом проходили интервью в Google и почему же на мой взгляд все не так однозначно, как может показаться.
Кому интересно, прошу под кат.

Information

Rating
Does not participate
Registered
Activity