Napisz funkcję, która przyjmuje jako dane wejściowe zestaw liczb całkowitych (może to być lista, tablica lub dowolny inny kontener z odrębnymi liczbami) i wyświetla listę wszystkich jej permutacji.
Python (95 znaków) :
p=lambda s:s and sum(map(lambda e:map(lambda p:[e]+p,p(filter(lambda x:x!=e,s))),s),[]) or [[]]
Byłoby miło być pobitym w tym samym języku, ale implementacje w innych językach są mile widziane!
code-golf
combinatorics
permutations
zxul767
źródło
źródło
Python, 52
Dane wejściowe to zestaw. Dane wyjściowe to lista list.
To jest krótsze niż odpowiedź, która wykonuje całą pracę z wbudowanym .
źródło
J, 11 znaków
Stosowanie:
Wyjaśnienie:
i.@!@#
używa trzech czasowników, aby zwrócić listę od 0 do (! n) -1, gdzie n jest liczbą elementów na danej liście.[
zwraca samą listę. W pokazanym przykładzie to daje0 1 2 3 4 5 A. 1 3 5
.A.
zwraca jedną możliwą permutację drugiej listy dla każdego elementu na pierwszej liście (rodzaj - tutaj podano właściwe wyjaśnienie ).źródło
Python - 55 znaków
źródło
Haskell,
4443Zasadniczo to samo co rozwiązanie ugorena, ale Haskell jest lepszy w zrozumieniu list!
Oczywiście może to zrobić
30
Bardziej wydajne podejście, które nie wymaga porównania równości:
92
W konsekwencji ten działa również, gdy na liście znajdują się zduplikowane elementy.
źródło
p=Data.List.permutations
. Ale to jest oszustwo. Ponadto,Data.List.permutations
nie emituje permutacji w porządku leksykograficznym.p[]=[[]]
jako przypadek podstawowy, oszczędzając dwa bajty.w Q (48)
Przykładowe użycie:
źródło
Rubin - 23 znaki
na przykład
f[[1,2,3]]
wypisuje to .ale używanie
[].permutation
jest jak oszustwo, więc:Ruby - 59 znaków
testowane z
źródło
f(array) { return array.sort(); }
Python - 58 znaków
Nieznacznie krótszy niż ugoren, biorąc zestaw jako dane wejściowe:
źródło
DO,
270243239 znakówFunkcja P (n, a) zwraca wskaźnik do n! permutacje, zapakowane jeden po drugim w jedną gigantyczną tablicę.
źródło
<malloc.h> isn't needed (ignore the warnings).
n wynosi 4 (przenośność jest dobra, ale krótsza jest ładniejsza). Użyj dodatkowych parametrów jako zmiennych (npp(n,a,N,i)
.).int*p(..)int*a,o;
. Korzystanie ze zmiennych globalnych zamiast parametrów i zwracanych wartości często pomaga.K, 30 bajtów
Brak wbudowanych!
źródło
JS -
154146 znakówfunction f(x){var a=[],m;(m=x.length)>1?f(x.slice(1)).map(function(y){for(l=m;l--;a.push(y.slice(0,l).concat(x[0],y.slice(l))));}):a=[x];return a}
Test:
f([1,2,3,4,5]).map(function(a){return a.join('')}).join('\n')
zwraca to .źródło
R
Ponieważ mówimy o permutacjach, pozwól mi pokazać co najmniej jedno rozwiązanie w języku R:
źródło
Perl 188
Bez procedur bibliotecznych, bez rekurencji
źródło
Scala 30:
Scala 195, quick'n'dirty, bez permutacji z biblioteki:
Scala 293, w pełni rozwinięty, bezpieczny iterator typu:
źródło
Python - 50 znaków
źródło
Pyth, 4 bajty
Tak, Pyth powstał po opublikowaniu tego wyzwania. To wciąż jest naprawdę fajne. :RE
Demo na żywo.
Odczyt ze standardowego wejścia jest krótszy o bajt:
źródło
JavaScript
143136134123źródło
js function p(s,a="",c="",i,z=[]){
zamiastjs function p(s,a,c,i,z){if(!z)a=c="",z=[]
Brachylog , 2 bajty
Wypróbuj online!
źródło
Python, 53 bajty
źródło
Galaretka , 2 bajty
Wypróbuj online!
Tak dla wbudowanych!
źródło
K (oK) , 3 bajty
Rozwiązanie
Wypróbuj online!
Wyjaśnienie:
Jest to 3 bajt wbudowany skrót do dalszej wbudowane 47 funkcji bajtów:
... który można skrócić do 23 bajtów, jeśli wiemy, że otrzymujemy listę danych wejściowych jako danych wejściowych:
źródło
Aksjomat, 160 bajtów
bez golfa
Wszystko to wywołuje jedną funkcję biblioteczną, która daje permutację na indeksie (tylko liczby całkowite jako permutacje jak permutacje na [1], permutacje na [1,2], permutacje na [1,2,3] itd.). indeksów i budować listy; Należy zauważyć, że wydaje się, że jest to dobrze skompilowane dla każdej listy typu X.
źródło
Japt , 1 bajt
Japt interpreter
Zderzyło się to i nie otrzymałem odpowiedzi Japt, więc pomyślałem, że dodam jedną.
á
po zastosowaniu do tablicy i bez żadnych argumentów wbudowane jest polecenie „pobierz wszystkie permutacje”.-R
Flaga używana w linku interpretera tylko modyfikuje sposób wynik zostanie wydrukowany.źródło
APL (NARS), 39 znaków, 78 bajtów
test:
źródło
05AB1E -
21 bajtysœ
Dane wejściowe muszą być tablicą / listą.
Wyjaśnienie:
Oszczędność bajtu dzięki Erikowi Outgolfer
źródło