Mesa Cayley do Grupo Diédrico

8

O grupo diedroD3 representa as simetrias de um triângulo equilátero, utilizando a identidade (representado por id), rotações (representados por r1e r2), e as reflexões (representados por s0, s1, e s2).

Sua tarefa é calcular a composição dos elementos . Eles são fornecidos pela tabela de Cayley abaixo:x , y D 3yxx,yD3

  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

Qualquer entrada razoável de xe y. Ordem não importa.

Resultado

ycomposto com xou procurando valores na tabela com base em xe y.

Casos de teste

Estes são dados no formulário 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

Você pode usar qualquer substituição razoável de id, r1, r2, s0, s1, s2, por exemplo 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5ou mesmo [0,0], [0,1], [0,2], [1,0], [1,1], [1,2](aqui o primeiro número representa rotação / reflexão e o segundo é o índice).

qwr
fonte

Respostas:

8

Python 2 , 27 bytes

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

Experimente online!

Jonathan Frech
fonte
você pode explicar esse código?
tarit goswami
1
@taritgoswami Ambas oe Osão listas de três elementos contendo uma permutação dos números inteiros 0, 1, 2. Na compreensão da lista, o primeiro é indexado pelo segundo, implementando a composição da permutação.
Jonathan Frech 16/09
3

Geléia , 1 byte

Um link diádico com y à esquerda ex à direita.

Utiliza as representações do primeiro punho em três números naturais transformados conforme suas ações descrevem:

   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)

Um porto da resposta Python de Jonathan Frech

é o "índice de" geléia de átomo, e vetoriza; observe que a geléia é indexada em 1.

Experimente online! Ou veja uma tabela usando os nomes das perguntas .


Para colocar x à esquerda e y à direita, esses valores podem ser usados:

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

... veja aqui .

Jonathan Allan
fonte
3

Python 2 , 27 26 23 bytes

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

Experimente online! Editar: salvou 3 bytes graças a @NieDzejkob. Usa o seguinte mapeamento:

 id | r1 | r2 | s0 | s1 | s2 
----+----+----+----+----+----
 0  | 2  | 4  | 1  | 3  | 5  
Neil
fonte
@JonathanFrech ... eu não tenho x*-1... eu tenhox*(-1**y)
Neil
@ JonathanFrech Ah, eu digitei meu código de teste, pensei que estava recebendo (-1)**y. Oh bem, isso é ainda mais curto 1 byte ...
Neil
Hm ... E eu pensei que eu golfed um byte ...
Jonathan Frech
Como no desafio D4, você pode substituir (-1)por 5 por -3 bytes.
NieDzejkob
2

APL (Dyalog Classic) , 3 bytes

+.×

Experimente online!

+.× é multiplicação de matrizes

nós representamos o 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
fonte
2

K (ngn / k) , 1 byte

@

Experimente online!

x@yé a indexação de lista, que é igual à composição das permutações; nós representamos o 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
fonte
1

JavaScript (Node.js) , 24 19 bytes

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

Experimente online! Editar: salvou 2 bytes mudando para **e 3 bytes graças a @NieDzejkob. Usa o seguinte mapeamento:

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

A versão antiga de 24 bytes também funciona em versões antigas do JavaScript:

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

Raquete , 42 bytes

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

Experimente online!

Uma porta chata da resposta Python de Neil. Usa o mesmo formato de E / S, portanto:

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

05AB1E , 1 byte

è

Resposta da porta do @JonathanAllan Jelly , mas com índices baseados em 0, então as representações são:

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

Experimente online ou verifique todas as combinações possíveis ou verifique todos os mapeados de volta para os IDs .

Explicação:

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

Wolfram Language (Mathematica) , 16 bytes

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

Experimente online!

Outro ponto chato da resposta de Neil, desta vez no Mathematica. É uma função anônima que recebe argumentos na ordem[y, x] .

Aqui está a representação de entrada:

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