Олимпиадный тренинг

Задача . Чья маска? (2023-2024, 9-10)


Задача

Темы:
Сэм изучает регулярные выражения. Чтобы применить полученные знания, он написал параметризованный скрипт для поиска файла по маске. Маска задаётся в виде регулярного выражения. В качестве значений параметров могут быть использованы числа или заглавные буквы английского алфавита.
Скрипт имеет следующие параметры:
1. Искать в только текущей папке или в ней и её подпапках (передаётся значение C для поиска в текущей
папке и S для поиска в ней и подпапках)
2. Если поиск осуществляется в подпапках, то какая максимальная глубина поиска (натуральное число - если
глубина ограничена, буква A – если ограничения нет; число 1 соответствует поиску только в текущей
папке)
3. После скольки совпадений остановить поиск (натуральное число - если необходимо ограничить число
найденных совпадений, буква A – если ограничения нет). В случае, если не удастся найти заданное число
совпадений, будут показаны те, что удалось найти.
4. Регулярное выражение, по которому осуществляется поиск. Формат регулярного выражения описан ниже.

Для задания регулярных выражений приняты следующие обозначения:
с Любой неспециальный символ с соответствует самому себе. Специальными символами будем считать
только символы [, ], {, }, *, +, -, ? – эти символы не могут по условию данной задачи встретится в тексте.
 [...]  Любой символ из ...; допустимы диапазоны типа а-z (последовательно идущие символы в алфавите);
возможно объединение диапазонов, например [a-z0-9] и сочетание диапазонов и отдельных символов [a-z0-9~#].
r* Ноль или более вхождений символа , может применяться и для диапазонов, например [a-z#]* означает ноль
или более вхождений любых символов из диапазона от a до z или символа # в любом порядке.
r+ Одно или более вхождений символа , может применяться и для диапазонов, например [a-z>]+ означает одно
или более вхождений любых символов из диапазона от a до z или символа > в любом порядке.
 r? Ноль или одно вхождение символа , может применяться и для диапазонов, например [a-z@]? означает ноль
или одно вхождение любого символа из диапазона от a до z или символа @.
r1r2 За символом или диапазоном 1 следует символ или диапазон 2.
{ } Число вхождений предыдущего выражения. Например, выражение [0-9]{5} соответствует подстроке из пяти
десятичных цифр.
^ Символ начала строки. Регулярное выражение должно начинаться с этого символа.
$ Символ конца строки. Регулярное выражение должно заканчиваться этим символом.

Пример: регулярное выражение ^a+[a-z]{5}.[0-9]*$ позволяет найти все последовательности символов, которые
начинаются с одного или нескольких символов a, после которых идут ровно 5 маленьких латинских букв, затем точка и
затем может следовать любое количество (в том числе ноль) арабских цифр.

Фрагмент файловой системы, на котором он проверял скрипт выглядит следующим образом:
 
folder1 folder2 folder3 folder4 folder5
folder2 folder3 folder5 vhs.exe balloon.mp4
baobab.png folder4 bavaria.mov qsort.cpp bunny_baks.jpg
abba_song.mp3 blablacar.zip baldurs.mp4 mergesort.java abcabcabc.doc
albania.zip lalaland.mov black.png algorythm.java  
the_abs.doc absolute.cpp band.png sort_algo.jar  
car_ab.jpg     alter_ego_a.mp4  
vabadab.doc     tart.zip  
the_asbolute.mov     alter_ego_b.mp4  

В первой строке каждого столбца указано название папки, далее – её содержимое. Все элементы с названием folder*, где * является числом, являются папками. В момент запуска скрипта обработка начинается с содержимого folder1 в алфавитном порядке. Сначала скрипт проверяет файлы, затем содержимое подпапок. В случае нескольких подпапок они также проверяются в алфавитном порядке.
Скрипт был запущен с параметрами S, 2, 5 и некоторым регулярным выражением и вывел следующий результат:
albania.zip
abba_song.mp3
baobab.png
car_ab.jpg
the_abs.doc
Определите, какие из представленных регулярных выражений могли быть использованы:
1. ^[a-z_]*a[a-z_]*a[a-z0-9.]*$
2. ^a[a-z]*$
3. ^[a-z_]*a[a-z0-9._]*$
4. ^[a-z0-9._]{6}[a-z0-9._]*$
5. ^[a-z_]*a[a-z.]*$
6. ^[a-z0-9._]+$
7. ^[a-z_]*a[a-z0-9]*$
В ответ запишите через пробел в порядке возрастания номера всех регулярных выражений, которые могли обеспечить подобный результат.

Примечание: Глубиной поиска в файловой системе называют число папок в пути от корневой до текущей, включая корень. Например, глубина поиска в корневой папке – 1, т.к. путь до неё содержит всего одну папку – её саму. Если текущая папка лежит в корневой папке – её глубина равна 2, и так далее. Количеством совпадений (количеством результатов поиска) называют число найденных файлов, которые удовлетворяют условиям поиска

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя