В каждой задаче нужно реализовать на языке C++ или Python некоторый алго- ритм обработки регулярных выражений. В каждой задаче аргументами являются строка в алфавите {a, b, c, 1, ., +, ∗}, а также некоторые дополнительные параметры. Если задача предполагает ответ “да/нет”, то необходимо вывести yes в случае поло- жительного ответа и no — в случае отрицательного. В случае, если ответ является целым числом или словом, необходимо вывести это число или слово. В случае, если таких числа или слова не существует, необходимо вывести INF. В случае, если вход- ная строка не является корректным регулярным выражением в обратной польской записи, необходимо выдать сообщение error об ошибке. Дополнительные случаи оговорены непосредственно при формулировке задачи. В дальнейшем предполагается, что первым компонентом входа является регулярное выражение α в обратной польской записи, задающее язык L.
Вариант 9.
Даны α, буква x и натуральное число k. Вывести длину кратчайшего слова из языка L, содержащего подслово x^k
Тесты
-
ab+c.aba.∗.bac.+.+∗ b 2
Ответ: 4
-
acb..bab.c.∗.ab.ba.+.+ ∗a. b 3
Ответ: 7
- Считываение регулярного выражения в обратной польской нотации
- Создании структуры данных, отражающее это выражение
- Постоение детерминированного конечного автомата с эпсилон переходами
- Детерминизация конечного автомата
- Поиск в ДКА все подслов вида sym**power
- BFS от последней вершины подпоследовательности до ближайшей завершающей
- DFS от начальной до первой из последовательности
- Взятие минимума
- Ответ
Запуск п проверка покрытия (95 %)
python3 -m pytest --cov=regexparser tests