Geben Sie bei einer Liste von Ganzzahlen die Anzahl der Permutationen der Ganzzahlen aus, wobei nicht unterscheidbare Permutationen einmal gezählt werden. Wenn es n
ganze Zahlen gibt und jede Gruppe nicht unterscheidbarer Zahlen eine Länge hat n_i
, ist diesn! / (n_1! * n_2! * ...)
Regeln
Die Eingabe erfolgt in Form einer Liste als Argument für eine Funktion oder ein Programm mit 1 bis 12 nicht negativen Ganzzahlen.
Die Ausgabe erfolgt wie oben beschrieben durch Drucken oder Zurücksenden der Anzahl der Permutationen.
Keine Standardlücken oder eingebauten Funktionen (Erzeugen von Permutationen, Kombinationen usw.). Factorials sind erlaubt.
Testfälle
Eingänge:
1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1
Ausgänge:
60
1
83160
Antworten:
Python, 48 Bytes
Eine rekursive Implementierung.
n! / (n_1! * n_2! * ...)
Wenn wir in der Formel das erste Element entfernen (sagen wir, es ist1
), beträgt die Anzahl der Permutationen für die verbleibendenn-1
ElementeWir erhalten die Antwort, indem wir
n/n1
den Kehrwert der Elemente, die dem ersten entsprechen, mit dem rekursiven Ergebnis für den Rest der Liste multiplizieren . Die leere Liste gibt den Basisfall von 1 an.quelle
/l.count(l[0])
am Ende? Dann brauchen Sie diesen icky Fließkomma nicht.MATL ,
14,1312 BytesProbieren Sie es online!
Erläuterung
Der Ansatz ist dem in @ Adnans Antwort sehr ähnlich .
quelle
05AB1E ,
151413 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung.
Probieren Sie es online! .
quelle
JavaScript (ES6),
6461 BytesVerwendet die angegebene Formel, außer dass jede Fakultät inkrementell berechnet wird (z. B. die
r=r*++i
effektiven Berechnungenn!
).Bearbeiten: Ursprünglich habe ich alle endlichen Zahlen akzeptiert, aber ich habe 3 Bytes gespart, als @ user81655 darauf hinwies, dass ich nur positive Ganzzahlen unterstützen musste (obwohl ich eigentlich nicht negative Ganzzahlen akzeptiere).
quelle
r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r
?*=
aber nicht, da das Rundungsfehler einführt.Pyth, 11 Bytes
Testsuite
Verwendet die Standardformel
n! / (count1! * count2! * ...)
, außer dass die Fakultäten der Zählungen ermittelt werden, indem gezählt wird, wie oft jedes Element im vorangegangenen Präfix vorkommt, und dann alle diese Zahlen miteinander multipliziert werden.Erläuterung:
quelle
Pyth -
1412 BytesTest Suite .
quelle
Ruby,
7574 BytesIrgendwie wünschte
Math
ich mir, dass Rubys Modul eine Fakultätsfunktion hätte, damit ich keine eigene bauen müsste.quelle
CJam, 17 Bytes
Teste es hier.
Erläuterung
quelle
Gelee, 8 Bytes
Probieren Sie es online!
quelle
J, 13 Bytes
Verwendung
Erläuterung
quelle