Язык программирования

565 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
🔒
Шаг 9: Мама строго сказала
Сложно
Вася ведёт телеграм-канал «Дневник абитуриента» и хочет опубликовать пост: «Куда поступили мои одноклассники». Но мама услышала и сказала строго: «Никаких ФИО, замени всё на звёздочки, иначе телефон отберу». Маму лучше слушать. Особенно когда речь о телефоне.
Условие задачи
 

Замени все ФИО в тексте на ***.

ФИО имеет формат: фамилия с заглавной буквы (кириллица), пробел, заглавная буква, точка, заглавная буква, точка. Например, Иванов И.И., Петрова А.С..

Входные данные

Одна строка текста.

Выходные данные

Та же строка, в которой все ФИО заменены на ***.

Подсказка: re.sub(r"[А-ЯЁ][а-яё]+\s[А-ЯЁ]\.[А-ЯЁ]\.", "***", text). Точки нужно экранировать!
🌐
Шаг 7: Где этот сайт МФТИ?!
Средне
Вася добавил в закладки сайты десятка вузов: МФТИ, МГУ, ВШЭ, ИТМО, Бауманка… Теперь это каша из https://www.mipt.ru/abitur, http://www.hse.ru/admissions и так далее. Хочется компактный список — только домены, без всех этих https и www.
Условие задачи
 

Извлеки только доменное имя без префикса www. и без пути.

Формат URL: http:// или https://, затем опционально www., затем доменное имя, затем опционально / и путь.

Входные данные

Одна строка текста с URL-ами.

Выходные данные

Доменные имена без www., по одному на строке.

Подсказка: Группа захвата: https?://(?:www\.)?([a-zA-Z0-9.]+?)(?=[/\s]|$). (?:…) — группа без захвата, (?=…) — lookahead.
🎯
Шаг 6: Сколько у меня баллов в сумме?!
Средне
Вася сдал четыре ЕГЭ. Результаты приходили в разных письмах и в разных форматах. Уже пять раз Вася пытался сложить сумму на калькуляторе — и пять раз получилось разное. Что-то здесь не так. Помоги ему наконец-то узнать честную сумму баллов.
Условие задачи
 

Извлеки все числовые значения баллов из текста и выведи их сумму. Балл — целое число от 1 до 100. Гарантируется, что других чисел в тексте нет.

Входные данные

Одна строка текста с описанием результатов.

Выходные данные

Одно целое число — сумма всех найденных баллов. Если баллов нет — вывести 0.

Подсказка: re.findall(r"\d+", text) вернёт список чисел в виде строк. Останется только сложить через sum(int(x) for x in …).
📞
Шаг 5: Звонок в приёмную
Средне
Вася собрал телефоны приёмных комиссий 12 вузов с их сайтов. Каждый сайт пишет номер по-своему: где-то +7(495)..., где-то 8-495-..., где-то вообще со скобками вокруг кода. У Васи и так дрожат руки перед звонком — хочется хоть какой-то порядок. Приведи все номера к виду +7XXXXXXXXXX.
Условие задачи
 

Извлеки все российские мобильные номера и приведи их к формату +7XXXXXXXXXX (плюс, семёрка, 10 цифр без разделителей).

Возможные форматы:

  • +7(495)123-45-67
  • 8(495)123-45-67
  • +7-495-123-45-67
  • 8-495-123-45-67

Все номера: +7 или 8, потом код (3 цифры), потом 7 цифр. Пробелов внутри номера нет.

Входные данные

Одна строка текста.

Выходные данные

Все номера в формате +7XXXXXXXXXX, по одному на строке.

Подсказка: Найди подстроки телефонов, потом re.sub(r"\D", "", s) чистит всё нецифровое. Если первая цифра 8 — замени на 7.
📅
Шаг 4: Когда там апелляция?!
Средне
Результаты ЕГЭ опубликованы! Вася в шоке от русского: ожидал 90, получил 78. Решил подавать на апелляцию, но даты приходят отовсюду в разном виде: из чата класса — 15.06.2025, от классрука — 15/06/2025, с официального сайта — 15-06-2025. У Васи в голове путаница, хочется привести всё к одному виду ГГГГ-ММ-ДД, как у нормальных айтишников.
Условие задачи
 

Извлеки все даты из текста и выведи их в формате ГГГГ-ММ-ДД.

Формат входных дат: ровно 2 цифры дня, разделитель (., / или -), 2 цифры месяца, тот же или другой разделитель, 4 цифры года.

Входные данные

Одна строка текста.

Выходные данные

Все найденные даты в формате ГГГГ-ММ-ДД, по одной на строке.

Подсказка: Группы захвата: (\d{2})[./-](\d{2})[./-](\d{4}). Класс [./-] покрывает все три разделителя сразу.
🪪
Шаг 3: СНИЛС из личного кабинета
Просто
Вася регистрируется в личном кабинете ФИПИ. Там просят ввести СНИЛС в формате XXX-XXX-XXX YY. Вася в панике скопировал в один файл всё, что нашёл у себя в документах: паспорт, аттестат, прививочный сертификат и почему-то рецепт от стоматолога. Найди в этом хаосе валидные СНИЛСы.
Условие задачи
 

СНИЛС имеет формат: 3 цифры, дефис, 3 цифры, дефис, 3 цифры, пробел, 2 цифры. Например, 123-456-789 12.

Входные данные

Одна строка текста.

Выходные данные

Все найденные валидные СНИЛСы, по одному на строке.

Подсказка: \b\d{3}-\d{3}-\d{3} \d{2}\b. Внутри СНИЛС есть пробел — будь внимателен.
📔
Шаг 1: Дневник олимпиадника
Просто
Знакомься: Вася, 11 класс, мечтает поступить на программиста. С сентября ведёт текстовый дневник тренировок к олимпиадам. Туда он записывает всё: какие задачи решил, что ел на обед, мысли о жизни. Завтра выступление, и Вася хочет вытащить только коды решённых задач, чтобы быстро повторить темы.
Условие задачи
 

Каждый код задачи имеет формат: 2 заглавные латинские буквы + 4 цифры (например, AB1234, MK0001).

Дана одна строка текста. Извлеки все валидные коды и выведи их по одному на строке.

Входные данные

Одна строка произвольного текста (до 10 000 символов).

Выходные данные

Все найденные коды задач, по одному на строке. Если не найдены — пустой вывод.

Подсказка: re.findall(r"\b[A-Z]{2}\d{4}\b", text). Граница слова \b — чтобы не цеплять ABC1234.
Шаг 10: Финальная анкета
Сложно
Финал лета. Деканат прислал тебе CSV-файл с заявлениями абитуриентов и сказал: «Скажи, сколько из них вообще можно рассматривать». В файле пять полей: ID, ФИО, email, телефон, балл. Если хоть одно поле в строке кривое — вся анкета летит в мусорку. Это твой главный тест. Проверь все анкеты и доложи число валидных. Пройдёшь — станешь главным аналитиком приёмной комиссии. Не пройдёшь — будешь до Нового года считать степлеры на складе.
Условие задачи
 

Дано N заявлений в формате CSV (разделитель — символ |). Каждое заявление содержит 5 полей:

  1. ID: ровно 2 заглавные латинские буквы + 4 цифры. Пример: AB1234
  2. ФИО: фамилия (русская, с заглавной буквы) + пробел + заглавная буква + точка + заглавная буква + точка. Пример: Иванов И.И.
  3. Email: имя@домен.tld, где tld — 2–4 латинские буквы.
  4. Телефон: ровно +7 и 10 цифр. Пример: +79991234567
  5. Балл: целое число от 1 до 100.

Заявление считается валидным, если ВСЕ пять полей соответствуют формату.

Входные данные

В первой строке — целое число N. Далее N строк с заявлениями.

Выходные данные

Одно целое число — количество валидных заявлений.

Подсказка: Используй re.fullmatch() — в отличие от match, она требует, чтобы шаблон совпал с всей строкой, а не только с её началом.
🔒
Шаг 9: Тс-с, это тайна
Сложно
Завтра вуз вывешивает результаты на сайте. По закону о персональных данных нельзя показывать ФИО — только обезличенные результаты. Юрист комиссии нервно дергает левый глаз и говорит: «Замени все ФИО на звёздочки. Прямо сейчас. И чтобы я больше этого не видел». Юристов лучше не злить. Особенно когда у них дёргается глаз.
Условие задачи
 

Замени все ФИО в тексте на ***.

ФИО имеет формат: Фамилия с заглавной буквы, пробел, заглавная буква, точка, заглавная буква, точка. Например, Иванов И.И., Петрова А.С.. Все ФИО в кириллице.

Входные данные

Одна строка текста.

Выходные данные

Та же строка, в которой все ФИО заменены на ***.

Подсказка: re.sub(r"[А-ЯЁ][а-яё]+\s[А-ЯЁ]\.[А-ЯЁ]\.", "***", text). Не забудь экранировать точки!
🎯
Шаг 6: Сколько у меня баллов?
Средне
Тебе пишет абитуриентка Алиса: «Помогите, я не понимаю свой суммарный балл, у меня результаты в трёх разных форматах, я в шоке». Открываешь её скриншот — и правда: где-то математика: 95 баллов, где-то русский=92, где-то физика - 88. Алисе нужна одна цифра. Алисе нужна сумма. Алисе нужна твоя помощь.
Условие задачи
 

Извлеки все числовые значения баллов из текста и выведи их сумму. Балл — любое целое число от 1 до 100. Гарантируется, что других чисел в тексте нет.

Входные данные

Одна строка текста с описанием результатов.

Выходные данные

Одно целое число — сумма всех найденных баллов. Если баллов нет — вывести 0.

Подсказка: re.findall(r"\d+", text) вернёт список всех чисел в виде строк. Останется только сложить их.
📞
Шаг 5: Алло, это приёмка?
Средне
Час дня. Тебе позвонили 17 раз за последние 10 минут. У комиссии копится база телефонов абитуриентов, и каждый записывает номер по-своему: с плюсом, с восьмёркой, со скобками, с тире, а одна бабушка вообще словами. К счастью, словами — это не наш случай. Сегодня твоя миссия — привести все номера к человеческому виду +7XXXXXXXXXX.
Условие задачи
 

Извлеки все российские мобильные номера из текста и приведи к формату +7XXXXXXXXXX (плюс, семёрка, 10 цифр без разделителей).

Возможные форматы во входных данных:

  • +7(495)123-45-67 — код в скобках
  • 8(495)123-45-67 — восьмёрка вместо +7
  • +7-495-123-45-67 — всё через дефис
  • 8-495-123-45-67 — то же с восьмёркой

Все номера: либо +7, либо 8, далее код (3 цифры), далее 7 цифр. Пробелов внутри номера нет.

Входные данные

Одна строка текста.

Выходные данные

Все найденные номера в формате +7XXXXXXXXXX, по одному на строке.

Подсказка: Найди подстроки телефонов, потом re.sub(r"\D", "", s) чистит всё нецифровое. Если первая цифра 8 — замени на 7.
📅
Шаг 4: Когда же экзамен?!
Средне
Расписание экзаменов прислали сразу три разных департамента. В одном пишут даты через точку (15.06.2025), в другом — через слеш (15/06/2025), в третьем — через дефис (15-06-2025). Конечно же, никто не согласовался. И конечно же, разбираться тебе. Приведи весь хаос к нормальному виду ГГГГ-ММ-ДД, как делают серьёзные айтишники.
Условие задачи
 

Извлеки все даты из текста и выведи их в формате ГГГГ-ММ-ДД (ISO 8601).

Формат входных дат: ровно 2 цифры дня, разделитель (., / или -), 2 цифры месяца, тот же или другой разделитель, 4 цифры года. Год от 2020 до 2026, день от 01 до 28, месяц от 01 до 12 (валидность гарантируется).

Входные данные

Одна строка текста.

Выходные данные

Все найденные даты в формате ГГГГ-ММ-ДД, по одной на строке.

Подсказка: Группы захвата: (\d{2})[./-](\d{2})[./-](\d{4}). Класс [./-] заменит сразу все три разделителя.
📄
Шаг 3: Бланки ЕГЭ
Просто
Сегодня в комиссию пришёл абитуриент Костя. Он принёс распечатку с десяти разных сайтов с результатами ЕГЭ, потому что «не понял, какому верить». Среди этой пачки бумаг нужно отыскать номера бланков ЕГЭ — и проверить, что они валидные. Костя нервничает. Костя смотрит на тебя. Костя верит.
Условие задачи
 

Номер бланка ЕГЭ имеет формат: ровно 4 цифры, дефис, ровно 7 цифр. Например, 0123-4567890.

Входные данные

Одна строка текста.

Выходные данные

Все найденные валидные номера бланков, по одному на строке.

Подсказка: Регулярка \b\d{4}-\d{7}\b. Границы \b важны — иначе номер 12345-67890123 тоже подойдёт частично, а это не наш случай.
📧
Шаг 2: Письма из ниоткуда
Просто
День второй. На почту приёмной комиссии завалилось 347 писем от абитуриентов. Кто-то пишет email в подписи, кто-то в теле письма, кто-то прямо в теме: «Если что, пишите на vasya.gamer@hse.ru, я там всегда онлайн». Твой начальник просит собрать все email в один список, потому что Excel у него снова завис. Печаль.
Условие задачи
 

Email считается валидным, если он состоит из:

  • имени из латинских букв, цифр и точек,
  • символа @,
  • домена из латинских букв, цифр и точек,
  • точки и доменного зона из 2–4 латинских букв (например, .ru, .edu, .com).
Входные данные

Одна строка произвольного текста.

Выходные данные

Все найденные email-адреса, по одному на строке, в порядке появления.

Подсказка: Шаблон: [a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}. Не забудь экранировать точку перед доменной зоной: \..

Что не так с кодом df[df['A'] > 5 & df['B'] < 10]?

  1. всё в порядке, код работает
  2. надо писать and вместо &
  3. не хватает скобок вокруг каждого сравнения, будет ошибка
  4. надо писать | вместо &

В выражении (df['A'] > 5) & (df['B'] < 10) зачем нужны скобки вокруг каждого условия?

  1. для красоты, можно убрать
  2. оператор & имеет более высокий приоритет, чем сравнение, без скобок будет ошибка
  3. чтобы pandas понял русский язык
  4. чтобы код стал быстрее
Поделиться
Класснуть