Этот вопрос в значительной степени основан на этом вопросе , но должен создать ряд дополнительных трудностей.
Твое задание
Вы должны написать программу или функцию, которая при получении строки распечатывает все возможные ее анаграммы. Для целей этого вопроса анаграмма - это строка, которая содержит тот же символ, что и исходная строка, но не является исходной строкой. Поданаграмма - это анаграмма подстроки введенной строки. Анаграммы и субанаграммы не должны быть или содержать реальные слова.
вход
Вы можете принять строку, которая может иметь любую длину> 0, любым стандартным методом ввода. Он может содержать любые символы ASCII.
Выход
Вы можете вывести все возможные анаграммы и субанаграммы введенной строки любым стандартным способом. Вы не должны выводить одну и ту же строку дважды или выводить строку, равную вводу.
Другие правила
Стандартные лазейки запрещены
счет
Это код-гольф , выигрывает минимум байтов.
источник
Ответы:
05AB1E , 7 байтов
Функция, которая принимает строку из ввода и оставляет список строк в стеке. В качестве полной программы выводится список списка.
Попробуйте онлайн!
Как?
источник
Брахилог (2), 7 байт
Попробуйте онлайн!
объяснение
источник
(v2)
.Желе , 9 байт
Монадическая ссылка, принимающая список и возвращающая список всех отдельных субанаграмм, кроме самого ввода.
Попробуйте онлайн! (нижний колонтитул довольно печатает результирующий список, соединяясь с новыми строками.)
Как?
источник
Пиф, 12
Интернет тест .
источник
Japt , 10 байт
Попробуйте онлайн!
Я должен использовать
à
,á
иâ
все в одном ответе, по порядку тоже. Какое совпадение...объяснение
источник
Mathematica, 60 байт
Permutations
принимает необязательный числовой аргумент, который сообщает ему, сколько входных значений использовать для перестановок. Если мы дадим ему длину ввода, он сгенерирует перестановки для всех подмножеств ввода без дубликатов. Все, что нам нужно сделать, это удалить вход.источник
Java 8,
313312306 байтМодифицированная версия моего ответа здесь , где
p("",s,l);
была заменена наfor(int z=s.length(),i=0,j;i<z;i++)for(j=i;j<z;p("",s.substring(i,j+++1),l));
-6 байт благодаря @ OlivierGrégoire в моем связанном ответе.
Объяснение этой части:
Попробуй это здесь.
источник
Perl 6 , 75 байт
Попытайся
Expanded:
источник