Напишите программу, которая принимает (через стандартный ввод или командную строку) строку с рекурсивной формой
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'
узлом, но это не значит, что ввод неверен. - Точно так же
[[[[[]]]]]
допустимо, несмотря на то, что только пустая строка кодируется неоптимальным способом.
- Например,
- Вместо программы вы можете написать функцию, которая принимает входную строку в качестве аргумента и печатает вывод нормально или возвращает ее в виде строки или списка.
Самый короткий код в байтах побеждает.
источник
(a,(_:t))
может быть(a,_:t)
вместо этогоJava, 206 байт
Определяет функцию, которая принимает строку в качестве аргумента и возвращает список строк. Для дополнительного бонуса он возвращает строки в том же порядке, что и вопрос.
Пример использования:
Expanded:
Я добавлю объяснение завтра.
источник
Питон, 212 символов
Я надеялся получить под 200, но все же я очень доволен этим.
источник
Javascript ES6, 142 байта
источник
Q: 70 байт
определяет функцию f, которая принимает строку и возвращает список строк (слов)
Как лямбда (анонимная функция) мы отбрасываем первые 2 символа f :, поэтому длина составляет 68 байт.
Тестовое задание
( «Кетчуп», «кошки», «кошки», «зрелище», «ловит», «катамаран», «катакомбы», «катапульта», «выстреливает»)
( "Бублик"; ""; "Cruller")
, ""
Примечания
, "" указывает на список строк, который содержит только пустую строку
Символы атомарные. Выдвинуть / сложить символ в стеке - это простая операция, на которую не влияет длина символа (см. Пояснение).
объяснение
Q - двоюродный брат APL (kx.com)
псевдокод:
источник
Кобра - 181
источник