Una permutación de tamaño n es un reordenamiento de los primeros n enteros positivos. (lo que significa que cada número entero aparece una vez y exactamente una vez). Las permutaciones pueden tratarse como funciones que cambian el orden de una lista de elementos de tamaño n . Por ejemplo
(4 1 2 3) ["a", "b", "c", "d"] = ["d", "a", "b", "c"]
Así, las permutaciones se pueden componer como funciones.
(4 1 2 3)(2 1 3 4) = (4 2 1 3)
Esto trae consigo muchas propiedades interesantes. Hoy nos estamos centrando en la conjugación . Las permutaciones y y x (ambas de tamaño n ) son conjugados si hay permutaciones g y g -1 (también de tamaño n ) de modo que
x = gyg-1
y gg -1 es igual a la permutación de identidad (los primeros n números en el orden correcto).
Su tarea es tomar dos permutaciones del mismo tamaño a través de métodos de entrada estándar y decidir si son conjugados. Debe generar uno de dos valores consistentes, uno si son conjugados y el otro si no lo son.
Este es el código de golf, por lo que las respuestas se puntuarán en bytes con menos bytes mejor.
Hay muchos teoremas sobre permutaciones conjugadas que están a su disposición, así que buena suerte y feliz golf.
Puede tomar la entrada como un contenedor ordenado de valores (ya sea 1-n o 0-n) que representan la permutación como arriba, o como una función que toma un contenedor ordenado y realiza la permutación. Si elige tomar una función, debe tomarla como un argumento en lugar de tenerla con un nombre predefinido.
Casos de prueba
(1) (1) -> True
(1 2) (2 1) -> False
(2 1) (2 1) -> True
(4 1 3 2) (4 2 1 3) -> True
(3 2 1 4) (4 3 2 1) -> False
(2 1 3 4 5 7 6) (1 3 2 5 4 6 7) -> True
fuente
Respuestas:
Python 2 , 87 bytes
Pruébalo en línea!
Toma entrada
P
como un par de ambas permutaciones yk
su longitud. Salidas1
para conjugados y0
no.Esto usa el resultado:
Dos permutaciones conjugadas satisfacen esto porque sus poderes k también son conjugados, y la conjugación conserva el recuento de puntos fijos.
Es menos obvio que dos permutaciones no conjugadas siempre difieren. En particular, la conjugación está determinada por la lista ordenada de longitudes de ciclo, y estas pueden recuperarse de los recuentos de puntos fijos. Una forma de mostrar esto es con álgebra lineal, aunque podría ser excesivo.
Deje X ser la matriz de permutación para x . Entonces, el número de puntos fijos de x k es Tr (X k ) . Estas trazas son los polinomios simétricos de suma de potencia de los valores propios de X k con multiplicidad. Estos polinomios para k de 0 a n nos permiten recuperar los polinomios simétricos elementales correspondientes de estos valores propios, y por lo tanto el polinomio característico y, por lo tanto, los propios valores propios.
Dado que estos valores propios son raíces de unidad correspondientes a los ciclos de x , a partir de ellos podemos recuperar los tamaños de los ciclos y sus multiplicidades. Entonces, nuestra "firma" identifica la permutación hasta la conjugación.
fuente
J ,
25 bytes23 bytes16 bytessolución tácita de miles :
La solución explícita de OP:
Esto verifica si las permutaciones xey tienen el mismo tipo de ciclo, utilizando la
C.
función incorporada para producir representaciones de ciclo.fuente
-:&([:/:~#&>)&C.
usando un formulario tácito. Aquí hay un enlace TIO para probarlo.c=:
MATL ,
20191716 bytesEntrada: dos vectores de columna (usando
;
como separador). Salida:1
si se conjuga,0
si no.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
No se utilizan teoremas sobre permutaciones (por pura ignorancia); solo fuerza bruta y estos dos hechos:
Para dos permutaciones p y q , la composición pq es equivalente a usar p para indexar los elementos de q .
La condición x = gyg −1 es equivalente a xg = gy .
Código comentado:
fuente
Wolfram Language (Mathematica) , 44 bytes
Pruébalo en línea!
Wolfram Language (Mathematica) , 44 bytes
Usando la codificación CP-1252, donde
±
hay un byte.Pruébalo en línea!
fuente
Jalea , 11 bytes
Pruébalo en línea!
Cómo funciona
fuente
y
que se indexa en cada unog⁻¹
, no al revés. Ver el ejemplo(4 1 2 3)(2 1 3 4) = (4 2 1 3)
,. Con su enfoque, daría como resultado(1 4 2 3)
, ya que el segundo se indexa en el primero. Teniendo eso en cuenta, tengo una solución de 12 bytes que todavía no estropearé. :-)Œ!©Ụ€⁹ịЀ®ị"⁸e
(básicamente todo indexado con argumentos invertidos), excepto más corto después de que hice modificaciones importantes. No creo queg⁻¹yg
sea lo mismo quegyg⁻¹
. Además, creo que su respuesta también puede beneficiarse de esas modificaciones, pero, como dije antes, todavía no quiero arruinar la diversión.x = g⁻¹yg
, entoncesgxg⁻¹ = y
, asíx
yy
son conjugados.eŒ!ị"Ụị@¥€¥¥
Casco , 9 bytes
Devuelve
1
para conjugado y0
para no conjugado. Pruébalo en línea!Explicación
La clase de conjugación de una permutación P de L = [1,2, .., n] está determinada por el conjunto múltiple que contiene el período mínimo de cada número en L bajo P . Cuando P se toma en formato de lista, puedo reemplazar L con P y obtener el mismo conjunto múltiple. El programa calcula el conjunto múltiple correspondiente para cada entrada y comprueba si uno es un subconjunto múltiple de la otra. Como tienen el mismo número de elementos, esto es equivalente a ser el mismo conjunto múltiple.
fuente
Perl,
615857 bytesIncluye
+2
paraap
Dé permutaciones basadas en 0 como 2 líneas en STDIN
El algoritmo es una variación menor de la solución de xnor
Esta versión anterior del código golpea un error de Perl y vuelca el núcleo de varias entradas en mi último Perl
5.26.1
, pero funciona en un Perl anterior5.16.3
.Posiblemente sea otra instancia más de mi antiguo enemigo perlgolf, el hecho de que perl no cuenta correctamente su pila.
fuente
JavaScript (ES6),
6664 bytesSi he leído las otras respuestas correctamente, el problema es equivalente a contar los períodos de todos los elementos y verificar que las dos listas tengan el mismo número de cada período. Editar: guardado 1 byte gracias a @Arnauld calculando uno menos que el período. Ahorré otro byte gracias a @Arnauld al abusar de las extrañas reglas de coerción de JavaScript para comparar las matrices. Otro byte podría salvarse al curry, pero no me gusta el curry a menos que sea pollo tikka masala.
fuente