Информатика

7 600 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
🎓
Шаг 8: GPA для Германии?!
Сложно
Вася решил подстраховаться и подать документы ещё в TU München. Анкета на немецком, всё страшно, но главное — они просят оценки в шкале 0–100. У Васи: в аттестате 5/5, в Coursera-сертификатах 87%, в одной программе обмена GPA: 3.85. Помоги ему всё конвертировать.
Условие задачи
 

Приведи все оценки к шкале 0–100:

  • Проценты (87%) — число до знака % без изменений.
  • Российская 5-балльная (4/5) — \(\text{балл}/5 \times 100\) (целая часть).
  • GPA (GPA: 3.6) — \(\text{GPA}/4{,}0 \times 100\), округлить функцией round() Python.
Входные данные

Одна строка с оценками, разделёнными запятой и пробелом. Префикса перед оценками нет.

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

Целые числа от 0 до 100, по одному на строке.

Подсказка: Раздели строку по ", " и для каждой части примени поочерёдно три регулярных выражения: (\d+)%, (\d)/5, GPA:\s*(\d\.\d+).
🌐
Шаг 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. Внутри СНИЛС есть пробел — будь внимателен.
🏆
Шаг 2: Регистрация на олимпиаду
Просто
Вася регистрируется сразу на пять олимпиад: «Высшая проба», «Ломоносов», «Турнир городов»… У него три почты: рабочая, школьная и одна старая, которую он завёл в 5 классе ради игры. Плюс ещё мамина — на неё приходят уведомления, потому что мама так захотела. Вася записал все свои email в один файл, но потом перепутал, какие из них рабочие. Помоги вытащить все валидные.
Условие задачи
 

Email состоит из:

  • имени из латинских букв, цифр и точек,
  • символа @,
  • домена из латинских букв, цифр и точек,
  • точки и доменной зоны из 2–4 латинских букв.
Входные данные

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

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

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

Подсказка: [a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}. Точку перед зоной нужно экранировать: \..
📔
Шаг 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). Не забудь экранировать точки!
🎓
Шаг 8: Три шкалы — одна голова
Сложно
Маша снова на связи! Теперь она прислала свои оценки. Из российской школы — 5/5, из онлайн-курса Coursera — 87%, а из американской летней программы — GPA: 3.85. Приёмная комиссия Гарварда смотрит на это как на «криптозагадку из эпохи майя». Помоги Маше: приведи всё к шкале 0–100, чтобы хоть кто-то понял её средний уровень.
Условие задачи
 

Приведи все оценки к единой шкале 0–100:

  • Проценты (87%) — число до знака % без изменений.
  • Российская 5-балльная (4/5) — \(\text{балл}/5 \times 100\) (целая часть).
  • GPA (GPA: 3.6) — \(\text{GPA}/4{,}0 \times 100\), округлить функцией round() Python.
Входные данные

Одна строка с оценками, разделёнными запятой и пробелом. Префикса перед оценками нет.

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

Целые числа от 0 до 100, по одному на строке, в порядке появления.

Подсказка: Раздели строку по ", ", для каждой части примени поочерёдно три регулярных выражения: (\d+)%, (\d)/5, GPA:\s*(\d\.\d+).
🌐
Шаг 7: Карта мира университетов
Средне
Подруга Алисы — Маша — решила поступать и в Россию, и за границу одновременно. Она прислала тебе текстовый файл с десятками ссылок: МГУ, ВШЭ, MIT, Oxford, ETH Zurich… В таком объёме легко запутаться. Маша просит сделать чистый список доменов, «без всяких этих https и www, чтобы влезло на одну страницу». Маша знает, чего хочет.
Условие задачи
 

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

Формат URL: http:// или https://, затем опционально www., затем доменное имя (буквы, цифры, точки), затем опционально / и путь.

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

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

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

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

Подсказка: Группа захвата: https?://(?:www\.)?([a-zA-Z0-9.]+?)(?=[/\s]|$). (?:...) — группа без захвата, (?=...) — lookahead.
🎯
Шаг 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 тоже подойдёт частично, а это не наш случай.
📋
Шаг 1: Хаос в приёмной комиссии
Просто
Привет, абитуриент! Сейчас сентябрь, ты только что устроился стажёром в приёмную комиссию МГУ. В первый же день тебе вручают флешку с базой студентов и говорят: «Разберись». Открываешь файл — а там полный бардак: ID студентов, шутки в чате, чьи-то заметки и даже рецепт борща. Надо извлечь только настоящие ID.
Условие задачи
 

Каждый ID студента имеет строгий формат: ровно две заглавные латинские буквы и ровно четыре цифры подряд. Например, AB1234, MK0001, PR2024.

Дана одна строка текста (до 10 000 символов). Извлеки из неё все валидные ID и выведи их по одному на строке в порядке появления.

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

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

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

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

Поделиться
Класснуть