Есть такие тестовые, которые дочитать до конца – уже подвиг 🌚 А сделают его только самые упоротные 👇🏻
💳В Авито предлагали реализовать микросервис для работы с балансом пользователей (зачисление средств, списание средств, перевод средств от пользователя к пользователю, а также метод получения баланса пользователя). Сервис должен предоставлять HTTP API и принимать/отдавать запросы/ответы в формате JSON.
✍🏻Сценарии использования
Далее описаны несколько упрощенных кейсов приближенных к реальности.
1️⃣ Сервис биллинга с помощью внешних мерчантов (аля через visa/mastercard) обработал зачисление денег на наш счет. Теперь биллингу нужно добавить эти деньги на баланс пользователя.
2️⃣ Пользователь хочет купить у нас какую-то услугу. Для этого у нас есть специальный сервис управления услугами, который перед применением услуги проверяет баланс и потом списывает необходимую сумму.
3️⃣ В ближайшем будущем планируется дать пользователям возможность перечислять деньги друг-другу внутри нашей платформы. Мы решили заранее предусмотреть такую возможность и заложить ее в архитектуру нашего сервиса.
❕Требования к коду
🔸Фреймворки и библиотеки можно использовать любые
🔸Реляционная СУБД: MySQL или PostgreSQL
🔸Весь код должен быть выложен на Github с Readme файлом с инструкцией по запуску и примерами запросов/ответов (можно просто описать в Readme методы, можно через Postman, можно в Readme curl запросы скопировать, вы поняли идею...)
🔸Если есть потребность, можно подключить кеши (Redis) и/или очереди (RabbitMQ, Kafka)
🔸При возникновении вопросов по ТЗ оставляем принятие решения за кандидатом (в таком случае Readme файле к проекту должен быть указан список вопросов с которыми кандидат столкнулся и каким образом он их решил)
🔸Разработка интерфейса в браузере НЕ ТРЕБУЕТСЯ.
🔸Взаимодействие с API предполагается посредством запросов из кода другого сервиса. Для тестирования можно использовать любой удобный инструмент. Например: в терминале через curl или Postman.
➕Будет плюсом
▫️Использование docker и docker-compose для поднятия и развертывания dev-среды.
▫️Методы АПИ возвращают человеко-читабельные описания ошибок и соответствующие статус коды при их возникновении.
▫️Написаны unit/интеграционные тесты.
✔️Основное задание (минимум)
🔹Метод начисления средств на баланс. Принимает id пользователя и сколько средств зачислить.
🔹Метод списания средств с баланса. Принимает id пользователя и сколько средств списать.
🔹Метод перевода средств от пользователя к пользователю. Принимает id пользователя с которого нужно списать средства, id пользователя которому должны зачислить средства, а также сумму.
🔹Метод получения текущего баланса пользователя. Принимает id пользователя. Баланс всегда в рублях.
Думаете это всё? Продолжение ниже 👇🏻
#тестовое | 🍩 Поддержать канал 🫶
💳В Авито предлагали реализовать микросервис для работы с балансом пользователей (зачисление средств, списание средств, перевод средств от пользователя к пользователю, а также метод получения баланса пользователя). Сервис должен предоставлять HTTP API и принимать/отдавать запросы/ответы в формате JSON.
✍🏻Сценарии использования
Далее описаны несколько упрощенных кейсов приближенных к реальности.
1️⃣ Сервис биллинга с помощью внешних мерчантов (аля через visa/mastercard) обработал зачисление денег на наш счет. Теперь биллингу нужно добавить эти деньги на баланс пользователя.
2️⃣ Пользователь хочет купить у нас какую-то услугу. Для этого у нас есть специальный сервис управления услугами, который перед применением услуги проверяет баланс и потом списывает необходимую сумму.
3️⃣ В ближайшем будущем планируется дать пользователям возможность перечислять деньги друг-другу внутри нашей платформы. Мы решили заранее предусмотреть такую возможность и заложить ее в архитектуру нашего сервиса.
❕Требования к коду
🔸Фреймворки и библиотеки можно использовать любые
🔸Реляционная СУБД: MySQL или PostgreSQL
🔸Весь код должен быть выложен на Github с Readme файлом с инструкцией по запуску и примерами запросов/ответов (можно просто описать в Readme методы, можно через Postman, можно в Readme curl запросы скопировать, вы поняли идею...)
🔸Если есть потребность, можно подключить кеши (Redis) и/или очереди (RabbitMQ, Kafka)
🔸При возникновении вопросов по ТЗ оставляем принятие решения за кандидатом (в таком случае Readme файле к проекту должен быть указан список вопросов с которыми кандидат столкнулся и каким образом он их решил)
🔸Разработка интерфейса в браузере НЕ ТРЕБУЕТСЯ.
🔸Взаимодействие с API предполагается посредством запросов из кода другого сервиса. Для тестирования можно использовать любой удобный инструмент. Например: в терминале через curl или Postman.
➕Будет плюсом
▫️Использование docker и docker-compose для поднятия и развертывания dev-среды.
▫️Методы АПИ возвращают человеко-читабельные описания ошибок и соответствующие статус коды при их возникновении.
▫️Написаны unit/интеграционные тесты.
✔️Основное задание (минимум)
🔹Метод начисления средств на баланс. Принимает id пользователя и сколько средств зачислить.
🔹Метод списания средств с баланса. Принимает id пользователя и сколько средств списать.
🔹Метод перевода средств от пользователя к пользователю. Принимает id пользователя с которого нужно списать средства, id пользователя которому должны зачислить средства, а также сумму.
🔹Метод получения текущего баланса пользователя. Принимает id пользователя. Баланс всегда в рублях.
Думаете это всё? Продолжение ниже 👇🏻
#тестовое | 🍩 Поддержать канал 🫶
CloudTips
CloudTips – чаевые и донаты картой моментально
Сервис для приема безналичных чаевых и донатов CloudTips
☝🏻Детали по основному заданию
Методы начисления и списания можно объединить в один, если это позволяет общая архитектура.
➰По умолчанию сервис не содержит в себе никаких данных о балансах (пустая табличка в БД). Данные о балансе появляются при первом зачислении денег.
➰ Валидацию данных и обработку ошибок оставляем на усмотрение кандидата.
➰Список полей к методам не фиксированный.
➰Перечислен лишь необходимый минимум. В рамках выполнения доп. заданий возможны дополнительные поля.
➰Механизм миграции не нужен. Достаточно предоставить конечный SQL файл с созданием всех необходимых таблиц в БД.
➰Баланс пользователя - очень важные данные в которых недопустимы ошибки (фактически мы работаем тут с реальными деньгами). Необходимо всегда держать баланс в актуальном состоянии и не допускать ситуаций когда баланс может уйти в минус.
➰Валюта баланса по умолчанию всегда рубли.
🏅Дополнительные задания
Они не являются обязательными, но их выполнение даст существенный плюс перед другими кандидатами.
Доп. задание 1
Эффективные менеджеры захотели добавить в наши приложения товары и услуги в различных от рубля валютах. Необходима возможность вывода баланса пользователя в отличной от рубля валюте.
Задача: добавить к методу получения баланса доп. параметр. Пример:
Примечание: напоминаем, что базовая валюта которая хранится на балансе у нас всегда рубль. В рамках этой задачи конвертация всегда происходит с базовой валюты.
Доп. задание 2
Пользователи жалуются, что не понимают за что были списаны (или зачислены) средства.
Задача: необходимо предоставить метод получения списка транзакций с комментариями откуда и зачем были начислены/списаны средства с баланса. Необходимо предусмотреть пагинацию и сортировку по сумме и дате.
Дочитали? 😏
#тестовое |⚡️ Забустить канал 🚀
Методы начисления и списания можно объединить в один, если это позволяет общая архитектура.
➰По умолчанию сервис не содержит в себе никаких данных о балансах (пустая табличка в БД). Данные о балансе появляются при первом зачислении денег.
➰ Валидацию данных и обработку ошибок оставляем на усмотрение кандидата.
➰Список полей к методам не фиксированный.
➰Перечислен лишь необходимый минимум. В рамках выполнения доп. заданий возможны дополнительные поля.
➰Механизм миграции не нужен. Достаточно предоставить конечный SQL файл с созданием всех необходимых таблиц в БД.
➰Баланс пользователя - очень важные данные в которых недопустимы ошибки (фактически мы работаем тут с реальными деньгами). Необходимо всегда держать баланс в актуальном состоянии и не допускать ситуаций когда баланс может уйти в минус.
➰Валюта баланса по умолчанию всегда рубли.
🏅Дополнительные задания
Они не являются обязательными, но их выполнение даст существенный плюс перед другими кандидатами.
Доп. задание 1
Эффективные менеджеры захотели добавить в наши приложения товары и услуги в различных от рубля валютах. Необходима возможность вывода баланса пользователя в отличной от рубля валюте.
Задача: добавить к методу получения баланса доп. параметр. Пример:
?currency=USD
. Если этот параметр присутствует, то мы должны конвертировать баланс пользователя с рубля на указанную валюту. Данные по текущему курсу валют можно взять отсюда https://exchangeratesapi.io/ или из любого другого открытого источника.Примечание: напоминаем, что базовая валюта которая хранится на балансе у нас всегда рубль. В рамках этой задачи конвертация всегда происходит с базовой валюты.
Доп. задание 2
Пользователи жалуются, что не понимают за что были списаны (или зачислены) средства.
Задача: необходимо предоставить метод получения списка транзакций с комментариями откуда и зачем были начислены/списаны средства с баланса. Необходимо предусмотреть пагинацию и сортировку по сумме и дате.
Дочитали? 😏
#тестовое |⚡️ Забустить канал 🚀
exchangeratesapi.io
Real-Time and Historical Currency Data with Exchange Rates API
Access accurate exchange rate data with ExchangeRatesAPI. Our free API provides reliable rates for 170+ currencies, updated every 60 minutes. Get started now!
ХВАТИТ ТУПИТЬ В
SQL — это тот самый навык, про который многие думают «да я его знаю», а на первом же собесе на
Актуализировал для вас подборочку, где можно и нужно набивать руку 👇🏻
На русском 🇷🇺
▫️SQL Academy — Интерактивный учебник с кучей задач. Есть песочница, чтобы ковыряться с кодом без последствий.
▫️SQL-EX — Настоящий олдскул, где ещё деды учились (и я в том числе). Задач — вагон, до сих пор актуально. Можно даже платную сертификацию пройти, если вам такое надо.
▫️Тренажёр на Stepik — Классический тренажёр на Stepik. Сложность растёт постепенно, от табличек в вакууме до баз данных условного «Интернет-магазина».
Изучаем базу (на английском 🇬🇧)
▫️SQLBolt — Всего 20 интерактивных уроков. Для тех, кому надо быстро въехать в основы, не читая талмуды.
▫️PGExercises — Чисто под PostgreSQL. Для тех, кто работает с Постгресом и не хочет распыляться.
▫️SQL Practice — Практика на базе данных больницы. Лечим пациентов SQL-запросами.
Готовимся к собесам (🇬🇧) ⚔️
▫️Leetcode — Ну это база для подготовки к собесам. Можно подсмотреть чужие решения 🌚
▫️HackerRank — Похож на Leetcode, но со своей атмосферой. Тоже задачи, рейтинги и возможность получить бесполезную, но приятную ачивку-сертификат.
▫️DataLemur — Задачи прямиком с собесов в Microsoft, Tesla и прочих галер. Есть даже игра в Кальмара 🦑
Игровые тренажёры 🕵️♂️
▫️SQL Murder Mystery — Расследуем убийство, отправляя SQL-запросы к базе с уликами. Классная разминка.
▫️SQL Noir — То же самое, но в стиле нуар. Для ценителей.
▫️Lost at SQL — Спасаем команду с тонущей подлодки с помощью SQL. Есть сюжетка и таблица лидеров.
В общем, инструментов валом. Если до сих пор не умеете в SQL, то это не потому, что нет возможности, а потому что вы ленивая жопа 🌝
А где вы учились/практиковались? Кидайте в комменты свои находки, если чего-то в списке не хватает.
JOIN
АХ: БЕСПЛАТНЫЕ SQL-ТРЕНАЖЁРЫSQL — это тот самый навык, про который многие думают «да я его знаю», а на первом же собесе на
GROUP BY
с HAVING
начинают плавать. И неважно, бэкендер ты, аналитик или начинающий дата-сайентист — это очень нужно всем.Актуализировал для вас подборочку, где можно и нужно набивать руку 👇🏻
На русском 🇷🇺
▫️SQL Academy — Интерактивный учебник с кучей задач. Есть песочница, чтобы ковыряться с кодом без последствий.
▫️SQL-EX — Настоящий олдскул, где ещё деды учились (и я в том числе). Задач — вагон, до сих пор актуально. Можно даже платную сертификацию пройти, если вам такое надо.
▫️Тренажёр на Stepik — Классический тренажёр на Stepik. Сложность растёт постепенно, от табличек в вакууме до баз данных условного «Интернет-магазина».
Изучаем базу (на английском 🇬🇧)
▫️SQLBolt — Всего 20 интерактивных уроков. Для тех, кому надо быстро въехать в основы, не читая талмуды.
▫️PGExercises — Чисто под PostgreSQL. Для тех, кто работает с Постгресом и не хочет распыляться.
▫️SQL Practice — Практика на базе данных больницы. Лечим пациентов SQL-запросами.
Готовимся к собесам (🇬🇧) ⚔️
▫️Leetcode — Ну это база для подготовки к собесам. Можно подсмотреть чужие решения 🌚
▫️HackerRank — Похож на Leetcode, но со своей атмосферой. Тоже задачи, рейтинги и возможность получить бесполезную, но приятную ачивку-сертификат.
▫️DataLemur — Задачи прямиком с собесов в Microsoft, Tesla и прочих галер. Есть даже игра в Кальмара 🦑
Игровые тренажёры 🕵️♂️
▫️SQL Murder Mystery — Расследуем убийство, отправляя SQL-запросы к базе с уликами. Классная разминка.
▫️SQL Noir — То же самое, но в стиле нуар. Для ценителей.
▫️Lost at SQL — Спасаем команду с тонущей подлодки с помощью SQL. Есть сюжетка и таблица лидеров.
В общем, инструментов валом. Если до сих пор не умеете в SQL, то это не потому, что нет возможности, а потому что вы ленивая жопа 🌝
А где вы учились/практиковались? Кидайте в комменты свои находки, если чего-то в списке не хватает.
olegtalks.ru
Бесплатные тренажёры по Python, SQL, Regex
🚀 Откройте 30+ бесплатных онлайн-тренажеров по Python, SQL и Regex. Решайте задачи, оттачивайте навыки программирования и готовьтесь к собеседованиям. Всё в одном месте!
❤🔥10❤5🔥4⚡1🙏1 1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4👀2⚡1👍1🔥1👨💻1🆒1 1
Помните "убийцу Python"? 🐍💀 Так вот, он научился работать на своего врага.
Крис Латтнер, создатель языка, обмолвился, что теперь код на Mojo можно вызывать напрямую из Python. Один энтузиаст провел эксперименты на этот счет, которые показывают всю суть текущего положения дел.
Тест №1: Факториал
Первая задача была простой — посчитать факториал. На маленьких числах
В чём дело? Это классическое целочисленное переполнение (integer overflow). Mojo, как и C++/Rust, использует для целых чисел фиксированный размер в памяти (например, 64 бита). И когда результат вычислений превышает максимальное значение для этого типа, происходит "обнуление" или переход через ноль.
Старый добрый Python же, с его динамической типизацией, использует длинную арифметику. Его целые числа ограничены только объёмом вашей оперативной памяти. Медленнее, да, но надёжнее.
Тест №2: Простые числа
Автор взял вычислительно сложную задачу — подсчёт простых чисел до 20 000 — и написал три одинаково наивных (неэффективных) алгоритма.
И результаты тут уже интересные:
▫️ Чистый Python: ~0.45 секунды
▫️ NumPy: ~0.26 секунды
▫️ Mojo: ~0.011 секунды 🚀
Это значит, что Mojo оказался:
* Примерно в 40 раз быстрее чистого Python.
* Примерно в 20 раз быстрее NumPy, который под капотом использует оптимизированный код на C!
Обогнать NumPy в 20 раз на задаче, где, казалось бы, он должен блистать, — это уже очень серьёзная заявка.
Как это выглядит в коде?
А в Python это вызывается почти как родное:
Крч, пока всё очень сыро, но потенциал может быть.
Не можешь победить — присоединись🤪
Крис Латтнер, создатель языка, обмолвился, что теперь код на Mojo можно вызывать напрямую из Python. Один энтузиаст провел эксперименты на этот счет, которые показывают всю суть текущего положения дел.
Тест №1: Факториал
Первая задача была простой — посчитать факториал. На маленьких числах
factorial(10)
Mojo оказался чуть быстрее. Но вся магия развеялась, как только в него кинули factorial(100)
. Результат? 0
.mojo_module.factorial(100) -> 0
math.factorial(100) -> 93326215... (очень много цифр)
В чём дело? Это классическое целочисленное переполнение (integer overflow). Mojo, как и C++/Rust, использует для целых чисел фиксированный размер в памяти (например, 64 бита). И когда результат вычислений превышает максимальное значение для этого типа, происходит "обнуление" или переход через ноль.
Старый добрый Python же, с его динамической типизацией, использует длинную арифметику. Его целые числа ограничены только объёмом вашей оперативной памяти. Медленнее, да, но надёжнее.
Тест №2: Простые числа
Автор взял вычислительно сложную задачу — подсчёт простых чисел до 20 000 — и написал три одинаково наивных (неэффективных) алгоритма.
И результаты тут уже интересные:
▫️ Чистый Python: ~0.45 секунды
▫️ NumPy: ~0.26 секунды
▫️ Mojo: ~0.011 секунды 🚀
Это значит, что Mojo оказался:
* Примерно в 40 раз быстрее чистого Python.
* Примерно в 20 раз быстрее NumPy, который под капотом использует оптимизированный код на C!
Обогнать NumPy в 20 раз на задаче, где, казалось бы, он должен блистать, — это уже очень серьёзная заявка.
Как это выглядит в коде?
// mojo_module.mojo
// ... бойлерплейт для импорта ...
fn count_primes(py_obj: PythonObject) raises -> PythonObject:
var n = Int(py_obj)
var count: Int = 0
for i in range(2, n + 1):
var is_prime: Bool = True
for j in range(2, i):
if i % j == 0:
is_prime = False
break
if is_prime:
count += 1
return count
А в Python это вызывается почти как родное:
# main.py
import max.mojo.importer # специальный импортер
import mojo_module # и вуаля!
print(mojo_module.count_primes(20_000))
Крч, пока всё очень сыро, но потенциал может быть.
Не можешь победить — присоединись
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
PythonTalk
Релиз Mojo 🎉
Mojo теперь доступен для локальной загрузки.
🔥Кто не слышал про этот проект – это новый язык программирования, который обещает совместимость с Python и сверх-высокую производительность. В том числе за счёт автоматического низкоуровневого р…
Mojo теперь доступен для локальной загрузки.
🔥Кто не слышал про этот проект – это новый язык программирования, который обещает совместимость с Python и сверх-высокую производительность. В том числе за счёт автоматического низкоуровневого р…
👍7❤2🔥2⚡1😁1🙏1👌1👾1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22🤣10💯1😈1👨💻1🤪1👾1 1 1
🐍 from exercise import "Задачка на cчастье"
Сегодня будем определять "счастливые числа"!
Число считается "счастливым", если последовательное применение следующей операции в итоге приводит к
1️⃣ Шаг 1: Берем число.
2️⃣ Шаг 2: Заменяем его на сумму квадратов его цифр.
3️⃣ Шаг 3: Повторяем Шаг 2 с новым, полученным числом.
* Если на каком-то этапе мы получаем
* Если же процесс продолжается бесконечно, так и не достигнув
Пример для числа 19:
*
*
*
*
Достигли
🎯 Ваша Задача:
Написать функцию, например,
#задача | ⚡️ Забустить канал 🚀
Сегодня будем определять "счастливые числа"!
Число считается "счастливым", если последовательное применение следующей операции в итоге приводит к
1
:1️⃣ Шаг 1: Берем число.
2️⃣ Шаг 2: Заменяем его на сумму квадратов его цифр.
3️⃣ Шаг 3: Повторяем Шаг 2 с новым, полученным числом.
* Если на каком-то этапе мы получаем
1
— ура, число счастливое! 🎉 Функция должна вернуть True
.* Если же процесс продолжается бесконечно, так и не достигнув
1
(т.е. мы попадаем в цикл, отличный от 1
) — число не счастливое. Функция должна вернуть False
.Пример для числа 19:
*
19
-> 1^2 + 9^2 = 1 + 81 = 82
*
82
-> 8^2 + 2^2 = 64 + 4 = 68
*
68
-> 6^2 + 8^2 = 36 + 64 = 100
*
100
-> 1^2 + 0^2 + 0^2 = 1 + 0 + 0 = 1
Достигли
1
! Значит, 19
— счастливое число. ✅🎯 Ваша Задача:
Написать функцию, например,
is_happy_number(n: int) -> bool
, которая реализует этот алгоритм.#задача | ⚡️ Забустить канал 🚀
❤3🤔3👨💻2 1
Teletype
Анатомия генератора в Python: раскрываем магию yield для эффективной работы с данными
Что такое генераторы и итераторы в Python и как их эффективно использовать?
🐍 Анатомия генератора в Python: раскрываем магию yield!
В статье залазим под капот генераторов и
В статье залазим под капот генераторов и
yield
. Покажем, как эта парочка помогает писать эффективный код, экономить RAM (и ваши нервы!) при работе с гигантскими файлами, потоками данных и сложными пайплайнами. Залетайте! 🚀❤3👍2🔥1🙏1 1
✍️ Решения вчерашней задачи
🏆 Эталон эффективности: алгоритм "черепахи и зайца"
Этот подход является классикой для поиска циклов в последовательностях и обладает лучшей эффективностью по памяти — O(1):
🤔 Как это работает?
1. Представьте гоночный трек (наша последовательность чисел). Он может быть как прямой (ведет к
2. Мы запускаем двух бегунов: "черепаху" (
3. Черепаха делает один шаг за раз (
4. Заяц делает два шага за раз (
5. Исход:
* Если трек прямой (число счастливое), "заяц" просто первым доберется до финиша (1).
* Если трек кольцевой (число несчастливое), "заяц" неизбежно догонит и "перепрыгнет" черепаху, встретившись с ней на одном из витков цикла (
Время: O(L * log N), где L — длина последовательности до цикла.
Память: O(1). Мы не храним историю, нам нужны лишь две переменные!
🐍 Самое идиоматичное решение
Такой алгоритм идеально сочетает читаемость, простоту и эффективность, используя встроенные возможности Python.
🤔 Как это работает?
1. Мы создаем "карту" — пустое множество
2. На каждом шаге проверяем: не были ли мы здесь раньше (
* Если нет — добавляем текущее число на карту (
* Если да — мы попали в цикл! Прерываем путешествие.
3. После выхода из цикла просто проверяем, почему мы остановились. Если
Время: O(L * log N).
Память: O(L). В худшем случае нам придется хранить в seen все числа из последовательности до цикла. Это небольшой компромисс ради простоты кода.
💡 Бонус: математическая оптимизация
Такой хитрый подход основан на свойствах этой последовательности и быстрой математике вместо строковых операций.
🤔 В чем магия?
* Любая последовательность рано или поздно приходит к числу с одной цифрой.
* Из всех однозначных чисел только
* Поэтому можно просто проверять эти конечные состояния.
* А использование математических операций
🏆 Эталон эффективности: алгоритм "черепахи и зайца"
Этот подход является классикой для поиска циклов в последовательностях и обладает лучшей эффективностью по памяти — O(1):
def get_next(n: int) -> int:
total_sum = 0
while n > 0:
n, digit = divmod(n, 10)
total_sum += digit ** 2
return total_sum
def is_happy(n: int) -> bool:
slow_pointer = n
fast_pointer = get_next(n)
while fast_pointer != 1 and slow_pointer != fast_pointer:
slow_pointer = get_next(slow_pointer)
fast_pointer = get_next(get_next(fast_pointer))
return fast_pointer == 1
🤔 Как это работает?
1. Представьте гоночный трек (наша последовательность чисел). Он может быть как прямой (ведет к
1
), так и кольцевым (мы попали в цикл).2. Мы запускаем двух бегунов: "черепаху" (
slow_pointer
) и "зайца" (fast_pointer
).3. Черепаха делает один шаг за раз (
get_next
).4. Заяц делает два шага за раз (
get_next(get_next(...))
).5. Исход:
* Если трек прямой (число счастливое), "заяц" просто первым доберется до финиша (1).
* Если трек кольцевой (число несчастливое), "заяц" неизбежно догонит и "перепрыгнет" черепаху, встретившись с ней на одном из витков цикла (
slow_pointer == fast_pointer
).Время: O(L * log N), где L — длина последовательности до цикла.
Память: O(1). Мы не храним историю, нам нужны лишь две переменные!
🐍 Самое идиоматичное решение
Такой алгоритм идеально сочетает читаемость, простоту и эффективность, используя встроенные возможности Python.
def is_happy(n: int) -> bool:
seen = set()
while n != 1 and n not in seen:
seen.add(n)
n = sum(int(digit) ** 2 for digit in str(n))
return n == 1
🤔 Как это работает?
1. Мы создаем "карту" — пустое множество
seen
, где будем отмечать все числа-шаги, которые уже прошли.2. На каждом шаге проверяем: не были ли мы здесь раньше (
n not in seen
)?* Если нет — добавляем текущее число на карту (
seen.add(n)
) и вычисляем следующее.* Если да — мы попали в цикл! Прерываем путешествие.
3. После выхода из цикла просто проверяем, почему мы остановились. Если
n == 1
, то число счастливое.Время: O(L * log N).
Память: O(L). В худшем случае нам придется хранить в seen все числа из последовательности до цикла. Это небольшой компромисс ради простоты кода.
💡 Бонус: математическая оптимизация
Такой хитрый подход основан на свойствах этой последовательности и быстрой математике вместо строковых операций.
def is_happy(n: int) -> bool:
while True:
if n == 1 or n == 7: # 7 -> 49 -> 97 -> ... -> 1
return True
if n < 10:
return False
next_n = 0
while n > 0:
digit = n % 10
next_n += digit * digit
n //= 10
n = next_n
🤔 В чем магия?
* Любая последовательность рано или поздно приходит к числу с одной цифрой.
* Из всех однозначных чисел только
1
и 7
в итоге приводят к 1
. Все остальные попадают в цикл 4 -> 16 -> ... -> 4
.* Поэтому можно просто проверять эти конечные состояния.
* А использование математических операций
n % 10
и n //= 10
для извлечения цифр, как правило, работает быстрее, чем преобразование в строку str(n)
.Telegram
PythonTalk
🐍 from exercise import "Задачка на cчастье"
Сегодня будем определять "счастливые числа"!
Число считается "счастливым", если последовательное применение следующей операции в итоге приводит к 1:
1️⃣ Шаг 1: Берем число.
2️⃣ Шаг 2: Заменяем его на сумму квадратов…
Сегодня будем определять "счастливые числа"!
Число считается "счастливым", если последовательное применение следующей операции в итоге приводит к 1:
1️⃣ Шаг 1: Берем число.
2️⃣ Шаг 2: Заменяем его на сумму квадратов…
1 3👍2❤1🔥1🙏1🦄1
🗓Итоги месяца (июнь 2025)
👀 Топ по просмотрам 👨🏻💻
1️⃣ Статистика из США по высокой безработице среди выпускников IT-специальностей.
2️⃣ Утилита для исправление опечаток при помощи факов.
3️⃣ Новость о том, как в компании Canva теперь требуют использования AI-помощников.
📨 Топ по репостам 📥
1️⃣ Огромная подборка бесплатных тренажёров по SQL.
2️⃣ Релиз ИИ-помощника для командной строки Gemini CLI.
3️⃣ Релиз функционала подтверждения IT-компетенций на Госуслугах.
👍🏻 Топ по реакциям 😍
1️⃣ Как обычно, мемчик.
2️⃣ Сказ о том, как ИИ спас прогера-индуса от увольнения.
3️⃣ Исследование Mamba о том, что айтишники уже не в тренде привлекательности.
👀 Топ по просмотрам 👨🏻💻
1️⃣ Статистика из США по высокой безработице среди выпускников IT-специальностей.
2️⃣ Утилита для исправление опечаток при помощи факов.
3️⃣ Новость о том, как в компании Canva теперь требуют использования AI-помощников.
📨 Топ по репостам 📥
1️⃣ Огромная подборка бесплатных тренажёров по SQL.
2️⃣ Релиз ИИ-помощника для командной строки Gemini CLI.
3️⃣ Релиз функционала подтверждения IT-компетенций на Госуслугах.
👍🏻 Топ по реакциям 😍
1️⃣ Как обычно, мемчик.
2️⃣ Сказ о том, как ИИ спас прогера-индуса от увольнения.
3️⃣ Исследование Mamba о том, что айтишники уже не в тренде привлекательности.
🙏2⚡1👍1🔥1 1
Прошёл очередной квартал, пора смотреть, что там с зарплатами питонистов по данным Getmatch 🤑
А смотреть особо не на что, в этот раз очень скучно. Изменений, можно сказать, нет. А это значит, что реальный доход по факту падает.
▪️ Медианная зарплата по всем уровням – 200к
▫️ Джуны – 100к
▫️ Мидлы – 190к
▫️ Синьоры – 300к
▫️ Тимлиды – 350к
▫️ В Москве медиана по всем уровням – 210к
▫️ Питер – 200к
▫️ Остальные города – 200к (было 180)
⬆️ Медиана по зарплатам для тех, кто работает в офисе или гибридно – 197к. Было 190, это единственный пункт с ростом.
▫️ Удалёнщики – 220к
А смотреть особо не на что, в этот раз очень скучно. Изменений, можно сказать, нет. А это значит, что реальный доход по факту падает.
▪️ Медианная зарплата по всем уровням – 200к
▫️ Джуны – 100к
▫️ Мидлы – 190к
▫️ Синьоры – 300к
▫️ Тимлиды – 350к
▫️ В Москве медиана по всем уровням – 210к
▫️ Питер – 200к
▫️ Остальные города – 200к (было 180)
⬆️ Медиана по зарплатам для тех, кто работает в офисе или гибридно – 197к. Было 190, это единственный пункт с ростом.
▫️ Удалёнщики – 220к
getmatch.ru
Работа в IT-индустрии, вакансии и резюме, поиск работы — getmatch
getmatch помогает работодателям найти качественных специалистов, а кандидатам — работу в IT-сфере: разработка, тестирование, дизайн, аналитика, менеджмент и др.
👍3❤2🔥1🙏1 1
Baidu выкатил ERNIE 4.5 🇨🇳
И это не одна модель, а целое семейство из 10 разных вариантов мультимодальных моделей.
Чего там интересного?
1️⃣ Мультимодальная MoE-архитектура. По-простому — научили модели работать с текстом, картинками и даже видео одновременно, да так, чтобы модальности не мешали, а помогали друг другу. Заявляют, что от этого даже чисто текстовые задачи стали решаться лучше.
2️⃣ Размер на любой вкус. Есть варианты от гиганта на 424B параметров (47B активных) до малютки на 0.3B. Есть где разгуляться и тем, у кого свой кластер, и тем, кто на ноутбуке код запускает.
3️⃣ SOTA-результаты. Ну тут классика. Говорят, что обогнали всех на свете в следовании инструкциям, визуальном понимании и прочих модных бенчмарках.Как обычно, доверяем, но проверяем.
4️⃣ Полный инструментарий. Отдали не только веса, но и тулкиты для дообучения (ERNIEKit) и быстрого деплоя (FastDeploy). Всё под лицензией Apache 2.0.
Всё это добро работает на их собственном фреймворке PaddlePaddle. Так что, фанатам PyTorch придётся либо немного пострадать, либо проходить мимо. Интересный способ продвигать свою экосистему 🌚
Ссылочки:
👉🏻 Hugging Face
👉🏻 AI Studio
👉🏻 GitHub
И это не одна модель, а целое семейство из 10 разных вариантов мультимодальных моделей.
Чего там интересного?
1️⃣ Мультимодальная MoE-архитектура. По-простому — научили модели работать с текстом, картинками и даже видео одновременно, да так, чтобы модальности не мешали, а помогали друг другу. Заявляют, что от этого даже чисто текстовые задачи стали решаться лучше.
2️⃣ Размер на любой вкус. Есть варианты от гиганта на 424B параметров (47B активных) до малютки на 0.3B. Есть где разгуляться и тем, у кого свой кластер, и тем, кто на ноутбуке код запускает.
3️⃣ SOTA-результаты. Ну тут классика. Говорят, что обогнали всех на свете в следовании инструкциям, визуальном понимании и прочих модных бенчмарках.
4️⃣ Полный инструментарий. Отдали не только веса, но и тулкиты для дообучения (ERNIEKit) и быстрого деплоя (FastDeploy). Всё под лицензией Apache 2.0.
Всё это добро работает на их собственном фреймворке PaddlePaddle. Так что, фанатам PyTorch придётся либо немного пострадать, либо проходить мимо. Интересный способ продвигать свою экосистему 🌚
Ссылочки:
👉🏻 Hugging Face
👉🏻 AI Studio
👉🏻 GitHub
👍5⚡1🔥1🙏1 1
Что получим при запуске кода?
Anonymous Quiz
3%
[3, 14, 15]
10%
[-15, -14, -3, -15, -14, -3]
7%
[3, 14, 15, 3, 14, 15]
17%
[-3, -14, -15, -3, -14, -15]
40%
TypeError
10%
[15, 14, 3, 15, 14, 3]
14%
[]
✍5👍5 3🔥2🗿2⚡1🙏1👨💻1
Управление циклами в Python: break, continue и неочевидный else 🐍
Все мы каждый день используем циклы
Для этого в Python есть
Когда эти инструменты делают код чище и эффективнее, а когда превращают его в спагетти-монстра? 🍝
Залетайте в свежий разбор, чтобы узнать все тонкости, посмотреть на практические примеры и понять, как не наступить на грабли! 🧑🏻💻
Все мы каждый день используем циклы
for
и while
. Но что, если стандартного "пройти по всем" или "повторять до условия" становится недостаточно? 🤔 Как элегантно прервать выполнение, проигнорировать текущий шаг или выполнить код, только если цикл завершился без сюрпризов?Для этого в Python есть
break
, continue
и, возможно, не самый очевидный для многих, блок else
в связке с циклами! 🤯 Да, этот else
– не тот, что с if
.Когда эти инструменты делают код чище и эффективнее, а когда превращают его в спагетти-монстра? 🍝
Залетайте в свежий разбор, чтобы узнать все тонкости, посмотреть на практические примеры и понять, как не наступить на грабли! 🧑🏻💻
👍7❤3🔥2✍1⚡1🙏1🤗1 1
🎓 Книга по ML от Себастьяна Рашки
Есть такой Себастьян Рашка — если вы в теме, то знаете, что это core-разработчик Scikit-learn и автор нескольких культовых книжек по машинному обучению. Так вот, у него есть отличная книга Machine Learning Q and AI.
Это не очередной талмуд для начинающих, а чтиво для тех, кто уже перерос «Грокаем алгоритмы», но до полноценного чтения пейперов ещё не дорос.
Что внутри:
▫️ 30 глав в формате «вопрос-ответ» по нейросетям, CV, LLM, оценке и деплою.
▫️ Разбор тем вроде multi-GPU обучения, файнтюнинга трансформеров и Vision Transformers.
▫️ Всё с диаграммами, примерами кода на Python и упражнениями.
Книга есть в открытом доступе, а все допматериалы и код лежат в репозитории.
Есть такой Себастьян Рашка — если вы в теме, то знаете, что это core-разработчик Scikit-learn и автор нескольких культовых книжек по машинному обучению. Так вот, у него есть отличная книга Machine Learning Q and AI.
Это не очередной талмуд для начинающих, а чтиво для тех, кто уже перерос «Грокаем алгоритмы», но до полноценного чтения пейперов ещё не дорос.
Что внутри:
▫️ 30 глав в формате «вопрос-ответ» по нейросетям, CV, LLM, оценке и деплою.
▫️ Разбор тем вроде multi-GPU обучения, файнтюнинга трансформеров и Vision Transformers.
▫️ Всё с диаграммами, примерами кода на Python и упражнениями.
Книга есть в открытом доступе, а все допматериалы и код лежат в репозитории.
👍6 4🔥3❤1🙏1🤗1
Очень лаконичное тестовое на позицию дата-сайентиста в МТС 🧑💻
По ссылке лежат данные по оттоку абонентов в телекоме. Целевая переменная –
#тестовое |⚡️ Забустить канал 🚀
По ссылке лежат данные по оттоку абонентов в телекоме. Целевая переменная –
churn
(показатель оттока). Нужно построить модель, предсказывающую отток абонентов, оценить качество этой модели и гипотетические перспективы её использования в реальном бизнес-процессе. Дополнительной информации об этом датасете нет (ну и не надо), названия столбцов хорошо отражают их содержание, так что справитесь.#тестовое |⚡️ Забустить канал 🚀
GitHub
python_test_assignments/ml/mts/telco-customer-churn.csv at main · obulygin/python_test_assignments
Contribute to obulygin/python_test_assignments development by creating an account on GitHub.
🔥4👍3👨💻2⚡1🤔1🙏1
🗺 Карта машинного обучения: вся база в одной картинке
Постоянно вижу, как у начинающих в голове полная каша из алгоритмов, методов и терминов. Одни думают, что ML — это только нейронки, другие не отличают классификацию от кластеризации.
Чтобы навести порядок в головах, сделал вот такую шпаргалку, которая раскладывает по полочкам всё основное, что есть в машинном обучении. От классики до продвинутых штук вроде трансформеров.
Сохранить pdf в норм качестве можно по ссылке.
Кстати, по некоторым из этих тем у меня уже есть статьи:
▫️Линейная регрессия и её регуляризация в Scikit-learn — это база из блока «Обучение с учителем». Про полиномиальную регрессию тоже есть отдельный материал.
▫️ PCA или метод главных компонент — мощная штука для «Снижения размерности» из блока «Обучение без учителя».
Постоянно вижу, как у начинающих в голове полная каша из алгоритмов, методов и терминов. Одни думают, что ML — это только нейронки, другие не отличают классификацию от кластеризации.
Чтобы навести порядок в головах, сделал вот такую шпаргалку, которая раскладывает по полочкам всё основное, что есть в машинном обучении. От классики до продвинутых штук вроде трансформеров.
Сохранить pdf в норм качестве можно по ссылке.
Кстати, по некоторым из этих тем у меня уже есть статьи:
▫️Линейная регрессия и её регуляризация в Scikit-learn — это база из блока «Обучение с учителем». Про полиномиальную регрессию тоже есть отдельный материал.
▫️ PCA или метод главных компонент — мощная штука для «Снижения размерности» из блока «Обучение без учителя».
6❤5👍4🔥3⚡2 2👎1🥰1🙏1
🖼 Собираем нейронку для генерации картинок на коленке
Нейронки, которые рисуют картинки по тексту, сейчас везде. Но большинство просто дёргает API, не имея ни малейшего понятия, что там под капотом условного Stable Diffusion.
Для тех, кто хочет разобраться, есть проект miniDiffusion — это полная перереализация Stable Diffusion 3.5, написанная с нуля на чистом PyTorch.
👉🏻 Всего ~2800 строк кода. От VAE и текстовых энкодеров до самого DiT и скриптов для обучения.
👉🏻 Никаких лишних зависимостей. Только PyTorch и необходимый минимум.
👉🏻 Внутри всё самое важное: архитектура DiT, Joint Attention, энкодеры T5 и CLIP, планировщик шума и даже расчёт метрики FID.
Кому это надо?
▫️ Для тех, кто хочет реально разобраться, как эта магия генерации картинок работает под капотом.
▫️ Для тех, кто хочет поковырять архитектуру или обучить что-то своё, не продавая душу дьяволу за понимание официальной репы.
Заглянуть в код можно здесь 👈🏻
Нейронки, которые рисуют картинки по тексту, сейчас везде. Но большинство просто дёргает API, не имея ни малейшего понятия, что там под капотом условного Stable Diffusion.
Для тех, кто хочет разобраться, есть проект miniDiffusion — это полная перереализация Stable Diffusion 3.5, написанная с нуля на чистом PyTorch.
👉🏻 Всего ~2800 строк кода. От VAE и текстовых энкодеров до самого DiT и скриптов для обучения.
👉🏻 Никаких лишних зависимостей. Только PyTorch и необходимый минимум.
👉🏻 Внутри всё самое важное: архитектура DiT, Joint Attention, энкодеры T5 и CLIP, планировщик шума и даже расчёт метрики FID.
Кому это надо?
▫️ Для тех, кто хочет реально разобраться, как эта магия генерации картинок работает под капотом.
▫️ Для тех, кто хочет поковырять архитектуру или обучить что-то своё, не продавая душу дьяволу за понимание официальной репы.
Заглянуть в код можно здесь 👈🏻
🗺 Заблудились в технологиях? Для вас есть карта
Многие начинающие (и не только) часто тонут в бесконечном потоке фреймворков, библиотек и технологий, которые «надо знать». В итоге в голове не дорожная карта, а каша из buzzwords.
Для тех, кто хочет хоть как-то структурировать свой путь и понять, сколько всего ему ещё предстоит выучить (и ужаснуться), есть отличный сервис — roadmap.sh.
Там много подробных карты развития по разным направлениям. Вот несколько👇🏻
1️⃣ Python
2️⃣ Backend
3️⃣ DevOps
4️⃣ AI & Data Scientist
5️⃣ SQL
Все эти карты показывают объём знаний, необходимый для того, чтобы стать хоть сколько-нибудь вменяемым специалистом 🌚
На все блоки можно потыкать, прочитать про каждый навык на полезных ссылках.
Выбирайте свой путь развития и узнавайте, какие навыки нужно прокачивать до конца жизни во время получения lvl up-ов.
Класс, дуал-класс или мультикласс? На всё скилл-поинтов точно не хватит 🧙🏼♂️
Многие начинающие (и не только) часто тонут в бесконечном потоке фреймворков, библиотек и технологий, которые «надо знать». В итоге в голове не дорожная карта, а каша из buzzwords.
Для тех, кто хочет хоть как-то структурировать свой путь и понять, сколько всего ему ещё предстоит выучить (и ужаснуться), есть отличный сервис — roadmap.sh.
Там много подробных карты развития по разным направлениям. Вот несколько👇🏻
1️⃣ Python
2️⃣ Backend
3️⃣ DevOps
4️⃣ AI & Data Scientist
5️⃣ SQL
Все эти карты показывают объём знаний, необходимый для того, чтобы стать хоть сколько-нибудь вменяемым специалистом 🌚
На все блоки можно потыкать, прочитать про каждый навык на полезных ссылках.
Выбирайте свой путь развития и узнавайте, какие навыки нужно прокачивать до конца жизни во время получения lvl up-ов.
Класс, дуал-класс или мультикласс? На всё скилл-поинтов точно не хватит 🧙🏼♂️
roadmap.sh
Learn to become a modern Python developer
Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap.
❤4👍2 2⚡1