Pomimo otagowania 17 pytań anagramami , nadal nie mamy tego pytania, więc oto jest.
Twoje zadanie
Musisz napisać program lub funkcję, która po otrzymaniu ciągu wypisze wszystkie możliwe anagramy. Na potrzeby tego pytania anagram to ciąg znaków, który zawiera ten sam znak, co ciąg oryginalny, ale nie jest dokładną kopią ciągu oryginalnego. Anagram nie musi 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 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 , 3 bajty
Funkcja, która pozostawia stos z listą anagramów na górze (i jako jedyny element). Jako pełny program drukuje reprezentację tej listy.
Wypróbuj online!
W jaki sposób?
źródło
Rubinowy , 45 bajtów
Wypróbuj online!
Pomimo wbudowanego słowa „permutacja” jest naprawdę długie :(
źródło
|[]
Wydaje się niepotrzebne?|[]
jest krótszy niż.uniq
.MATL , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
pyth ,
84Test online .
źródło
Japt , 6 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Haskell,
4840 bajtówWypróbuj online!
Zaoszczędzono 8 bajtów dzięki wskazówce Leo
tail
.źródło
tail
zamiastdelete x
, ponieważ oryginalny ciąg zawsze będzie na pierwszym miejscu na liście permutacji. Umożliwi to przejście do rozwiązania bez punktów, a następnie do nienazwanej funkcji, wiele bajtów do zapisania!CJam , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 47 bajtów
źródło
StringJoin/@Rest@Permutations@Characters@#&
ma 43 bajty.Galaretka , 4 bajty
Monadyczny link pobierający listę znaków i zwracający listę list znaków - wszystkie odrębne anagramy, które nie są równe wejściowi.
Wypróbuj online!(stopka tworzy program, który dołącza do listy za pomocą nowego wiersza i drukuje, aby uniknąć w innym przypadku rozbicia reprezentacji).
W jaki sposób?
źródło
Y
jeśli funkcje były dozwolone ... Widzę, że właśnie odwróciłem moją edycję do pytania: /Python 3,
857663 bajtówJako funkcja i zwracanie ciągów znaków jako listy znaków (dzięki @ pizzapants184 za poinformowanie mnie, że jest dozwolone):
Jako funkcja:
85 bajtów jako pełny program:
Można to nieco zmniejszyć, jeśli wypuszczanie ciągów znaków („a”, „b”, „c”) jest dozwolone (nie jestem pewien, czy tak jest).
źródło
Java 8,
245239237 bajtów-6 bajtów dzięki @ OlivierGrégoire .
Typowa pełna Java. Widzę dużo <10 bajtowych odpowiedzi, a oto jestem z ponad 200 bajtami. XD
Wyjaśnienie:
Wypróbuj tutaj.
źródło
l.forEach(System.out::println);
zamiast pętli drukowania. Nie lubię teżSet
być definiowanym na poziomie klasy bez klasy zamykającej, lambda zdefiniowała, że nikt nie wie, gdzie i jaką metodę. To po prostu za dużo dla mnie. Rozumiem, że import jest oddzielony od reszty, ale nie ma tam nic samodzielnego, wygląda bardziej jak zbiór fragmentów niż cokolwiek innego. Przepraszam, ale po raz pierwszy w PCG podaję -1 :(forEach
. Jeśli chodzi o poziom klasySet
, jaka jest alternatywa? Opublikować całą klasę, w tym główną metodę? Opublikować całą klasę z wyjątkiem metody głównej, ale włączając samą klasę, interfejs i nazwę funkcji?public static void main
, wystarczy powiedzieć „metodą wprowadzania jest ...”. Chodzi o to, że twoja obecna odpowiedź łamie wszystkie „samodzielne” reguły. Nie jestem przeciwny wiązaniu zasad, ale łamaniu? Tak, mam na myśli :(Perl 6 ,
3938 bajtówSpróbuj
Spróbuj
Rozszerzony
źródło
C ++, 142 bajty
bez golfa
źródło
K (oK) , 13 bajtów
Rozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Ocena jest przeprowadzana od prawej do lewej.
źródło
JavaScript (ES6), 101 bajtów
Przyjęte z mojej poprzedniej odpowiedzi .
Pokaż fragment kodu
źródło
Perl 5 , 89 + 2 (
-F
) = 91 bajtówWypróbuj online!
źródło