Tabla de Cayley del Grupo Diedro

8

El grupo Dihedral re3 representa las simetrías de un triángulo equilátero, utilizando la identidad (representada por id), rotaciones (representados por r1y r2), y las reflexiones (representados por s0, s1y s2).

Su tarea es calcular la composición de los elementos x , y D 3 . Los da la siguiente tabla de Cayley:yXX,yre3

  x  id  r1  r2  s0  s1  s2
y  +-----------------------
id | id  r1  r2  s0  s1  s2
r1 | r1  r2  id  s1  s2  s0
r2 | r2  id  r1  s2  s0  s1
s0 | s0  s2  s1  id  r2  r1
s1 | s1  s0  s2  r1  id  r2
s2 | s2  s1  s0  r2  r1  id

Entrada

Cualquier aportación razonable de xy y. El orden no importa.

Salida

ycompuesto con x, o buscando valores en la tabla basados ​​en xyy .

Casos de prueba

Estos se dan en el formulario x y -> yx.

id id -> id
s1 s2 -> r1
r1 r1 -> r2
r2 r1 -> id
s0 id -> s0
id s0 -> s0

Notas sobre E / S

Puede usar cualquier reemplazo razonable de id, r1, r2, s0, s1, s2, por ejemplo 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5o incluso [0,0], [0,1], [0,2], [1,0], [1,1], [1,2](aquí el primer número representa la rotación / reflexión y el segundo es el índice).

qwr
fuente

Respuestas:

8

Python 2 , 27 bytes

lambda o,O:[o[_]for _ in O]

Pruébalo en línea!

Jonathan Frech
fuente
¿Puedes explicar este código?
tarit goswami
1
@taritgoswami Ambos oy Oson listas de tres elementos que contienen una permutación de los enteros 0, 1, 2. En la lista de comprensión, el primero es indexado por el segundo, implementando la composición de permutación.
Jonathan Frech
3

Gelatina , 1 byte

Un enlace diádico que toma y a la izquierda yx a la derecha.

Utiliza las representaciones del puño tres números naturales transformados como describen sus acciones:

   name:  id          r1          r2          s0          s1          s2
  value:  [1,2,3]     [2,3,1]     [3,1,2]     [2,1,3]     [1,3,2]     [3,2,1]
(action:  identity    rot-Left    rot-Right   swap-Left   swap-Right  swap-Outer)

Un puerto de la respuesta de Python de Jonathan Frech

es el átomo de "índice en" de Jelly, y se vectoriza; Tenga en cuenta que Jelly está indexada en 1.

Pruébalo en línea! O vea una tabla usando los nombres de las preguntas .


Para tomar x a la izquierda e y a la derecha, estos valores pueden usarse en su lugar:

id       r1       r2       s0       s1       s2
[1,2,3]  [3,1,2]  [2,3,1]  [1,3,2]  [3,2,1]  [2,1,3]

... mira aquí .

Jonathan Allan
fuente
3

Python 2 , 27 26 23 bytes

lambda x,y:(y+x*5**y)%6

Pruébalo en línea! Editar: Guardado 3 bytes gracias a @NieDzejkob. Utiliza el siguiente mapeo:

 id | r1 | r2 | s0 | s1 | s2 
----+----+----+----+----+----
 0  | 2  | 4  | 1  | 3  | 5  
Neil
fuente
@ JonathanFrech ... no tengo x*-1... tengox*(-1**y)
Neil
@ JonathanFrech Ah, había escrito mi código de prueba, pensé que estaba obteniendo (-1)**y. Oh, bueno, eso todavía es 1 byte más corto ...
Neil
Hm ... y pensé que jugaba un byte ...
Jonathan Frech el
Al igual que en el desafío D4, puede reemplazar (-1)con 5 por -3 bytes.
NieDzejkob
2

APL (Dyalog Classic) , 3 bytes

+.×

Pruébalo en línea!

+.× es la multiplicación de matrices

representamos al grupo como

id     r1     r2     s0     s1     s2
1 0 0  0 0 1  0 1 0  0 0 1  0 1 0  1 0 0 
0 1 0  1 0 0  0 0 1  0 1 0  1 0 0  0 0 1 
0 0 1  0 1 0  1 0 0  1 0 0  0 0 1  0 1 0 
ngn
fuente
2

K (ngn / k) , 1 byte

@

Pruébalo en línea!

x@yes la indexación de listas, que es lo mismo que la composición de permutaciones; representamos al grupo como

id:0 1 2; r1:1 2 0; r2:2 0 1; s0:2 1 0; s1:1 0 2; s2:0 2 1
ngn
fuente
1

JavaScript (Node.js) , 24 19 bytes

(x,y)=>(y+x*5**y)%6

Pruébalo en línea! Editar: se guardaron 2 bytes cambiando **y 3 bytes gracias a @NieDzejkob. Utiliza el siguiente mapeo:

 id | r1 | r2 | s0 | s1 | s2 
----+----+----+----+----+----
 0  | 2  | 4  | 1  | 3  | 5  

La versión anterior de 24 bytes también funciona en versiones antiguas de JavaScript:

(x,y)=>(y%2?y+6-x:y+x)%6
Neil
fuente
1

Raqueta , 42 bytes

(lambda(x y)(modulo(+ y(* x(expt 5 y)))6))

Pruébalo en línea!

Un puerto aburrido de la respuesta Python de Neil. Utiliza el mismo formato de E / S, por lo tanto:

 id | r1 | r2 | s0 | s1 | s2 
----+----+----+----+----+----
 0  | 2  | 4  | 1  | 3  | 5  
Camarada SparklePony
fuente
0

05AB1E , 1 byte

è

Puerto de la respuesta Jelly de @JonathanAllan , pero con índices basados ​​en 0, por lo que las representaciones son:

id       r1       r2       s0       s1       s2       # Original values
[0,1,2]  [1,2,0]  [2,0,1]  [1,0,2]  [0,2,1]  [2,1,0]  # Values instead

Pruébelo en línea o verificar todas las combinaciones posibles o verificar toda la vuelta asignada a los identificadores .

Explicación:

è  # Index the second (implicit) input-list vectorized into the first (implicit) input-list
   # And output the result implicitly
Kevin Cruijssen
fuente
0

Wolfram Language (Mathematica) , 16 bytes

Mod[#+#2*5^#,6]&

Pruébalo en línea!

Otro puerto aburrido de la respuesta de Neil, esta vez en Mathematica. Es una función anónima que toma argumentos en el orden[y, x] .

Aquí está la representación de entrada:

 id | r1 | r2 | s0 | s1 | s2 
----+----+----+----+----+----
 0  | 2  | 4  | 1  | 3  | 5 
Camarada SparklePony
fuente