Do tego wyzwania stworzysz funkcję (twoja funkcja może być kompletnym programem), która pobiera listę jako dane wejściowe i zwraca permutację tej listy. Twoja funkcja musi spełniać następujące wymagania.
To musi być deterministyczne.
Skomponowanie funkcji ze sobą wiele razy powinno być w stanie uzyskać listę dowolnych permutacji.
To jest pytanie w golfa kodu, więc odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów będzie lepszych.
Dalsze zasady
Można wziąć wszelkiego rodzaju listy, (
[Integer]
,[String]
,[[Integer]]
) tak długo, jak- Może być niepusty
- Może zawierać odrębne obiekty o co najmniej 16 możliwych wartościach. (Nie możesz użyć Haskell
[()]
i twierdzić, że twoja funkcja toid
) - Może zawierać zduplikowane obiekty (bez zestawów)
Możesz napisać program lub funkcję, ale musisz przestrzegać standardowego IO.
code-golf
permutations
Ad Hoc Garf Hunter
źródło
źródło
S_n
jest cykliczny tylko dlan<3
next_permutation
funkcję.Odpowiedzi:
CJam (11 bajtów)
Demo online pokazujące pełny cykl dla czteroelementowej listy z jednym zduplikowanym elementem.
Sekcja
źródło
Mathematica + Combinatorica (pakiet wbudowany) 34 bajty
19 bajtów, aby załadować pakiet i 15 dla funkcji.
Stosowanie:
Bez wbudowanego 61 bajtów
Combinatorica ma być w pełni włączona do Mathematiki, ale myślę, że funkcja NextPermutation została przeoczona.
źródło
Python 3 , 90 bajtów
Wypróbuj online!
źródło
C ++, 42 bajty
Ta dokładna operacja jest wbudowana w C ++.
źródło
#include
?JavaScript (ES6),
145139137134108 bajtówZaoszczędź 25 bajtów dzięki @Neil!
Pobiera dane wejściowe jako tablicę znaków alfabetycznych. Zwraca następną permutację jako inną tablicę.
W jaki sposób?
Jest to generacja w porządku leksykograficznym, która przetwarza 4 następujące kroki przy każdej iteracji:
Znajdź największy indeks X taki, że a [X] <a [X + 1]
Znajdź największy indeks Y większy niż X taki, że a [Y]> a [X]
Zamień wartość [X] na wartość [Y]
Posortuj sekwencję od [X + 1] do ostatniego elementu włącznie, w rosnącej kolejności leksykograficznej
Przykład:
Próbny
Pokaż fragment kodu
źródło
v<a[i+1]&&(t=v,x=i)
oszczędza bajt i możesz być w stanie uzyskać więcej oszczędności, używającsplice
zamiast dwóchslice
s.map
s, dla 112 bajtów:a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,t=a.splice(++x).sort(),a.concat(t))
a.concat(a.splice(++x).sort())
pójdzie do pracy, inaczej spróbowałbym ...Galaretka , 6 bajtów
Przechodzi przez permutacje w malejącym porządku leksykograficznym.
Wypróbuj online!
Jak to działa
źródło
C, 161 bajtów
Rzeczywisty algorytm O (n).
Przykładowe użycie:
źródło
Python 2 , 154 bajty
Wypróbuj online!
źródło
exec
dałem mi różnego rodzaju błędy w funkcjiGalaretka , 10 bajtów
Wypróbuj online!
Sortuj> wszystkie permutacje> znajdź dane wejściowe> dodaj 1> indeks do „wszystkich permutacji
źródło
Œ¿‘œ?Ṣ
). Nie miałem ochoty kraść, skoro cóż, to samo algo.Q
. Nadal możesz grać w golfaṢŒ!Qµi³‘ị
.05AB1E , 7 bajtów
Wypróbuj online!
źródło
PHP , 117 bajtów
Pobiera dane wejściowe / wyjściowe jako listę ciągów niższych liter
Wypróbuj online!
źródło