Напишите программу, которая принимает (через стандартный ввод или командную строку) строку с рекурсивной формой
PREFIX[SUFFIXES]
где
PREFIX
может быть любой строкой строчных букв (az), включая пустую строку, иSUFFIXES
может быть любой последовательностью строк сPREFIX[SUFFIXES]
объединенной вместе рекурсивной формой , включая пустую последовательность.
Создайте список строчных буквенных символов из входных данных, рекурсивно оценивая список строк в каждом из суффиксов и добавляя их к префиксу. Вывод для вывода строк в этом списке в любом порядке, по одному на строку (плюс необязательный завершающий перевод строки).
пример
Если вход
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
то префикс
cat
и и суффиксыs[up[][]]
,[]
,ch[e[r[]s[]]]
, иa[maran[]comb[]pult[[]ing[]]]
. Каждый суффикс имеет свой собственный префикс и суффиксы по очереди.На выходе будут эти 9 слов в любом порядке
catsup cats cat catcher catches catamaran catacomb catapult catapulting
потому что вход кодирует это дерево
и каждое из 9 выходных слов может быть сформировано путем обхода дерева от корня до листа.
Примечания
Помните, что префикс может быть пустой строкой, поэтому что-то вроде
[donut[][]cruller[]]
допустимый вход, выход которого будет (в любом порядке)
donut cruller
где пустая строка для пустой строки, которой соответствует второй суффикс.
Последовательность суффиксов также может быть пустой, поэтому тривиальный регистр ввода
[]
имеет одну пустую строку в качестве вывода:
- Вы можете предположить, что ввод будет производить только уникальные выходные слова.
- Например
hat[s[]ter[]s[]]
, будет неправильный ввод, потому чтоhats
кодируется дважды. - Точно так же
[[][]]
недопустимо, потому что пустая строка кодируется дважды.
- Например
- Вы не можете предполагать, что ввод является настолько коротким или сжатым, насколько это возможно.
- Например,
'e'
узел в главном примере выше может быть объединен с'ch'
узлом, но это не значит, что ввод неверен. - Точно так же
[[[[[]]]]]
допустимо, несмотря на то, что только пустая строка кодируется неоптимальным способом.
- Например,
- Вместо программы вы можете написать функцию, которая принимает входную строку в качестве аргумента и печатает вывод нормально или возвращает ее в виде строки или списка.
Самый короткий код в байтах побеждает.