ЗАДАНИЕ
ОПРЕДЕЛЕНИЯ
Рассмотрим точки {1,2,3,4,5} и все их перестановки. Мы можем найти общее количество возможных перестановок этих 5 точек с помощью простого трюка: визуализация, заполняющая 5 слотов этими точками, у первого слота будет 5 возможных чисел, у второго 4 (так как один использовался для заполнения первого слота) третий 3 и тд. Таким образом, общее количество перестановок составляет 5 * 4 * 3 * 2 * 1; это было бы 5! перестановки или 120 перестановок. Мы можем думать об этом как о симметричной группе S5, и тогда симметрическая группа Sn будет иметь n! or (n*n-1*n-2...*1)
перестановки.
«Четная» перестановка - это та, где существует четное число циклов четной длины. Это легче понять , когда написано в циклической записи, например , (1 2 3)(4 5)
переставляет 1->2->3->1
и 4->5->4
и имеет один 3 длину цикла (1 2 3)
и один цикл длиной 2 (4 5)
. При классификации перестановки как нечетной или четной мы игнорируем циклы нечетной длины и говорим, что эта перестановка [ (1 2 3)(4 5)
] является нечетной, так как имеет нечетное число {1} циклов четной длины. Ещё примеры:
(1)(2 3)(4 5)
= два 2 цикла длины | ДАЖЕ |(1 2 3 4 5)
= нет четных циклов длины | ДАЖЕ | * обратите внимание, что если нет четных циклов длины, то перестановка четная.
Странные примеры:
(1 2)(3 4 5)
= один цикл 2 длины | ODD |(1)(2 3 4 5)
= один цикл 4 длины | ODD |
Поскольку ровно половина перестановок в любой симметрической группе является четной, мы можем назвать четную группу чередующейся группой N, так что S5 = 120 A5 = 60 перестановок.
ОБОЗНАЧЕНИЯ
Перестановки должны, по крайней мере для этого, быть записаны в циклической записи, где каждый цикл находится в разных скобках, и каждый цикл идет в порядке возрастания. Например (1 2 3 4 5)
нет (3 4 5 1 2)
. А для циклов с одним числом, таких как: (1)(2 3 4)(5)
одиночные / фиксированные точки, могут быть исключены значения (1)(2 3 4)(5) = (2 3 4)
. Но тождество {точка, где все точки зафиксированы (1)(2)(3)(4)(5)
} должно быть написано ()
так, чтобы просто представлять его.
СОРЕВНОВАНИЕ
Я хотел бы, чтобы в как можно меньшем количестве кода вы взяли любое положительное целое число как вход {1,2,3,4 ...} и отобразили все перестановки альтернативной группы An, где n - вход / все четные перестановки Sn. Например:
Input = 3
()
(1 2 3)
(1 3 2)
а также
Input = 4
()
(1 2)(3 4)
(1 3)(2 4)
(1 4)(2 3)
(1 2 3)
(1 3 2)
(1 2 4)
(1 4 2)
(1 3 4)
(1 4 3)
(2 3 4)
(2 4 3)
И как в примерах, я хотел бы, чтобы все циклы одной длины были исключены, а также для идентичности: выходные данные ничего,
()
{не только в скобках, но с тем, что вы используете для показа различных перестановок} или id
являются приемлемыми.
ДОПОЛНИТЕЛЬНОЕ ЧТЕНИЕ
Вы можете найти больше информации здесь:
УДАЧИ
И поскольку это - кодовый гольф, тот, кто сможет напечатать перестановки группы переменных An в самых коротких байтах, выигрывает.
источник
[[1, 2], [3, 4]]
вместо(1 2)(3 4)
?(2 3 1 4)
в порядке возрастания? Вы имеете в виду, что мы должны поместить самый маленький элемент впереди?(2 3 1 4)
же2->3->1->4->2
она может быть записана(1 4 2 3)
с наименьшим элементом первогоОтветы:
Pyth, 26 байт
Попробуйте онлайн
Это решение основано на аккуратной биекции между перестановками в однострочной записи и перестановками в циклической записи. Конечно, есть очевидная биекция, где две нотации представляют одну и ту же перестановку:
[8, 4, 6, 3, 10, 1, 5, 9, 2, 7] = (1 8 9 2 4 3 6) (5 10 7)
но это заняло бы слишком много кода. Вместо этого, просто нарежьте однострочную нотацию на куски перед всеми числами, которые меньше всех их предшественников, вызовите эти циклы и создайте из них новую перестановку.
[8, 4, 6, 3, 10, 1, 5, 9, 2, 7] ↦ (8) (4 6) (3 10) (1 5 9 2 7)
Чтобы полностью изменить эту биекцию, мы можем взять любую перестановку в форме цикла, повернуть каждый цикл так, чтобы его наименьшее число было первым, отсортировать циклы так, чтобы их наименьшие числа появлялись в порядке убывания, и стереть все скобки.
источник
id
. Может быть, он мог вмешаться?Mathematica,
844931 байтКомпозиция двух функций. Выходы в виде
{Cycles[{}], Cycles[{{a, b}}], Cycles[{{c, d}, {e, f}}], ...}
представления(), (a b), (c d)(e f), ...
.источник
J , 53 байта
Циклы в каждой перестановке представлены в виде штучных массивов, поскольку J будет разбитыми массивами с нулевой подкладкой.
Если вывод ослаблен, используя 41 байт
где каждая перестановка может содержать один цикл и нулевой цикл.
Применение
Для альтернативной реализации,
источник
Желе ,
3428 байтПопробуй это здесь .
объяснение
Каждая строка в программе Jelly определяет функцию; нижний - «
main
».Первая строка определяет функцию, которая проверяет, является ли произведение цикла нечетным.
Вторая строка нормализует разбиение перестановки
[1…n]
на произведение цикла следующим образом:Это превратится, например,
(4 3)(2 5 1)
в(1 2 5)(3 4)
.Вот основная программа. Он принимает аргумент
n
из командной строки и:источник
JavaScript (Firefox 30-57),
220218212211 байтК сожалению, 88 байтов достаточно только для генерации знакопеременной группы в виде списка перестановок
a
, поэтому для преобразования выходных данных в желаемый формат мне потребуется дополнительно132130124123 байта:Мне удалось урезать свою версию ES6 до
222216215 байт:источник
(1,2,3)(4,5)
- это странная перестановка! В настоящее время я покажу, например,(1,2,3)(4)(5)
- не только удаление циклов длиной один обойдется мне в 6 байтов, но затем я получу пустой результат для цикла идентификации, который будет стоить мне еще 4 байта для исправления.as for the identity outputs of nothing ... are accepatble
. А также, что будет показано, если вы выведете свои «необработанные данные», они будут представлены в виде (1,2,3) (4) (5) или как-то еще?[1, 2, 0, 3, 4]
для этого конкретного примера, так что далеко не так, как вы хотите.GAP , 32 байта
Спасибо @ChristianSievers за сокращение счета пополам.
Использование по подсказке:
источник
f:=n->List(AlternatingGroup(n));