Получив список целых чисел, выведите количество перестановок целых чисел, причем неразличимые перестановки подсчитываются один раз. Если есть n
целые числа, и каждая группа неразличимых чисел имеет длину n_i
, этоn! / (n_1! * n_2! * ...)
правила
Входными данными будут некая форма списка в качестве аргументов функции или программы с 1-12 неотрицательными целыми числами.
Выводом будет распечатка или возврат количества перестановок, как описано выше.
Нет стандартных лазеек или встроенных функций (генерация перестановок, комбинаций и т. Д.). Факториалы разрешены.
Тестовые случаи
Входы:
1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1
Выходы:
60
1
83160
Ответы:
Python, 48 байт
Рекурсивная реализация.
В формуле,
n! / (n_1! * n_2! * ...)
если мы удалим первый элемент (скажем, это1
), число перестановок для остальныхn-1
элементов будетТаким образом, мы получаем ответ, умножая
n/n1
на обратную долю элементов, равную первому, на рекурсивный результат для остальной части списка. Пустой список дает базовый случай 1.источник
/l.count(l[0])
в конце? Тогда вам не нужна эта мерзкая плавающая точка.MATL ,
141312 байтПопробуйте онлайн!
объяснение
Подход очень похож на подход в ответе @ Adnan .
источник
05AB1E ,
151413 байтовКод:
Объяснение:
Использует кодировку CP-1252 .
Попробуйте онлайн! ,
источник
JavaScript (ES6),
6461 байтИспользует приведенную формулу, за исключением расчета каждого факториала постепенно (например,
r=r*++i
эффективный расчетn!
).Редактировать: Первоначально я принимал любые конечные числа, но я сохранил 3 байта, когда @ user81655 указал, что мне нужно только поддерживать положительные целые числа (хотя на самом деле я принимаю неотрицательные целые числа).
источник
r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r
?*=
хотя это вносит ошибки округления.Pyth, 11 байт
Тестирование
Используется стандартная формула,
n! / (count1! * count2! * ...)
за исключением того, что факториалы отсчетов находятся путем подсчета, сколько раз каждый элемент встречается в префиксе, приводящем к этому, а затем умножения всех таких чисел вместе.Объяснение:
источник
Pyth -
1412 байтТестовый пакет .
источник
Рубин,
7574 байтаКак бы то ни было, чтобы
Math
модуль Ruby имел функцию факториала, чтобы мне не пришлось создавать свой собственный.источник
CJam, 17 байт
Проверьте это здесь.
объяснение
источник
Желе, 8 байт
Попробуйте онлайн!
источник
J 13 байт
использование
объяснение
источник