Розминка: Regex, папір, ножиці
Це виклик, який я спочатку хотів поставити перед тим, як зрозуміти, що існує дуже коротке рішення. Тим не менш, над проблемою можна подумати над підготовкою до наступного виклику.
Напишіть три режекси R , P і S таким чином, щоб вони відповідали один одному в циклічному режимі Rock, Paper, Scissors. Зокрема, R відповідає S , S відповідає Р і Р відповідає R , але R НЕ відповідає P , S НЕ відповідає R і Р не збігається з S . Ось зручний стіл:
Regex Matches Doesn't match
R S P
P R S
S P R
Не має значення, що R , P і S роблять на будь-яких інших входах, включаючи себе.
Ось, сірник просто означає, що деякі (можливо, порожні) підрядки вводу. Матч не повинен охоплювати весь вхід.
Завдання: Regex, папір, ножиці, ящірка, спок
Для цього ви вирішите більш жорстку версію вищезазначеної проблеми на основі варіанту RPS Рок, Папір, Ножиці, Ящірка, Спок (як популяризує Теорія великого вибуху ). У RPSLV є п'ять різних символів, які б'ють один одного за два цикли:
- Рок → Ножиці → Ящірка → Папір → Спок → Рок
- Рок → Ящірка → Спок → Ножиці → Папір → Рок
Ви повинні написати п’ять регексів R , P , S , L і V, які імітують цю структуру, коли вони даються один одному як вхідні дані. Ось відповідна таблиця:
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
Просто щоб бути ясно, ви повинні НЕ відповідати рядку R
, P
і т.д., але і інші регулярні вирази. Наприклад, якщо ваш регекс R є, ^\w$
наприклад, P і V повинні відповідати рядку ^\w$
, тоді як S і L не повинні.
Знову ж таки, матч просто означає, що принаймні одна (можливо, порожня) підрядка вводу збігається. Матч не повинен охоплювати весь вхід. Наприклад, \b
(слово межа) відповідає hello
(на початку та в кінці), але воно не відповідає (^,^)
.
Ви можете використовувати будь-який аромат регексу, але, будь ласка, вкажіть вибір у своїй відповіді та, якщо можливо, наведіть посилання на онлайн-тестер для обраного аромату. Ви не можете використовувати функції регулярного вираження, які дозволяють викликати код на мові хоста flavour (наприклад, e
модифікатор Perl flavour).
Розмежувачі (на зразок /regex/
) не включаються в регулярний вираз, коли їх подано як вхід до іншого, і ви не можете використовувати модифікатори, які знаходяться поза регулярним виразом. Деякі аромати все ще дозволяють використовувати модифікатори з вбудованим синтаксисом (?s)
.
Ваш бал - це сума довжин п’яти регулярних виразів у байтах. Нижній краще.
Виявляється, що набагато простіше знайти в робоче рішення цієї проблеми , ніж це може здатися на перший, але я сподіваюся , що знайти оптимальне рішення досить складно.
\b
(межа межі слова) hello
(на початку та в кінці), але це не відповідає (^,^)
".