Biorąc pod uwagę listę liczb całkowitych, wypisz liczbę permutacji liczb całkowitych, z nierozróżnialnymi permutacjami liczonymi raz. Jeśli istnieją n
liczby całkowite i każda grupa liczb nie do odróżnienia ma długość n_i
, to znaczyn! / (n_1! * n_2! * ...)
Zasady
Dane wejściowe będą rodzajem listy jako argumenty funkcji lub programu z 1 do 12 liczbami całkowitymi nieujemnymi.
Wyjście będzie drukować lub zwracać liczbę permutacji, jak opisano powyżej.
Brak standardowych luk i wbudowanych funkcji (generowanie permutacji, kombinacji itp.). Czynniki są dozwolone.
Przypadki testowe
Wejścia:
1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1
Wyjścia:
60
1
83160
Odpowiedzi:
Python, 48 bajtów
Implementacja rekurencyjna.
W formule,
n! / (n_1! * n_2! * ...)
jeśli usuniemy pierwszy element (powiedzmy, że1
), liczba permutacji dla pozostałychn-1
elementów wynosiTak więc otrzymujemy odpowiedź przez pomnożenie przez
n/n1
ułamek odwrotny elementów, które są równe pierwszemu, przez wynik rekurencyjny dla reszty listy. Pusta lista podaje podstawowy przypadek 1.źródło
/l.count(l[0])
na końcu? Więc nie potrzebujesz tego obrzydliwego zmiennoprzecinkowego.MATL ,
141312 bajtówWypróbuj online!
Wyjaśnienie
Podejście jest bardzo podobne do tego w odpowiedzi @ Adnan .
źródło
05AB1E ,
151413 bajtówKod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 .
Wypróbuj online! .
źródło
JavaScript (ES6),
6461 bajtówKorzysta z podanego wzoru, z wyjątkiem obliczania każdego silnia przyrostowo (więc na przykład
r=r*++i
efektywnie się obliczan!
).Edycja: Początkowo akceptowałem dowolne liczby skończone, ale zapisałem 3 bajty, gdy @ user81655 wskazał, że muszę obsługiwać tylko liczby całkowite dodatnie (chociaż akceptuję liczby całkowite nieujemne).
źródło
r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r
?*=
ponieważ wprowadza błędy zaokrąglania.Pyth, 11 bajtów
Zestaw testowy
Używa standardowej formuły,
n! / (count1! * count2! * ...)
z tym wyjątkiem, że silnia zliczeń jest obliczana przez zliczenie, ile razy każdy element występuje w prefiksie prowadzącym do tego, a następnie pomnożenie wszystkich takich liczb razem.Wyjaśnienie:
źródło
Pyth -
1412 bajtówPakiet testowy .
źródło
Rubinowy,
7574 bajtówTrochę żałuję, że
Math
moduł Ruby nie miał funkcji silni, więc nie musiałem budować własnej.źródło
CJam, 17 bajtów
Sprawdź to tutaj.
Wyjaśnienie
źródło
Galaretka, 8 bajtów
Wypróbuj online!
źródło
J, 13 bajtów
Stosowanie
Wyjaśnienie
źródło