Zadanie
Twoim celem, jeśli zdecydujesz się go zaakceptować, jest napisanie programu, który, biorąc pod uwagę ciąg wejściowy (lub tablicę znaków), wypisze każdą możliwą permutację liter w tym ciągu. Moje wyniki są wybredne, więc należy je sortować alfabetycznie, bez duplikatów.
Przykład:
Wkład: buzz
Wydajność:
buzz
bzuz
bzzu
ubzz
uzbz
uzzb
zbuz
zbzu
zubz
zuzb
zzbu
zzub
Zasady
- To jest golf golfowy, więc wygrywa najkrótszy kod.
- Końcowe spacje w każdej / dowolnej linii są prawidłowe
- Pojedynczy nowy wiersz po ostatnim wierszu jest dozwolony (ale nie więcej)
code-golf
string
permutations
Brian Gradin
źródło
źródło
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]
?N*
dop
) :-)Odpowiedzi:
Galaretka , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E ,
43 bajtyZaktualizowano, ponieważ aktualizacja
œ
złamała starą wersję,która również zapisała bajt, jak sugeruje Magic Octopus Urn .
Wypróbuj online!
Wyjaśnienie
źródło
œê»
jest w porządku w przypadku braku dziedzictwa.œ
teraz zwraca listę ciągów w obu.MATL , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Python 3.5, 79 bajtów
Funkcja, która przyjmuje dane wejściowe jako listę znaków i dane wyjściowe podczas drukowania.
Rekurencyjnie dokonuje każdej wyraźnej permutacji, usuwając każdy możliwy następny znak alfabetycznie z pozostałych odrębnych znaków i dołączając go do tworzonego wyniku
w
. Następnie cofamy się z usuniętą postacią. Po opróżnieniu wejścia drukujemyw
.źródło
CJam , 5 bajtów
Dzięki @EriktheOutgolfer za korektę (
q
zamiastr
)Wypróbuj online!
Wyjaśnienie
źródło
Pyth - 5 bajtów
Wypróbuj online tutaj .
źródło
S
naprawdę jest potrzebny?Haskell, 46 bajtów
2 bajty zapisane dzięki nim
źródło
f=
.J, 19 bajtów
Przypadek testowy
Wyjaśnienie
To jest 4 pociąg:
Gruntownie:
źródło
[:~.i.@!@#A./:~
powinienem zaoszczędzić kilka bajtówJavaScript (Firefox 30+),
129124 bajtówNieźle jak na język bez wbudowanych permutacji ...
źródło
Python 3.5, 81 bajtów:
Naprawdę ... 81 bajtów, gdy następna najdłuższa odpowiedź to 48 bajtów ... westchnienie . Cóż, spróbuję tego golfa bardziej, jak potrafię, ale wskazówki dotyczące gry w golfa są nadal bardzo mile widziane.
Oto też najkrótsze rozwiązanie, jakie udało mi się uzyskać w Pythonie 2 o wielkości 86 bajtów :
Najwyraźniej w Pythonie 2
[*...]
zwraca aSyntax Error
, a skoropermutations
zwracaitertools.permutations object at 0x...
, kolejnym najkrótszym sposobem (jaki znam) wyodrębnienia unikatowych permutacji jest użycie{''.join(i)for i in permutations(f)}
gdzief
jest łańcuchem wejściowym.Na koniec zauważ, że są to obie funkcje lambda i dlatego muszą być wywoływane w formacie
print(<Function Name>(<Input String>))
.źródło
Mathematica,
3423 bajtówDane wejściowe muszą być listą znaków.
Wyjaśnienie
Znajdź wszystkie permutacje danych wejściowych, posortowane i wolne od duplikatów.
Wydrukuj je jeden po drugim.
źródło
Brachylog , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 ,
4944 bajtówCiąg jako dane wejściowe
Lista znaków jako dane wejściowe
Rozszerzony
źródło
#perl6
kanale freenode.net .».say
zamiast.map: *.put
».say
dozwolone jest wykonywanie ich w dowolnej kolejności, a kiedyś zostało to celowo wykonane poza kolejnością.Brachylog (v2), 5 bajtów
Wypróbuj online!
Znajdź
ᵘ
niquep
ermutations wejściowych, so
rt nichᵐ
apẉ
riteln (zapis z nowej linii) nad tej tablicy.źródło
Python 3,
7785 bajtówTeraz sortuje!
źródło
from itertools import*
inaczejimport itertools as i
. Możesz zapisać bajt, zastępująci.permutations
gopermutations
.{*...}
zamiastset(...)
oszczędza dwa dodatkowe bajty.PowerShell v3 +, 171 bajtów
Program PowerShell v3 wprowadził
-Unique
flagę wSort-Object
cmdletu, więc jest o kilka bajtów krótszy niż wersja v2 poniżej, ponieważ nie musimy tego robićSelect
najpierw.wersja v2, 178 bajtów:
PowerShell nie ma żadnych wbudowanych permutacji, więc pożyczyłem swój kod od znajomych Factor i nieco go poprawiłem, aby używał go tutaj.
To w zasadzie trzy części, które rozwinę poniżej.
param([char[]]$x)$a,$b=$x;$a=,$a
Pobiera dane wejściowe$x
, rzuca je jakochar
tablicę, usuwa pierwszą literę do,$a
a resztę do$b
, a następnie przekształca$a
jako tablicę z operatorem przecinkowym.while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Pętle przechodzą przez pozostałe litery ($b
), każda iteracja bierze kolejną literę i przechowuje ją do$z
pozostałych$b
, a następnie pozostawia w , a następnie konkatenuje tablicę$a
z wynikiem wysłania$a
przez własną pętlę - każdy element$a
(tymczasowo przechowywany w$c
) jest zapętlany jest własny.length
, a następnie$z
jest wstawiany w każdą pozycję, w tym poprzedzanie i dołączanie za pomocą$z$c
i$c$z
. Na przykład dla$c = '12'
i$z = '3'
spowoduje'132','312','123'
to powrót do konkatenacji$a
.Ostatnia część
$a|?{$_.length-eq$x.count}|select -u|sort
bierze każdy element$a
i używaWhere-Object
klauzuli, aby odfiltrować tylko te, które mają taką samą długość jak łańcuch wejściowy, a następnieselect
s tylko-u
drobne elementy, a na końcusort
te alfabetycznie. Wynikowe ciągi znaków są pozostawione w potoku, a dane wyjściowe za pośrednictwem niejawnego mająWrite-Output
miejsce po zakończeniu programu.źródło
|select -u|sort
na|sort -u
. Z pewnością 2.0 tego nie ma.JavaScript (ES6), 119 bajtów
Gdzie
\n
reprezentuje dosłowny znak nowej linii. Port odpowiedzi @ ETHproduction na użycie ciągów zamiast tablic. Odwrócenie wyniku lub przeniesienie końcowego znaku nowej linii na początek oszczędza 3 bajty.źródło
R, 113 bajtów
Odczytuje dane wejściowe ze standardowego wejścia.
permute
Pakiet zakłada być zainstalowany w celu wywołaniaallPerms
funkcji.Dodam wyjaśnienie, gdy wracam do domu z pracy.
źródło
Java
302300 bajtówKod niepoznany i testowy:
Wypróbuj tutaj.
Wejście: test
Wyjście:
źródło
Rakieta 82 bajtów
Nie golfowany:
Testowanie:
Ouput:
źródło
Groovy, 69 bajtów
źródło
Rubinowy, 51 bajtów
źródło
puts s.chars.permutation().map(&:join).uniq
43 Bajts
bez wcześniejszej definicji.Właściwie 8 bajtów
Zapraszamy do gry w golfa! Wypróbuj online!
Ungolfing
źródło
Pip , 8 bajtów
7 bajtów kodu, +1 dla
-n
flagi.Bierze ciąg jako argument wiersza polecenia. Wypróbuj online!
Skaner Pip dzieli serie wielkich liter na dwuliterowe fragmenty. Tak więc ten kod to
SS UQ PM a
--ieSortString(UniQue(PerMutations(a)))
, za
argumentem wiersza poleceń. Te-n
flagi zapewnia listy wyników jest oddzielone znakiem nowej linii. To wszystko.źródło
K (oK) , 14 bajtów
Rozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Użyj wbudowanej funkcji permutacji
prm
, aby wygenerować permutacje długości danych wejściowych, zastosuj te permutacje na danych wejściowych, posortuj alfabetycznie, a następnie przyjmuj różne wartości.źródło
Perl 5
-MList::Util=uniq -F
, 68 bajtówWypróbuj online!
źródło
Japt v2.0a0
-R
, 5 bajtówSpróbuj
źródło
û
jest metodą centralnego pas; Myślę, że miałeś na myślin
;)sort
wstawiłem pasek wyszukiwania w twoim tłumaczu i kliknąłem pierwszy znaleziony. Aleá
wydaje się, że daje już każdą permutację w kolejności alfabetycznejü
. Naprawię to jutro. Permutacje „buzz” są sortowane, ponieważ samo słowo to - spróbuj na przykład z „zzub”.n
(łatwiej pisać)C ++ (gcc) ,
132128 bajtówWypróbuj online!
źródło
Małż , 9 bajtów
Wyjaśnienie
źródło