Строки

351 задача
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
СЕКРЕТНО
Дело VOIDLINKER · Эпизод 10 из 13
Стеганограф
ИСТОЧНИК: лог сервера, проанализированный forensic-командой
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Думаете, видите случайный мусор в логе? Я прячу там сообщения. Скрытый блок: чётная цифра — повторяющаяся буква — та же чётная цифра. Внутри только эта буква, никаких других символов. Найдите самый длинный такой блок. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите последовательность из максимального количества идущих подряд одинаковых букв, начинающуюся и заканчивающуюся одной и той же чётной цифрой (0,2,4,6,8), не содержащую внутри других цифр и других букв, кроме повторяющейся. Длина считается вместе с обрамляющими цифрами. Если ничего нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка из заглавных букв и цифр, до 2·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 9 из 13
Маяк PQRS
ИСТОЧНИК: радиоэфир 433 МГц / 31.10.2026 16:24
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Слышишь треск на 433-й? Это мой маяк. Циклический сигнал: PQRSPQRSPQRS… Каждый символ — следующий в цикле P→Q→R→S→P… Сигнал может начаться и оборваться в любой точке цикла, но содержит хотя бы одну полную группу PQRS. Найди мой самый длинный отрезок маяка. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Текстовый файл состоит из символов P, Q, R, S. Определите максимальную длину непрерывной подпоследовательности, в которой каждый символ — следующий в цикле P→Q→R→S→P, и содержится не менее одной полной группы PQRS. Если нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка до 2·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

На странице есть:

<ul id="list"></ul>

JavaScript выполняет:

const ul = document.getElementById('list');
ul.innerHTML = '';
const li = document.createElement('li');
li.textContent = 'Бег';
ul.appendChild(li);

Что увидит пользователь?

  1. Пустой список
  2. Список с одним пунктом «Бег»
  3. Ошибку в консоли
  4. Текст «Бег» без маркера списка

Что произойдёт при выполнении этого кода?

fetch('/api/add', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({name: 'Бег'})
})
.then(r => r.json())
.then(data => alert(data.msg));
  1. Откроется новая страница /api/add
  2. Страница перезагрузится с новой привычкой
  3. JavaScript отправит POST с JSON на сервер, получит ответ и покажет alert
  4. Привычка добавится, но ничего не произойдёт на экране

Пользователь нажал кнопку «Добавить» в HTML-форме:

<form method="POST" action="/add">
  <input name="habit_name" value="Йога">
  <button type="submit">Добавить</button>
</form>

Как Flask получит значение «Йога» в обработчике?

  1. request.json['habit_name']
  2. request.form['habit_name']
  3. request.args['habit_name']
  4. request.get('habit_name')

Ёлочная гирлянда состоит из n лампочек, пронумерованных от 1 до n. Каждая лампочка либо горит (обозначим «1»), либо не горит («0»). Текущее состояние гирлянды задано строкой a.

Монтажник Егор хочет, чтобы гирлянда выглядела по-праздничному — в виде строки b (тоже из нулей и единиц, той же длины n). Менять строку b нельзя — это «образец».

С гирляндой a Егор может выполнять две операции:

  • Переключить одну лампочку. Выбрать позицию i (1 ≤ i ≤ n) и поменять её состояние (0 → 1 или 1 → 0). Стоимость такой операции — 1 рубль.
  • Поменять местами две лампочки. Выбрать две позиции i и j (1 ≤ i, j ≤ n) и поменять состояния этих лампочек местами. Стоимость такой операции — |i - j| рублей, то есть расстояние между позициями.

Помогите Егору найти минимальную суммарную стоимость, с которой можно превратить гирлянду a в гирлянду b.
 

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

В первой строке — целое число n (1 ≤ n ≤ 106) — количество лампочек в гирлянде.

Во второй строке — строка a длины n, состоящая только из символов «0» и «1», — текущее состояние гирлянды.

В третьей строке — строка b длины n, состоящая только из символов «0» и «1», — желаемое состояние гирлянды.
 

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

Одно целое число — минимальная суммарная стоимость, которую нужно заплатить, чтобы превратить a в b.

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

  • +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.

🚀
Шаг 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). Точки нужно экранировать!
🌐
Шаг 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.
Поделиться
Класснуть