Ваша задача - создать программу, которая определяет, является ли данная строка допустимым регулярным выражением или не использует фрагменты кода, полученные из сайтов в сети StackExchange.
Для целей этой задачи, регулярное выражение говор будет урезанная и в основном минимальный набор мета-символов: ()*?|\
. Таким образом, вы не сможете использовать встроенные парсеры регулярных выражений.
\
используется для экранирования метасимволов. За ним должен следовать метасимвол.- Неэкранированные скобки должны быть сбалансированы
*
и?
должен предшествовать либо не-метасимвол, либо группа в скобках, либо экранированный метасимвол.- Все другие печатаемые символы ASCII, а также символы новой строки, табуляции и пробела должны поддерживаться как неметачные символы. Что происходит со строкой, содержащей другие символы, не определено.
- Фактическое значение регулярного выражения не имеет значения для этой задачи.
Примеры
Truthy:
abc
a?
(a|)*
()
a|b*
\*
\\
\\*
a*b?(cd|e)
+
[
}
(123\))*
\|
(a(b(c|d)*e)*f)*
(|\)*)
(abc)+*
(abc)+
+abc
^ last test case is an actual newline
Falsy:
?abc
*
**
\
(
a*?
a?*
?
a)
(\)
(|\)*
\()
|*
(?:abc)
\\**
\n
счет
Ваш общий балл - это количество фрагментов, взятых из вопросов и ответов вокруг StackExchange.
- Повторные фрагменты учитываются столько раз, сколько они используются.
- Пробелы могут быть добавлены и удалены свободно (из-за Python, Haskell и других языков, чувствительных к пробелам) и не учитываются при подсчете количества фрагментов.
- Исключением будет, если ваш код действительно написан в Whitespace .
- Фрагменты разрешены с любого сайта StackExchange, если они исходят из более старых вопросов, ответов и комментариев (в том числе по времени редактирования - при необходимости используйте более старые ревизии), чем это испытание. (24 сентября 2019 г., 15:30 по Гринвичу)
- Фрагменты могут поступать из любого места в теле вопроса, ответа или комментария, независимо от того, находится ли он в предварительно отформатированном блоке кода или нет.
- Соединение фрагмента в середине другого приводит к тому, что внешний фрагмент считается как два фрагмента.
Самый низкий балл побеждает!