Информатика

7 592 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

Ты копишь на подержанный велосипед и мониторишь Авито. Скопировал тексты объявлений в один файл и хочешь посчитать статистику по ценам.

Цены написаны по-разному: 15 000 ₽, 15000 руб, 15.000 р., от 14000 до 16000 рублей.

Формат входных данных

Произвольный текст до 10 000 символов, возможно в несколько строк. Цена — число от 1000 до 1 000 000 с возможными разделителями тысяч (пробел или точка), сразу за которым стоит обозначение рубля: , р, р., руб, руб., рубль, рублей, рубля или рубли.

Числа вне диапазона \([1000, 1\,000\,000]\) при статистике игнорируются.

Формат выходных данных

Ровно четыре строки:

min: <минимум>
max: <максимум>
avg: <среднее>
count: <количество>

Среднее — округлить до целого. Если цен не найдено, в первых трёх строках вместо чисел поставить дефис -, а в последней — 0.

Учительница литературы просит помечать тавтологии — когда одно и то же слово стоит подряд два раза: «был был», «очень очень».

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

Формат входных данных

Произвольный текст до 10 000 символов, возможно в несколько строк. Слово — это последовательность букв (кириллица или латиница), цифр и подчёркиваний.

Формат выходных данных

Тот же текст, но каждое повторение подряд двух одинаковых слов обёрнуто в квадратные скобки: [слово слово]. Пунктуация и все остальные символы сохраняются.

Примечание

Регистр при сравнении слов не учитывается: Очень очень — тоже повтор. В выводе регистр оригинала сохраняется.

В заметках на телефоне ты ведёшь дневник тренировок. Даты писали по-разному: 17.04.2026, 17/04/2026, 17-04-2026, 17 апреля 2026.

Приведи все найденные даты к ISO-формату YYYY-MM-DD.

Формат входных данных

Произвольный текст до 10 000 символов, возможно в несколько строк. Формат даты: день (1–2 цифры), разделитель (., /, - или пробел), месяц (2 цифры или слово на русском), разделитель, год (4 цифры).

Формат выходных данных

Каждая найденная дата в формате YYYY-MM-DD на отдельной строке в порядке появления.

Примечание

Поддерживаются названия всех 12 месяцев: январь, февраль, ..., декабрь в любой форме (январь, января, январём — достаточно, чтобы начало совпало с основой).

Ты готовишь скриншот переписки с репетитором для публикации в Instagram-сторис и хочешь замаскировать номера телефонов: оставить префикс (+7 или 8) и последние 2 цифры, а между ними поставить ровно 8 звёздочек.

Например: +7 (903) 123-45-67 превращается в +7********67.

Формат входных данных

Произвольный текст до 10 000 символов, возможно в несколько строк. Телефоны — российские мобильные в любом из форматов задачи 3.

Формат выходных данных

Тот же текст, но с заменёнными телефонами. Весь остальной текст (пунктуация, пробелы, переносы строк) сохраняется.

Мама выгрузила из электронного дневника текстовую выписку. Каждая строка выглядит так: название предмета, двоеточие, оценки через запятую или пробел.

Напиши программу, которая для каждого предмета посчитает средний балл.

Формат входных данных

Одна или несколько строк вида Название предмета: оценки. Название предмета — одно или несколько русских слов (только буквы и пробелы). Оценки — целые числа от 2 до 5, разделённые запятыми и/или пробелами.

Формат выходных данных

Для каждого предмета в том же порядке, в котором они встретились во входе, выведи строку вида Предмет: X.XX — название, двоеточие, пробел, средний балл с двумя знаками после точки.

Примечание

Используй округление Python по умолчанию (функция round). Предметы без оценок (если такие попадутся) в выводе пропускай.

В Telegram-чате класса ребята обращаются друг к другу через @никнейм. Ты — староста и хочешь понять, кого упоминают чаще всех.

Никнейм — это символ @, за которым идут от 5 до 32 символов: латинские буквы, цифры и подчёркивания. Короткие последовательности (меньше 5 символов) никнеймами не считаются.

Формат входных данных

В первой строке — число \(N\) (\(1 \le N \le 100\)) — сколько самых упоминаемых никнеймов нужно вывести.
Далее — произвольный текст чата до 10 000 символов.

Формат выходных данных

Топ-\(N\) никнеймов в нижнем регистре, каждый на отдельной строке. Порядок — по убыванию частоты упоминаний; при равенстве частот раньше идёт тот, кто первым встретился в тексте.

Если уникальных никнеймов меньше \(N\), выведи все, что есть.

Примечание

Регистр при подсчёте игнорируется: @Katya и @katya — один человек.

Классный руководитель попросил собрать все email-адреса из чата родителей в один список: без дубликатов, в едином регистре и в алфавитном порядке.

Формат входных данных

Произвольный текст до 10 000 символов, возможно в несколько строк.

Формат выходных данных

Каждый уникальный email-адрес на отдельной строке в нижнем регистре, отсортированный лексикографически.

Примечание

Упрощённый формат email: имя@домен.зона, где имя — буквы, цифры, точки, дефисы, подчёркивания; домен — буквы, цифры, дефисы (без точек); зона — 2–6 латинских букв.

В родительском чате прислали текст с контактами репетиторов. Телефоны записаны в разных форматах:

  • +7 (999) 123-45-67
  • 8 999 123 45 67
  • 89991234567
  • +7-999-123-45-67

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

Формат входных данных

Произвольный текст до 10 000 символов. Все телефоны — российские мобильные: код оператора (3 цифры), потом 3-2-2 цифры с произвольными разделителями (пробелы, дефисы, скобки).

Формат выходных данных

Каждый телефон в формате +7XXXXXXXXXX на отдельной строке в порядке появления в тексте.

На сайте школьного кружка робототехники при регистрации нужно валидировать пароль.

Напиши программу, которая считывает одну строку — пароль — и выводит YES, если пароль удовлетворяет всем условиям, и NO иначе.

Пароль считается надёжным, если:

  • длина от 8 до 20 символов включительно;
  • состоит только из латинских букв, цифр и символов _ - ! @ #;
  • содержит хотя бы одну заглавную букву;
  • содержит хотя бы одну строчную букву;
  • содержит хотя бы одну цифру.

Формат входных данных

Одна строка — пароль (длиной до 100 символов).

Формат выходных данных

Строка YES или NO.

Ты ведёшь паблик класса во ВКонтакте и хочешь собирать статистику по хештегам.

Напиши программу, которая читает текст поста и выводит все хештеги в порядке появления.

Хештег — это символ #, за которым идут один или более символов: буквы (латиница или кириллица), цифры или подчёркивания.

Формат входных данных

Произвольный текст от одной до 100 строк, общей длиной не более 10 000 символов.

Формат выходных данных

Каждый найденный хештег на отдельной строке в порядке появления в исходном тексте.

🚀
Шаг 10: Стартап OlympMap
Сложно
Финал лета. Вася с друзьями запускают OlympMap — сервис, который показывает, какие олимпиады дают льготы в какие вузы. За неделю в чате «Абитура-2026» набрали 400+ анкет от призёров. Только формы не было — все писали в чат через символ |, и половина с опечатками. Перед запуском MVP надо понять, сколько анкет реально пригодны для базы. От этого зависит, выйдет ли проект на школьный хакатон.
Условие задачи
 

Дано N анкет. Каждая анкета — одна строка из 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: 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.
Поделиться
Класснуть