Ваша задача состоит в том, чтобы скомпилировать регулярные выражения ..., указав замену для каждого символа в регулярном выражении.
Регулярные выражения
Регулярные выражения поддерживают эти
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Почему только 1 или 0? Это для упрощения. Таким образом, регулярное выражение имеет только следующие символы:
*()|10
Это интерпретируется следующим образом:
*
является звездой Клини (повторите левую группу или буквальный 0 или более раз).|
является чередованием (совпадать, если регулярное выражение слева или регулярное выражение справа).()
группировка.1
соответствует персонажу 10
соответствует символу 0.
Как скомпилировать?
Вы указываете шесть фрагментов кода: по одному для замены каждого символа регулярного выражения. Например, если ваш ответ:
*
:FSAGFSDVADFS
|
:GSDGSAG
(
:GSDG
)
:GDSIH
1
:RGIHAIGH
0
:GIHEBN
Затем вы заменяете каждое регулярное выражение соответствующим фрагментом кода, поэтому:
(0|11)*
превращается в:
GSDGGIHEBNGSDGSAGRGIHAIGHRGIHAIGHGDSIHFSAGFSDVADFS
Что должна делать итоговая программа?
Ваша программа будет:
- Возьмите вход.
- Выведите истинное значение, если регулярное выражение соответствует целому вводу.
- В противном случае выведите ложное значение.
Вход за пределами 01
заключен в неопределенное поведение. Ввод может быть пустым.
Дополнительные правила
- Для заданного символа регулярного выражения полученный фрагмент всегда должен быть одинаковым.
- После этого префикс или суффиксный символ не добавляются.
- Регулярное выражение гарантированно не пусто.
счет
Наименее комбинированный фрагмент - победитель. Таким образом, оценка для примера будет рассчитываться следующим образом:
FSAGFSDVADFS
+ GSDGSAG
+ GSDG
+ GDSIH
+ RGIHAIGH
+GIHEBN
12 + 7 + 4 + 5 + 8 + 6 = 42