Pull to refresh
0
0

Пользователь

Send message

Python: 18 задач на вывод символов по заданному шаблону

Reading time3 min
Views77K
Подготовка к техническому собеседованию по Python — нелёгкая задача. На таком собеседовании вам, вполне возможно, встретятся задачи на вывод символов по заданным шаблонам. Если вы хотите научиться решать такие задачи — вам может пригодиться подборка способов их решения, приведённая в этом материале.



Здесь продемонстрировано 18 примеров кода. Начинающие программисты вполне могут проработать всё по порядку, а опытные могут разобраться именно с тем, что им нужно. Главное — понять, как устроен тот или иной пример. Отсутствие чёткого понимания того, что происходит в программах, способно сыграть злую шутку с тем, кто, например, заучив фрагмент кода и воспроизведя его на собеседовании, попытается объяснить то, как именно этот код работает. А тех, кто проводит собеседование, часто интересуют именно такие вот разъяснения.
Читать дальше →

Python & оптимизация времени и памяти

Reading time8 min
Views35K

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

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

Изучить статью

LIT – Инспектор для вашего NLP. Обзор, установка, тест

Reading time6 min
Views3K

Инспектор и даже где-то "толкователь", LIT или Language Interpretability Tool — мощная платформа с открытым исходным кодом для визуализации и интерпретации NLP-моделей. Платформа была представлена на EMNLP 2020 специалистами Google Research в ноябре 2020 года. LIT еще в статусе разработки, поэтому разработчики ничего не гарантируют, в том числе работу на платформе windows. Но у меня получилось, делюсь опытом.

Читать далее

Устройство поисковых систем: базовый поиск и инвертированный индекс

Reading time24 min
Views31K

Под капотом почти каждой поисковой строки бьется одно и то же пламенное сердце — инвертированный индекс. Именно инвертированный индекс принимает текстовые запросы и возвращает пользователю список документов, а пользователь смотрит на всё это дело и радуется котиками, ответам с StackOverflow и страничкам на вики.

В статье описано устройство поиска, инвертированного индекса и его оптимизаций с отсылками к теории. В качестве подопытного кролика взят Tantivy — реализация архитектуры Lucene на Rust. Статья получилась концентрированной, математикосодержащей и несовместимой с расслабленным чтением хабра за чашкой кофе, осторожно!
Читать дальше →

Решение Fizzbuzz при помощи теоремы Эйлера

Reading time4 min
Views13K
image

FizzBuzz — это известная задачка на программирование, которую обычно дают в технической части собеседований. Она формулируется примерно так:

Напишите функцию, выводящую список целых чисел от 1 до 100, но вместо каждого числа, кратного 3, она должна выводить «Fizz», а вместо каждого числа, кратного 5, выводить «Buzz». Вместо чисел, кратных и 3, 5, программа должна выводить «FizzBuzz»; все остальные числа должны выводиться без изменений.

Можно написать функцию, вообще не использующую условную логику и вместо этого разделяющую целые числа на 4 возможные категории (обычное решение оставим в качестве упражнения заинтересованному читателю):

  1. Имеющие делитель 3, но не 5
  2. Имеющие делитель 5, но не 3
  3. Имеющие делитель и 3, и 5
  4. Не имеющие делитель 3 и 5

Нам нужна функция, которая будет возвращать:

  • «Fizz», если $n \equiv 0 \pmod 3$ и $n$ является взаимно простым с 5
  • «Buzz», если $n \equiv 0 \pmod 5$ и $n$ является взаимно простым с 3
  • «FizzBuzz», если $n \equiv 0 \pmod 3$ и $n \equiv 0 \pmod 5$
  • $n$ во всех остальных случаях.

Рассмотрим реализацию такой функции на Python:

[(lambda n: { 1: n, 6: "Fizz", 10: "Buzz", 0: "FizzBuzz" }[n**4%15])(n+1) for n in range(100)]

Та же функция на Ruby:

(1..100).map{|n| {1 => n, 6 => "Fizz", 10 => "Buzz", 0 => "FizzBuzz"}[n**4%15] }

Как мы и ожидали, каждая из этих функций возвращает список целых чисел от 1 до 100 с подставленными в нужные места «Fizz», «Buzz» и «FizzBuzz».

Но почему? Откуда взялись постоянные значения 0, 6, 10 и 1? Почему $n^4 \mod 15$ возвращает 6 для чисел, кратных 3, но не 5, 10 для чисел, кратных 5, но не 3, 0 для чисел, кратных 5 и 3 и 1 во всех остальных случаях? И самое важное — справедливо ли это для любого $n$, которое мы выберем?
Читать дальше →

Как обойти капчу Гугл

Reading time6 min
Views39K
Ранее нам попадались относительно «простые» капчи:


В этот раз поработаем над чем-то более серьезным и давно знакомым:



Итак задача: обойти капчу, желательно с первого раза.
Читать дальше →

Джуном? в 40 лет? Ещё и на удаленку? Да ну, не выдумывайте…

Reading time6 min
Views35K

И все-таки это возможно...

..., в 40 лет выучиться топтать кнопки и этим зарабатывать, но путь к этому тернист, сложен, неоднозначен, сами придумайте какое-нить сложное определение, непростой и нелегкий. Если Вы уверены, что готовы к нему - то вы однозначно его пройдете!

Вообще таких success stories в интернетах полным-полно, помните как таксист учил Java на перекурах, курьер слушал подкасты на велике, хирург... уж не помню, когда хирург умудрялся учить ООП, но похоже делал он это вместе с таксистом и курьером.

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

Да-да, я именно тот 40-летний джун, которому удалось попасть на удаленку и среднюю зарплату в не очень крупную, но гордую контору... Хотите узнать как это получилось?

Готовьтесь к лонгриду...

Pattern matching. Теперь и в Python

Reading time5 min
Views51K
Привет!

В юбилейный минор третьего питона наконец-то завезли pattern matching. Саму концепцию сложно назвать новой, она уже реализована во многих языках, причём как нового поколения (Rust, Golang), так и у тех, кому уже за 0x18 (Java).


Анонсировал pattern matching Гвидо ван Россум, автор языка программирования Python и «великодушный пожизненный диктатор»

Меня зовут Денис Кайшев, я код-ревьюер на курсе «Мидл Python-разработчик». В этом посте хочу рассказать, зачем в Python pattern matching и как с ним работать.

Синтаксически конструкция pattern matching по сути аналогична тому, как это представлено в ряде других языков:

NLP: выделяем факты из текста с помощью Томита-парсера

Reading time9 min
Views11K

NLP - natural language processing

Большая часть данных в мире не структурирована – это просто тексты на русском или на любом другом языке. Извлеченные факты из таких текстов могут представлять особый интерес для бизнеса, поэтому подобные задачи возникают сплошь и рядом. Этим вопросом занимается отдельное направление искусственного интеллекта: обработка естественного языка, тот самый NLP (Natural Language Processing).

Читать далее

Градиентный спуск в Python

Reading time6 min
Views49K

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

Читать далее

Я единственный из 1400, или самый крутой рекрутинг, что я проходил

Reading time9 min
Views130K

Я уже лет 10 пишу код на питоне, и последние 2.5 года стабильно работал на американскую компанию. Наверно, многим знакома история, когда ты кодишь-кодишь, вроде всё неплохо, и внезапно ты - самый знающий и опытный в команде и добро пожаловать в тим лиды. Астрологи объявили неделю менеджмента, количество кода снизилось на 100%.

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

Да что же там?

Корутины C++20 в примерах

Reading time6 min
Views11K

Одним из наиболее важных нововведений C++20 являются корутины. Корутина — это функция, которая может быть приостановлена ​​и после этого возобновлена. Функция становится корутиной, если она используете что-либо из следующего:

- оператор co_await, чтобы приостановить выполнение до его возобновления

- ключевое слово co_return, чтобы завершить выполнение и вернуть значение (опционально)

- ключевое слово co_yield, чтобы приостановить выполнение и вернуть значение

Вдобавок тип возвращаемого значения корутины должен удовлетворять определенным условиям. Однако стандарт C++20 определяет только фреймворк для выполнения корутин, но не определяет никаких типов корутин, удовлетворяющих изложенным требованиям. Это означает, что нам нужно либо писать свои собственные, либо полагаться на сторонние библиотеки. В этой статье я покажу, как написать несколько простых примеров с использованием библиотеки cppcoro.

Читать далее

Интуитивное объяснение интеграла. Часть I — от умножения натуральных чисел до Ньютона и Лейбница

Reading time10 min
Views65K

Если у Вас нет математического образования, если Вы хотите по-настоящему разобраться в том, что из себя представляет интеграл и интегрирование, зачем всё это надо, как математика пришла к идее интеграла, то в таком случае Вы пришли по адресу — добро пожаловать!

Читать далее

Типовые ошибки Python-разработчиков на собеседованиях

Reading time5 min
Views27K


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

Молчание — золото: доказательство существования Гамильтонова цикла в графе

Reading time4 min
Views6.5K

Ульям Гамильтон придумал множество игр, одна из них - задача «кругосветного путешествия» по додекаэдру. В ней вершины додекаэдра носили названия известных городов, а рёбрами были  соединяющие их дороги. Игрок должен был совершить путешествие «вокруг света», найдя дорогу, которая проходит через все вершины ровно один раз. 

Заменив такую сложную конструкцию плоским графом, изоморфным исходному, получим задачу, которую далее используем в системе протоколов с нулевым разглашением.

Read more

Скрытые алгоритмы, заманивающие в ловушку бедности

Reading time10 min
Views18K
Привет, Хабр! Делюсь с вами постом, в котором рассказывается, как группа юристов обнаруживает и борется с автоматизированными системами, которые отказывают бедным в жилье, работе и в базовых услугах. Рассматривается американский опыт, но в России данная проблема тоже очень скоро будет актуальна, ведь алгоритмы кредитного скоринга активно внедряются и у нас. А где ещё поднимать вопросы этичности подобных систем, как не среди тех, кто их создаёт?

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

Наиболее точное скалярное произведение векторов типа double. Вычисление значения полинома

Reading time7 min
Views12K
В прошлой статье речь шла о том, как можно сложить массив из чисел типа double наиболее точно, то есть получить такую сумму, как если бы мы выполняли вычисления в рамках арифметики с бесконечной точностью, а затем один раз округлили бы результат. Был показан алгоритм, который эквивалентен применению типа данных double-double, в котором сложение происходит сразу в двух переменных: основная сумма и хвостик-погрешность. Опытные читатели сразу догадались, что сложение хвостиков-погрешностей также допускает по отношению к себе рекурсивное применение того же алгоритма, что приводит не к удвоенной, а к утроенной точности, и вообще, можно организовать каскад сложений произвольного размера, получая любую наперёд заданную точность расчётов, поэтому фактически в прошлой статье была показана предпосылка к так называемой «дробной длинной арифметике». Опытный программист без труда разберётся как её реализовать, ну а я обещал дать аналогичные фундаментальные основы для скалярного произведения и вычисления полинома в точке. Поскольку все базовые вводные слова уже были сказаны в двух предшествующих статьях, в этой будет меньше «воды» и «лишних», по мнению опытных математиков, сведений. Прошу под кат.

«Привет, мир»: разбираем каждый шаг хэш-алгоритма SHA-256

Reading time10 min
Views81K

SHA-2 (Secure Hash Algorithm), в семейство которого входит SHA-256, — это один самых известных и часто используемых алгоритмов хэширования. В тексте подробно покажем каждый шаг работы этого алгоритма на реальном примере. SHA-2 отличается безопасностью (его тяжелее взломать, чем SHA-1) и скоростью.
Читать дальше →

57 отборных репозиториев для всех разработчиков Python

Reading time8 min
Views27K
Специально к старту нового потока курса «Python для веб-разработки» представляем подборку из 57 репозиториев, которые будут полезны как начинающему, так и опытному разработчику: это репозитории с ответами на вопросы собеседований, репозитории с книгами, небольшие, но полезные консольные инструменты и проекты, которые вдохновят вас написать красивый, работающий и полезный код.


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

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity