To pytanie jest w dużej mierze oparte na tym pytaniu , ale powinno stanowić szereg dodatkowych trudności.
Twoje zadanie
Musisz napisać program lub funkcję, która po otrzymaniu ciągu wypisze wszystkie możliwe anagramy. Na potrzeby tego pytania anagram jest ciągiem zawierającym ten sam znak, co ciąg oryginalny, ale nie jest ciągiem oryginalnym. Podanagram jest anagramem podciągu wprowadzonego ciągu. Anagramy i podanagramy nie muszą być ani zawierać rzeczywistych słów.
Wejście
Możesz zaakceptować ciąg znaków, który może mieć dowolną długość> 0, dowolną standardową metodą wprowadzania. Może zawierać dowolne znaki ASCII.
Wynik
Możesz wyprowadzić wszystkie możliwe anagramy i podanagramy wprowadzonego ciągu w dowolny standardowy sposób. Nie wolno wyprowadzać tego samego ciągu dwa razy ani wyprowadzać ciągu równego wejściu.
Inne zasady
Standardowe luki są niedozwolone
Punktacja
To jest golf golfowy , najmniej bajtów wygrywa.
Odpowiedzi:
05AB1E , 7 bajtów
Funkcja, która przyjmuje ciąg znaków z wejścia i pozostawia listę ciągów na stosie. Jako pełny program drukowana jest reprezentacja listy.
Wypróbuj online!
W jaki sposób?
źródło
Brachylog (2), 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
(v2)
.Galaretka , 9 bajtów
Monadyczny link akceptujący listę i zwracający listę wszystkich odrębnych podanagramów z wyjątkiem samego wejścia.
Wypróbuj online! (stopka ładnie drukuje wynikową listę, łącząc się z nowymi liniami).
W jaki sposób?
źródło
Pyth, 12
Test online .
źródło
Japt , 10 bajtów
Wypróbuj online!
Muszę użyć
à
,á
iâ
wszystko w jednej odpowiedzi, również w porządku. Co za zbieg okoliczności...Wyjaśnienie
źródło
Mathematica, 60 bajtów
Permutations
pobiera opcjonalny argument liczbowy, który informuje, ile wartości wejściowych należy zastosować do permutacji. Jeśli podamy mu długość danych wejściowych, wygeneruje permutacje dla wszystkich podzbiorów danych wejściowych bez duplikatów. Wszystko, co musimy zrobić, to usunąć dane wejściowe.źródło
Java 8,
313312306 bajtówZmodyfikowana wersja mojej odpowiedzi tutaj , gdzie
p("",s,l);
została zastąpionafor(int z=s.length(),i=0,j;i<z;i++)for(j=i;j<z;p("",s.substring(i,j+++1),l));
-6 bajtów dzięki @ OlivierGrégoire w mojej połączonej odpowiedzi.
Wyjaśnienie tej części:
Wypróbuj tutaj.
źródło
Perl 6 , 75 bajtów
Spróbuj
Rozszerzony:
źródło