Напишите функцию, которая принимает в качестве входных данных набор целых чисел (может быть списком, массивом или любым другим контейнером с различными числами) и выводит список всех его перестановок.
Питон (95 символов) :
p=lambda s:s and sum(map(lambda e:map(lambda p:[e]+p,p(filter(lambda x:x!=e,s))),s),[]) or [[]]
Было бы неплохо быть побежденным на одном языке, но реализации на других языках приветствуются!
code-golf
combinatorics
permutations
zxul767
источник
источник
Python, 52
Вход является набором. Вывод представляет собой список списков.
Это короче, чем ответ, который делает всю работу со встроенным .
источник
J, 11 символов
Использование:
Объяснение:
i.@!@#
использует три глагола, чтобы вернуть список от 0 до (! n) -1, где n - количество элементов в данном списке.[
возвращает сам список. В примере показано, что дает0 1 2 3 4 5 A. 1 3 5
.A.
возвращает одну возможную перестановку второго списка для каждого элемента в первом списке (вид - здесь дано правильное объяснение ).источник
Питон - 55 символов
источник
Хаскелл,
4443По сути, это то же самое, что и решение Угорена, но Хаскелл лучше разбирается в списках!
Конечно, это также может сделать
30
Более эффективный подход, который не требует сравнения на равенство:
92
Как следствие, этот также работает, когда в списке есть повторяющиеся элементы.
источник
p=Data.List.permutations
, Хотя это похоже на обман. Также,Data.List.permutations
не выводит перестановки в лексикографическом порядке.p[]=[[]]
Вместо этого вы можете написать в качестве базового варианта, сохранив два байта.в Q (48)
Пример использования:
источник
Рубин - 23 символа
например
f[[1,2,3]]
выводит это .но использование
[].permutation
похоже на обман, поэтому:Рубин - 59 символов
проверено с
источник
f(array) { return array.sort(); }
Питон - 58 символов
Чуть короче, чем у Угорена, взяв набор в качестве входных данных:
источник
C,
270243239 символовФункция P (n, a) возвращает указатель на n! перестановки, упакованные одна за другой в один гигантский массив.
источник
<malloc.h> isn't needed (ignore the warnings).
sizeof n` равно 4 (переносимость хорошая, но короче приятнее). Используйте дополнительные параметры в качестве переменных (напримерp(n,a,N,i)
).int*p(..)int*a,o;
, Использование глобальных переменных вместо параметров и возвращаемых значений часто помогает.К, 30 байт
Нет встроенных!
источник
JS -
154146 символовfunction 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}
Тест:
f([1,2,3,4,5]).map(function(a){return a.join('')}).join('\n')
возвращает это .источник
р
Поскольку мы говорим о перестановках, позвольте мне показать хотя бы одно решение в R:
источник
Perl 188
Нет библиотечных подпрограмм, нет рекурсии
источник
Скала 30:
Scala 195, quick'n'dirty, без перестановок из библиотеки:
Scala 293, полноценный, безопасный тип итератор:
источник
Питон - 50 символов
источник
Pyth, 4 байта
Да, Pyth был создан после того, как этот вызов был опубликован и все. Это все еще действительно круто. : D
Живая демоверсия.
Чтение со стандартного ввода короче:
источник
JavaScript
143136134123источник
js function p(s,a="",c="",i,z=[]){
вместоjs function p(s,a,c,i,z){if(!z)a=c="",z=[]
Брахилог , 2 байта
Попробуйте онлайн!
источник
Python, 53 байта
источник
Желе , 2 байта
Попробуйте онлайн!
Ура за встроенных!
источник
K (ок) , 3 байта
Решение
Попробуйте онлайн!
Объяснение:
Это 3-байтовый встроенный ярлык для следующей встроенной 47-байтовой функции:
... который можно сократить до 23 байт, если мы знаем, что в качестве входных данных получаем список целых чисел:
источник
Аксиома, 160 байт
ungolfed
Все это вызывает одну библиотечную функцию, которая дает перестановку по индексу (только целые числа как перестановка как перестановки в [1], перестановки в [1,2], перестановки в [1,2,3] и т. Д.). Так что достаточно получить эти наборы индексов и построения списков; Нужно отметить, что это, кажется, скомпилировано хорошо для каждого Списка типа X
источник
Japt , 1 байт
Переводчик Japt
Это натолкнулось и не дало ответа Япта, поэтому я решил, что я продолжу и добавлю один.
á
применительно к массиву и без каких-либо аргументов является встроенным для «получить все перестановки».-R
Флаг , используемый в ссылке интерпретатор только модифицирует , как печатается результат.источник
APL (NARS), 39 символов, 78 байтов
тестовое задание:
источник
05AB1E -
21 байтсœ
Входные данные должны быть массивом / списком.
Объяснение:
Сохранил байт благодаря Эрику Аутгольферу
источник