Se você não está familiarizado com a teoria da trança, recomendo que você leia isso primeiro. Esta pergunta pressupõe que você esteja pelo menos familiarizado com os conceitos em questão e que você esteja familiarizado com a teoria de grupos
Definamos σ n ser a trança em que o n ° de cadeia (Uma indexado) da parte superior atravessa a n + 1 th cadeia, e σ n - ser a inversa da σ n (Isto é o n + 1 th strand cruza a n- ésima strand).
O grupo de trança B n é então gerado por <σ 1 , σ 2 , σ 3 ,. . . , σ n-1 > . Assim, toda trança em B n pode ser escrita como o produto das tranças σ. 1
Determinar se duas tranças em um grupo são iguais não é uma tarefa simples. Pode ser bastante óbvio que σ 1 σ 3 = σ 3 σ 1 , mas é um pouco menos óbvio que, por exemplo, σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 . 2
Portanto, a pergunta é "Como podemos determinar se duas tranças são iguais?". Bem, os dois exemplos acima representam um pouco disso. Em geral, as seguintes relações, chamadas relações de Artin, são verdadeiras:
σ i σ j = σ j σ i ; i - j> 1
σ i σ i + 1 σ i = σ i + 1 σ i σ i + 1
Podemos usar essas duas relações em conjunto com os axiomas do grupo para provar que quaisquer tranças iguais são iguais. Assim, duas tranças são iguais se a aplicação repetida dessas relações e os axiomas do grupo puderem demonstrar isso.
Tarefa
Você escreverá um programa ou função para pegar duas tranças e determinar se são iguais ou não. Você também pode, opcionalmente, pegar um número inteiro positivo representando a ordem do grupo.
Esta é uma questão de código-golfe, para que as respostas sejam pontuadas em bytes, com menos bytes sendo melhores.
Entrada e saída
Você deve representar um Braid como uma lista ordenada de geradores (ou qualquer estrutura equivalente, por exemplo, vetor). Você pode representar os geradores de qualquer forma razoável (por exemplo, um número inteiro, duas tuplas de um número inteiro positivo e um booleano).
A par das regras de problemas de decisão padrão, você deve gerar um de dois valores distintos, aceitar uma rejeição.
Casos de teste
[], [] -> True
[1,-1], [] -> True
[1,2,1], [2,1,2] -> True
[1,3], [3,1] -> True
[1,3,2,1],[3,2,1,2] -> True
[1,4,-4,3,2,1], [3,2,1,2] -> True
[2,2,1], [2,1,2] -> False
[1,2,-1], [-1,2,1] -> False
[1,1,1,2],[1,1,2] -> False
1: Observe que, enquanto B n satisfaz todas as propriedades de um grupo, a operação em nosso grupo de tranças não é comutativa e, portanto, nosso grupo não é abeliano.
2: Se você deseja verificar isso por si mesmo, sugiro aplicar σ 1 - a ambos os lados. Se você desenhar os dois no papel ou modelá-los com strings reais, deve ficar claro por que esse é o caso.
[],[]
[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE