Ваше завдання - скласти регекси ..., вказавши підстановку для кожного символу в регулярному виразі.
Регекси
Регекси підтримують це
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Чому лише 1 або 0? Це для спрощення. Таким чином, регулярний вираз має лише такі символи:
*()|10
Він тлумачиться так:
*
є зірка Клейна (повторити ліву групу або буквально 0 і більше разів).|
- це чергування (збігається, якщо регекс ліворуч або регекс праворуч відповідає).()
є групуванням.1
відповідає символу 1.0
відповідає символу 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