Сегодня ваша задача - создать все возможные полные скобки выражения.
Ваш ввод представляет собой одну строку ASCII для печати, содержащую один или несколько терминов, разделенных операторами. Ввод также может содержать пробелы - вы должны их игнорировать. Термин есть [a-zA-Z0-9]
, оператор есть [^ ()a-zA-Z0-9]
. Вы можете предположить, что ввод всегда действителен.
Выведите все возможные способы полностью заключить в скобки данное выражение, разделенные символами новой строки с необязательным завершающим символом новой строки.
Есть не :
- Условия в скобках - только операторы в скобках.
- Изменить порядок условий.
- Выведите любые пробелы.
Пример ввода / вывода:
N
N
a * b
(a*b)
x_x_0
(x_(x_0))
((x_x)_0)
a * b|c|d
(a*(b|(c|d)))
(a*((b|c)|d))
((a*b)|(c|d))
((a*(b|c))|d)
(((a*b)|c)|d)
Наименьший код в байтах побеждает.
!
ли оператор? Как насчет↑
?!
подходит регулярное выражение, так что делает↑
, однако ,↑
не может быть частью входа , потому что это не для печати ASCII.Ответы:
Pyth, 38 байт
Попробуйте онлайн.
Он определяет рекурсивную функцию, которая:
Затем вызывается функция с удаленной строкой с удаленными пробелами, а результаты объединяются переносами строк.
источник
JavaScript (ES6),
208197 байтобъяснение
Использует рекурсивную функцию, которая принимает массив
[ t, o, t, o, etc... ]
и заключает в скобки каждую последовательную пару из двух слагаемых вместе, как[ (tot), o, etc... ]
и повторяет этот процесс, пока в массиве только один элемент, а затем отфильтровывает дублирующиеся значения.Тест
Показать фрагмент кода
источник