Соревнование
Если задано правильное регулярное выражение, выведите регулярное выражение, которое соответствует тому же набору строк, но в обратном порядке.
Задание
Эта задача использует самые основные операции регулярных выражений: ^
, $
, ?
, +
, *
, []
, {}
, |
. Нет такой вещи как группы захвата или что-то из этого сложного материала. Специальные символы могут быть экранированы.
Пример ввода / вывода
Примечание: неверный ввод никогда не будет дан, и обычно есть несколько возможных ответов для данного ввода!
Input | Sample Output
-----------|-------------
abc | cba
tuv? | v?ut
a(b|c) | (c|b)a
1[23] | [23]1
a([bc]|cd) | (dc|[bc])a
^a[^bc]d$ | ^d[^bc]a$
x[yz]{1,2} | [yz]{1,2}x
p{2} | p{2}
q{7,} | q{7,}
\[c[de] | [de]c\[
ab[c | <output undefined>
a(?bc) | <output undefined>
a[]]bc | <output undefined>
демонстрация
Рабочая демонстрация , демонстрирующая правильные входы / выходы. Это имеет некоторую дополнительную логику для проверки входных данных, которые не нужны в реальном ответе. Считайте неверные входные данные неопределенным поведением.
конкретика
Для простоты все специальные символы либо имеют свое особое значение, либо экранируются; это [[]
не диапазон символов для [
. Диапазоны длин взяты из стандартных PREIX ERE; то есть {n}
, {n,}
и {n,m}
поддерживаются. Диапазоны символов []
и [^]
поддерживаются. Из-за этих правил, и поскольку недопустимые входные данные не заданы, вам действительно нужно только скопировать их содержимое непосредственно в выходные данные. Наконец, жадность не имеет значения, т. Е. Не имеет значения, если обратное регулярное выражение сначала находит другое совпадение, просто нужно найти совпадение для того же набора строк.
счет
Побеждает самая маленькая программа в байтах (за исключением мошенничества, например сетевых запросов). Программа может использовать реальный ввод-вывод или просто определить функцию.
?
привязывать. Попробуйте набрать/a(?bc)/
в консоли браузера.(^a|b)(c$|d)
тестового примера.(a)?(b)+
Е.(b)+(a)?
?()
, что используется в вашем примере.Ответы:
Сетчатка ,
136114110 байтЭй, черт возьми, я слышал, что вы как регулярное выражение ...
Где
<empty>
представляет собой пустую висячую строку. Запустите код из одного файла с-s
флагом.... когда вы хотите отменить регулярное выражение, вы должны использовать регулярное выражение. Когда вы хотите использовать регулярные выражения, вы должны использовать язык программирования на основе регулярных выражений.
Этот код предполагает , что вход не содержит ни ,
;
ни ,!
ни пространство. Хотя я согласен с тем, что это довольно сильное и потенциально неверное предположение, вы можете заменить эти три в коде на любые три непечатаемых символа (например, нулевые байты, символ колокольчика,<DEL>
назовите его), и это не повлияет на размер или функциональность кода. вообще.Я добавлю объяснение, когда я закончу играть в гольф.
источник
]]]
, так или иначе, этот ответ не требует особых изменений.)JavaScript ES6, 574 байта
Я, вероятно, могу удалить несколько
var
заявлений.JS ES6, непроверенный, 559 байтов
Буду тестировать дома.
JavaScript ES5, ungolfed, 961 байт
источник
JavaScript ES6, 343 байта
Оригинальный код (функции, но без
prompt
):Код реализован как рекурсивный синтаксический анализатор сверху вниз, поэтому он может вызвать переполнение стека при глубоко вложенном вводе.
Код может вызвать бесконечный цикл в недопустимых случаях, так как я не проверяю их, пользуясь предложением «неопределенное поведение».
источник
Python 3, 144 байта
(Этот не поддерживает квалификаторы в такой группе, как
(a)+(b)*(cde)?
.)Тестовые случаи:
Результат:
источник