| | | |
|
Цензура
Конечные автоматы
Алгоритмы на строках
Телевидение Флатландии готовится показать в вечернем эфире выступление одного известного политика. Поскольку политик известен своей несдержанностью, решено было написать специальную программу, которая вырезала бы из речи политика некоторые фразы, запуская в этот момент рекламу.
Поскольку ввести все неполиткорректные слова в программу представляется довольно сложным, решено было использовать эвристический алгоритм определения адекватности фразы.
Речь политика в реальном времени оцифровывается, распознается и подается на вход программе как последовательность фраз. Каждая фраза состоит из слов, записанных в одну строку. Слово представляет собой последовательность символов, ограниченную с обеих сторон границами фразы, пробелами или знаками препинания (символами «.», «!», «?», «:», «-», «,», «;», «(» или «)»).
Слово считается подозрительным, если в него входит не более трех различных букв (любой символ, кроме пробелов и знаков препинания считается буквой, большие и маленькие буквы считаются различными). Например, слова «дом», «мама» или «шалаш» являются подозрительными, а слова «привет», «Шалаш» или «hello» – нет.
Фраза считается подозрительной, если не менее половины слов в ней подозрительны (каждое вхождение слова во фразу считается отдельно).
Напишите программу, которая процензурирует речь политика, удалив из нее все подозрительные фразы.
Формат входных данных
Вводится не более 1000 фраз, каждая из которых представляет собой строку не длиннее 250 символов. Фраза содержит только символы с ASCII кодами от 32 до 255.
Формат выходных данных
Выведите все фразы из входных данных, которые не являются подозрительными. Фразы следует выводить в том же порядке, в котором они поступали на вход программы.
| |
|
|
Электронная таблица
Конечные автоматы
Электронная таблица представляет собой прямоугольную таблицу, левая и верхняя граница которой зафиксированы, а правая и нижняя отсутствуют, таким образом, таблица бесконечна вправо и вниз. В каждой ячейке таблицы может быть записано какое-либо значение. Значение ячейки – это произвольная последовательность символов с кодами от 32 до 126.
При сохранении таблицы в файл она записывается в специальном формате. Ячейки перечисляются в файле, начиная с левой верхней, по строкам сверху вниз, внутри строки слева направо. В каждой строке перечисляется несколько подряд идущих ячеек, начиная с первой, при этом заведомо перечисляются все непустые ячейки данной строки. Всего в файл выводится несколько подряд идущих строк, начиная с первой, при этом выводятся, как минимум, все строки, в которых содержится хотя бы одна непустая ячейка.
Значения соседних ячеек при записи в файл разделяются между собой символом ","(запятая), строки таблицы отделяются друг от друга символом ";" (точка с запятой). После последней клетки идет символ "." (точка). За каждым из этих символов может немедленно следовать один перевод строки, который должен игнорироваться. Другие переводы строки во файле не встречаются.
Если в значении ячейки встречается один из символов ",", ";", ".'"или "\", то в файл записывается два символа – сначала "\", а затем данный символ. Соответственно, запятая, точка с запятой и точка, которые идут непосредственно после "\", не являются разделителями значений ячеек. В частности, после них не может следовать перевода строки.
Каждая ячейка относится к одному из трех типов: числовая, строковая, пустая. Пустая ячейка – это ячейка, значение которой является пустой строкой. Числовая ячейка содержит целое число из диапазона от -32768 до 32767 включительно. Число должно быть записано без ведущих нулей и лишних знаков "+" или "-" (знак "-'" должен быть только у отрицательных чисел, причем ровно один). Любая другая ячейка относится к строковому типу. Так, например, к строковому типу относятся ячейки, содержащие следующие значения: 01 (включает ведущий нуль), 55000 (не входит в указанный диапазон), а также ячейка, содержащая один символ "пробел".
Столбец таблицы называется пустым, если все ячейки, которые он содержит – пустые. Столбец таблицы называется числовым, если он содержит только числовые и пустые ячейки. В противном случае столбец называется строковым. Требуется для каждого столбца таблицы, начиная с первого, и до последнего непустого, определить, к какому типу он относится.
Входные данные
На вход программы поступает электронная таблица, размер входных данных не превышает 32767 байт.
Выходные данные
Для всех столбцов, начиная с первого, и до последнего непустого столбца, выведите их тип, разделив значения запятыми, и в конце поставьте точку. В качестве типа столбца выведите одно из следующих значений: "EMPTY'', если столбец является пустым, "NUMBER'', если столбец является числовым, "STRING'', если столбец является строковым.
| |
|
|
ДКА
Конечные автоматы
Напишите программу, моделирующую работу детерминированного конечного автомата (ДКА). Описание автомата и входная строка вводятся на стандартном потоке ввода. Результат работы автомата над данной строкой выводится на стандартный поток вывода.
Входные данные
Описание автомата задаётся в следующей форме. Сначала задаётся функция перехода автомата. Функция перехода задаётся в виде троек CUR CHAR NEW, где CUR — идентификатор исходного состояния — произвольная символьная строка, не содержащая пробельные символы. CHAR — символьная строка длиной ровно 1 символ. NEW — идентификатор целевого состояния — произвольная символьная строка, не содержащая пробельные символы. Элементы описания перехода могут отделятся друг от друга произвольным количеством пробельных символов. Описание функции перехода завершается строкой "END" в качестве идентификатора исходного состояния. Элементы CHAR и NEW отсутсвуют.
Далее перечисляются заключительные состояния автомата. Каждое состояние — это символьная строка. Список состояний завершается символьной строкой "END". Далее задаётся начальное состояние автомата — символьная строка. Затем задаётся проверяемое слово — символьная строка. Все элементы входного файла могут отделяться друг от друга произвольным количеством пробельных символов. Можете предполагать, что входные данные корректны, то есть удовлетворяют спецификации и действительно задают детерминированный конечный автомат.
Выходные данные
Результат работы автомата должен быть напечатан в следующем виде. Сначала напечатайте число 1, если данный автомат допускает данную цепочку, и 0 в противном случае. Затем напечатайте количество символов, прочитанных во входной цепочке к моменту принятия автоматом решения. Наконец, напечатайте идентификатор состояния, в котором в данный момент находился автомат.
| |
|
|
21804
Конечные автоматы
Если мы хотим сделать два одинаковых слова, то необходимо использовать операцию:
1. вырезать
2. копировать
3. размножить
4. удалить
| |
|
|
21802
Конечные автоматы
Преобразование, изменяющее структуру текста называется
1. редактированием
2. форматированием
3. стилизацией
4. структуризацией
| |
|
|
12453
Конечные автоматы
Для кодирования некоторой последовательности, состоящей из букв А, Б, В, Г и Д, используется неравномерный двоичный код, позволяющий однозначно декодировать полученную двоичную последовательность. Вот этот код:
А-00, Б-010, В-011, Г-101, Д-111
Можно ли сократить для одной из букв длину кодового слова так, чтобы код по-прежнему можно было декодировать однозначно? Коды остальных букв меняться не должны. Выберите правильный вариант ответа.
1) для буквы Б-01
2) это невозможно
3) для буквы В-01
4) для буквы Г-01
| |
|
|
1624
Конечные автоматы
Что мы увидим после выполнения команды Вставка/ Объект/ Microsoft Equation (Формула Math)
1) Редактор формул
2) Редактор символов
3) Скопированную формулу
4) Редактор текста
| |
|
|
1287
Конечные автоматы
В каком из перечисленных ниже предложений правильно расставлены пробелы между словами и знаками препинания?
1) Синица на море пустилась :она хвалилась, что хочет море сжечь.
2) Синица на море пустилась:она хвалилась, что хочет море сжечь.
3) Синица на море пустилась: она хвалилась, что хочет море сжечь.
4) Синица на море пустилась : она хвалилась, что хочет море сжечь.
| |
|
|
Эпизод 2. Хронометраж атаки
Конечные автоматы
СЕКРЕТНО
Дело 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:00–14:15:59 включительно. Выведи их по одному на строку, в порядке появления.
ВХОДНЫЕ ДАННЫЕ
Произвольный текст до 105 символов.
ВЫХОДНЫЕ ДАННЫЕ
Каждый timestamp на отдельной строке.
| |
|
|
Эпизод 1. Первый след — IP-адреса
Конечные автоматы
СЕКРЕТНО
Дело 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-рассылка от классного руководителя
Конечные автоматы
Классный руководитель попросил собрать все email-адреса из чата родителей в один список: без дубликатов, в едином регистре и в алфавитном порядке.
Формат входных данных
Произвольный текст до 10 000 символов, возможно в несколько строк.
Формат выходных данных
Каждый уникальный email-адрес на отдельной строке в нижнем регистре, отсортированный лексикографически.
Примечание
Упрощённый формат email: имя@домен.зона, где имя — буквы, цифры, точки, дефисы, подчёркивания; домен — буквы, цифры, дефисы (без точек); зона — 2–6 латинских букв.
| |
|
|
Regex-Quest. 8. GPA для Германии?!
Конечные автоматы
🎓
Шаг 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+).
| |
|
|
Regex-Quest. 2. Регистрация на олимпиаду
Конечные автоматы
🏆
Шаг 2: Регистрация на олимпиаду
Просто
Вася регистрируется сразу на пять олимпиад: «Высшая проба», «Ломоносов», «Турнир городов»… У него три почты: рабочая, школьная и одна старая, которую он завёл в 5 классе ради игры. Плюс ещё мамина — на неё приходят уведомления, потому что мама так захотела. Вася записал все свои email в один файл, но потом перепутал, какие из них рабочие. Помоги вытащить все валидные.
Email состоит из:
- имени из латинских букв, цифр и точек,
- символа
@,
- домена из латинских букв, цифр и точек,
- точки и доменной зоны из 2–4 латинских букв.
Входные данные
Одна строка произвольного текста.
Выходные данные
Все найденные email-адреса, по одному на строке.
Подсказка: [a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}. Точку перед зоной нужно экранировать: \..
| |
|
|
Regex-Quest. 8. Три шкалы — одна голова
Конечные автоматы
🎓
Шаг 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+).
| |
|
|
Regex-Quest. 7. Карта мира университетов
Конечные автоматы
🌐
Шаг 7: Карта мира университетов
Средне
Подруга Алисы — Маша — решила поступать и в Россию, и за границу одновременно. Она прислала тебе текстовый файл с десятками ссылок: МГУ, ВШЭ, MIT, Oxford, ETH Zurich… В таком объёме легко запутаться. Маша просит сделать чистый список доменов, «без всяких этих https и www, чтобы влезло на одну страницу». Маша знает, чего хочет.
Извлеки только доменное имя без префикса www. и без пути.
Формат URL: http:// или https://, затем опционально www., затем доменное имя (буквы, цифры, точки), затем опционально / и путь.
Входные данные
Одна строка текста с URL-ами.
Выходные данные
Доменные имена без www., по одному на строке, в порядке появления.
Подсказка: Группа захвата: https?://(?:www\.)?([a-zA-Z0-9.]+?)(?=[/\s]|$). (?:...) — группа без захвата, (?=...) — lookahead.
| |
|
|
Regex-Quest. 1. Хаос в приёмной комиссии
Конечные автоматы
📋
Шаг 1: Хаос в приёмной комиссии
Просто
Привет, абитуриент! Сейчас сентябрь, ты только что устроился стажёром в приёмную комиссию МГУ. В первый же день тебе вручают флешку с базой студентов и говорят: «Разберись». Открываешь файл — а там полный бардак: ID студентов, шутки в чате, чьи-то заметки и даже рецепт борща. Надо извлечь только настоящие ID.
Каждый ID студента имеет строгий формат: ровно две заглавные латинские буквы и ровно четыре цифры подряд. Например, AB1234, MK0001, PR2024.
Дана одна строка текста (до 10 000 символов). Извлеки из неё все валидные ID и выведи их по одному на строке в порядке появления.
Входные данные
Одна строка произвольного текста.
Выходные данные
Все найденные ID, по одному на строке. Если ID не найдены — пустой вывод.
| |
|
|
Video Game
Динамическое программирование
Конечные автоматы
реализация
Беси играет в видеоигру. В этой игре 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 адреса важная и не простая задача в реальной практике. Попробуйте написать одну из частей проверки 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
Строки
Задача на реализацию
Конечные автоматы
Словом называется последовательность символов ограниченная слева и справа пробелом или началом(концом) строки. Найдите все слова, начинающиеся на английскую букву p (без учета регистра).
Формат входных данных
Строка, состоящая из букв английского алфавита. Длина строки не более 1000 символов.
Формат выходных данных
Выведите все найденные слова в одной строке, разделяя их одним пробелом. Порядо слов должен быть таким же как в исходной строке.
| |
|
|
Три z
Конечные автоматы
Необходимо найти все строки, в которых содержится три буквы 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$
| |
|
|
Поиск ценовых диапазонов
Конечные автоматы
Найти все цены выше 100$. Выведите список (аналогично первому заданию). Цены должны выводиться со знаком $.
| |
|
|
Извлечение ID
Конечные автоматы
re.findall(pattern, string) - находит ВСЕ совпадения с шаблоном в строке.
-
Возвращает: список строк (если нет групп) или список кортежей (если есть группы)
-
Использование: results = re.findall(r'\d+', text)
Для извлечения (сохранения) конкретной части совпадения используйте группы.
Пример
import re
text = "Цена: 100 руб."
# Без группы
print(re.findall(r"\d+ руб", text)) # ['100 руб']
# С группой
print(re.findall(r"(\d+) руб", text)) # ['100']
Группы ( ) нужны, чтобы вытащить только нужную часть из найденного текста!
Задание
Найти все ID товаров (формат: английская буква + цифра) и вывести список (в формате ['A1', 'B2'....], ID товаров в алфавитном порядке).
Файл ко всем заданиям модуля
| |
|
|
T2005
Бор
Задача на реализацию
Конечные автоматы
Клавиатура сотового телефона выглядит так:
| 1 — пробел |
2 — abc |
3 — def |
| 4 — ghi |
5 — jkl |
6 — mno |
| 7 — pqrs |
8 — tuv |
9 — wxyz |
Режим ввода T2005 устроен следующим образом. В телефоне есть словарь. Пользователь, чтобы ввести слово, последовательно нажимает клавиши, на которых написаны буквы этого слова. Например, чтобы ввести слово begin пользователь должен нажимать клавиши 23446. Но как только в словаре оказывается только одно слово с таким началом, это слово автоматически подставляется и, кроме того, после этого слова автоматически добавляется пробел. Например, пусть пользователь нажал клавиши 234, и оказалось, что слов, ввод которых начинается с нажатия именно этих клавиш, — ровно одно. Тогда автоматически подставится это слово и пробел после него, а все последующие нажатия клавиш уже будут относиться к вводу следующего слова.
Если для ввода какого-то слова нужно нажать последовательность клавиш, которая может являться началом какого-то другого слова, то после ввода этого слова нужно нажать клавишу 1, что соответствует вводу пробела. При вводе пробела считается, что вы ввели все слово целиком (а не только какое-либо его начало). Если после ввода пробела оказалось, что в словаре такой последовательности клавиш удовлетворяет несколько слов, подставляется первое из них в алфавитном порядке. Если (опять же после ввода пробела) оказалось, что в словаре нет слова, которое может быть введено такой последовательностью клавиш, то все, что было введено после предыдущего пробела (введенного или автоматически подставленного, или, если в тексте ранее не встречалось ни одного пробела — от начала текста) удаляется. Если после ввода пробела (как нажатием "1", так и автоподстановкой) или в начале текста нажимается клавиша "1", то ее нажатие игнорируется.
Вам дан словарь и последовательность нажатий клавиш. Выведите текст, который был введен пользователем.
Примечание: в тексте используются только маленькие латинские буквы и символ пробел.
Входные данные
Сначала на вход программы поступает число N — количество слов в словаре (2≤N≤100000). В следующих N строках задается словарь. Каждое слово записано в отдельной строке. Слова расположены в алфавитном порядке. Никакое слово в словаре не встречается дважды. Длина каждого слова не превосходит 10 символов.
Далее вводится число M — количество нажатий клавиш (1≤M≤20000). Затем задается M разделяющихся пробелами чисел, описывающих нажатые клавиши. Последней нажатой клавишей всегда является клавиша "1".
Выходные данные
Выведите одну строку — текст, который оказался введен пользователем. Пробел после последнего введенного слова также должен быть выведен.
Примечание:
2
a
z
2
5 1 |
Примечание: в этом примере выходной файл должен быть создан, но должен быть пустым, в частности, в него не нужно выводить пробел |
| |
|
|
Тильда-омега-лямбда-исчисление
Конечные автоматы
Строки
Тильда-омега-лямбда-исчисление - ещё более инновационная разработка "British Scientists, Inc" в сфере функционального программирования. Его отличие от омега-лямбда-исчисления только в возможности ставить квадратные и фигурные скобки. Планировались также скобки в форме слоников, но стандарт ЮНИКОД у компании изменить не получилось.
На вход подаётся тильда-омега-лямбда-выражение длиной не более 10^7 символов. Нужно вывести результат его тильда-иззи-редукции, работающей так же, как и иззи-редукция для омега-лямбда-выражений, но с учётом квадратных и фигурных скобок.
Напомним, иззи-редукция - одна из операций над такими выражениями. При её выполнении проверяется, является ли скобочная последовательность в выражении правильной. Термы при этом игнорируются. Если последовательность правильная - она превращается в терм gg, если нет - в терм wp.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
main{izzy[lol](ttt)} |
gg |
| |
|