Конечные автоматы

32 задачи
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
СЕКРЕТНО
Дело VOIDLINKER · Эпизод 2 из 13
Хронометраж
ИСТОЧНИК: darknet.onion / 31.10.2026 14:38
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Я работал ровно пятнадцать минут: с 14:00:00 до 14:15:59. Всё, что вне этого окна — твои false positives, аналитик. Если найдёшь все мои моменты в логе — может, подскажу, куда ушли деньги. Может. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

В журнале событий найди все временные метки формата YYYY-MM-DD HH:MM:SS, где дата ровно 2026-10-31 и время в окне 14:00:0014:15:59 включительно. Выведи их по одному на строку, в порядке появления.

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

Произвольный текст до 105 символов.

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

Каждый timestamp на отдельной строке.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 1 из 13
Первый след
ИСТОЧНИК: darknet.onion / #incident-leak / 31.10.2026 14:09
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Junior, ты только сел за свой access.log, да? Я уже пробежал по твоей сети с десятка адресов. Они там, прямо перед твоим носом. Спорим, ты не вытащишь их все? Я даже не маскировал IP — просто чтобы ты попотел над регулярками. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

На стандартный вход подан произвольный текст лога. Найди все IPv4-адреса и выведи их по одному на строку в порядке появления (включая повторы). IPv4-адрес — четыре числа от 0 до 255 без ведущих нулей, разделённые точками (192.168.0.1 — да, 192.168.001.1 — нет).

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

Произвольный текст в UTF-8 (несколько строк, до 105 символов).

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

Каждый IPv4-адрес на отдельной строке. Если адресов нет — пустой вывод.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

🎓
Шаг 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+).
🏆
Шаг 2: Регистрация на олимпиаду
Просто
Вася регистрируется сразу на пять олимпиад: «Высшая проба», «Ломоносов», «Турнир городов»… У него три почты: рабочая, школьная и одна старая, которую он завёл в 5 классе ради игры. Плюс ещё мамина — на неё приходят уведомления, потому что мама так захотела. Вася записал все свои email в один файл, но потом перепутал, какие из них рабочие. Помоги вытащить все валидные.
Условие задачи
 

Email состоит из:

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

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

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

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

Подсказка: [a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}. Точку перед зоной нужно экранировать: \..
🎓
Шаг 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.
📋
Шаг 1: Хаос в приёмной комиссии
Просто
Привет, абитуриент! Сейчас сентябрь, ты только что устроился стажёром в приёмную комиссию МГУ. В первый же день тебе вручают флешку с базой студентов и говорят: «Разберись». Открываешь файл — а там полный бардак: ID студентов, шутки в чате, чьи-то заметки и даже рецепт борща. Надо извлечь только настоящие ID.
Условие задачи
 

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

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

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

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

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

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


Беси играет в видеоигру. В этой игре 3 буквы 'A', 'B', 'C' - все управление. Эти буквы можно нажимать в любом порядке, однако возможны только N (1<=N<=20) различных комбинаций. Комбинация I представлена строкой Si с длиной от 1 до 15 символов, содержащей только символы 'A', 'B', 'C'.
Когда Беси нажимает комбинацию букв, соответствующую какой-то из введенных строк, она получает один балл. Комбинации могут перекрываться и даже заканчиваться одновременно. Например, если N=3 и три возможные комбинации есть "ABA", "CB" и "ABACB", а Беси набрала ABACB, она получит 3 балла. Беси может получать очко за каждую комбинацию более чем один раз.
Беси конечно хочет заработать как можно больше баллов. Если она нажмет ровно K (1<=K<=1000) клавиш, какое максимальное количество баллов она может заработать?
PROBLEM NAME: combos
Формат входных данных
* Строка 1:Два разделенных пробелом целых числа: N и K.
* Строки 2..N+1: Строка i+1 содержит только одну строку Si, представляющую комбинацию i.
Формат выходных данных
* Строка 1: Одно целое число, максимальное количество баллов, которое может набрать Беси


Примечание
Оптимальная последовательность клавиш есть ABACBCB, которая дает 4 балла 1 от ABA, 1 от ABACB, и 2 от CB.

В строке содержатся теги в угловых скобках. Найдите все отдельные теги.

Формат входных данных
На вход подается одна строка. Строка содержит печатаемые ASCII-символы. В строке обязательно есть хотя бы одна подпоследовательность начинающаяся с < и заканчивающаяся >

Формат выходных данных
Выведите ответ на задачу. Введите все теги в одной строке, разделяя их одним пробелом.

Пример
Входные данные
<br><hr><img/>

Выходные данные
<br> <hr> <img/>
Валидация email адреса важная и не простая задача в реальной практике. Попробуйте написать одну из частей  проверки email адреса. 

В заданном тексте, состоящем не более чем из 100 строк, найдите все email адреса. Выведите эти адреса в столбик в порядке их встречаемости в тексте. 

Формат email адреса (немного упростим, для облегчения реализации):

  • Локальная часть (до @): буквы (английские большие и маленькие), цифры, точки, дефисы, подчеркивания

  • Доменная часть (после @): буквы, цифры, точки, дефисы. Доменная часть должна содержать как минимум одну точку. Недопускается две и более точек подряд. Существование доменной части не проверяется.

  • Обязательно содержит символ @

  • Обычно заканчивается доменом верхнего уровня (например, .com, .ru, .org и др), состоящим от 2-х до 4-х символов (существование домена верхнего уровня не проверяется). 

Примечание:

  • Регистр не имеет значения

  • Адреса могут быть в любом месте текста

  • Нужно найти все вхождения, даже повторяющиеся

  • Валидность адреса проверяется только по формату (может не существовать реально).



Формат входных данных
В первой строке записано натуральное число N - количество строке текста. Далее, идут сами строки текста.

Формат выходных данных
Выведите все искомые email адреса, каждый адрес в отдельной строке.
В заданном тексте, состоящем не более чем из 100 строк, найдите все даты в формате DD-MM-YYYY. Выведите эти даты в столбик в порядке их встречаемости в тексте. Валидность даты проверять не нужно. 

Формат даты: DD-MM-YYYY, где:

  • DD - день (две цифры, 01-31)

  • MM - месяц (две цифры, 01-12)

  • YYYY - год (четыре цифры, обычно 0000-9999)

  • Разделитель: дефис "-"



Формат входных данных
В первой строке записано натуральное число N - количество строке текста. Далее, идут сами строки текста.

Формат выходных данных
Выведите все искомые даты, каждая дата в отдельной строке.
Словом называется последовательность символов ограниченная слева и справа пробелом или началом(концом) строки. Найдите все слова, начинающиеся на английскую букву p (без учета регистра).

Формат входных данных
Строка, состоящая из букв английского алфавита. Длина строки не более 1000 символов.

Формат выходных данных
Выведите все найденные слова в одной строке, разделяя их одним пробелом. Порядо слов должен быть таким же как в исходной строке.
Три z#67722
Необходимо найти все строки, в которых содержится три буквы z подряд. 

Формат входных данных
Программа получает в первой строке натуральное число N - количество строк (N <= 100). Далее идет N алфавитно-цифровых строк (длина каждой строки не более 100 символов). 

Формат выходных данных
Выведите на экран все искомые строки. Строки необходимо вывести в том порядке, в котором они встречаются во входных данных.
Формат входных данных
В первой строке записано натуральное число N - количество строк. Далее, записаны N строк в каждой из которых находится последовательность строчных английских букв. 

Формат выходных данных
Выведите N строк. В каждой строке необхоидимо вывести главсные буквы (aeiou), которые встречаются в соответствующей строке входных данных. Буквы должны быть выведены через пробел в том же порядке, что в исходной строке. Если в строке таких букв нет, то для такой строки необходимо вывести слово None.

 

re.fullmatch(pattern, string) - проверяет совпадение ВСЕЙ строки с шаблоном.

Возвращает: объект Match или None

Использование: match = re.fullmatch(r'\d+', text)
 


 Проверить, что строка является корректным ID товара:

  • Формат: [Категория][Номер][Версия]
  • Категория: 1 буква (A-Z)
  • Номер: 1-3 цифры
  • Версия: необязательная, начинается с '-v' и 1-2 цифры
Программа на вход получает строку и должна вывести True, если ID товара корректен и False в противном случае.

re.match(pattern, string) - проверяет совпадение ТОЛЬКО в начале строки.

  • Возвращает: объект Match или None
  • Использование: match = re.match(r'\d+', text)

 

Задача: Проверить, что строка начинается с корректного формата лог-записи:

  • Дата: ГГГГ-ММ-ДД
  • Время: ЧЧ:ММ:СС
  • Уровень логирования: INFO, WARN, ERROR, DEBUG
В этой задаче на вход подается одна строка. Вам нужно вывести True если начало строки совпадает с шаблоном и False в противном случае.
 

re.search(pattern, string) - находит ПЕРВОЕ совпадение с шаблоном в строке.

  • Возвращает: объект Match или None
  • Использование: match = re.search(r'\d+', text)

Найти первый товар из категории Electronics и вывести его название и цену в одной строке через пробел. 

Например (только для понимания формата вывода), 
DVD 34.5$
Поделиться
Класснуть