Dada a notação Dowker de um nó e seus sinais de cruzamento, calcule seu polinômio entre colchetes.
Embora existam mais definições técnicas, para esse desafio, basta pensar em um nó como algo feito fisicamente, unindo as duas extremidades de uma corda. Como os nós existem em três dimensões, quando os desenhamos no papel, usamos diagramas de nós - projeções bidimensionais nas quais os cruzamentos são exatamente de duas linhas, uma acima e outra abaixo.
Aqui (b) e (c) existem diagramas diferentes do mesmo nó.
Como representamos um diagrama de nós no papel? A maioria de nós não é Rembrandt, por isso contamos com a notação Dowker , que funciona da seguinte maneira:
Escolha um ponto de partida arbitrário no nó. Mova-se em uma direção arbitrária ao longo do nó e numere os cruzamentos que encontrar, começando em 1, com a seguinte modificação: se é um número par e você está passando por cima do cruzamento, negue esse número par. Por fim, escolha os números pares correspondentes a 1, 3, 5, etc.
Vamos tentar um exemplo:
Nesse nó, escolhemos "1" como ponto de partida e passamos para cima e para a direita. Toda vez que passamos por cima ou por baixo de outro pedaço da corda, atribuímos ao ponto de cruzamento o próximo número natural. Negamos os números pares correspondentes aos fios que passam por uma passagem, por exemplo [3,-12]
no diagrama. Portanto, este diagrama seria representado por [[1,6],[2,5],[3,-12],[-4,9],[7,8],[-10,11]]
. Listar os amigos de 1, 3, 5, 7, etc nos dá [6,-12,2,8,-4,-10]
.
Há algumas coisas a serem observadas aqui. Primeiro, a notação Dowker não é exclusiva para um dado nó, pois podemos escolher um ponto de partida e uma direção arbitrários. Mas, dada a notação, pode-se determinar completamente a estrutura do nó (tecnicamente, até a reflexão de seus componentes principais do nó). Embora nem todas as notações da Dowker possam formar nós possíveis, nesse problema, você pode assumir que a entrada representa um nó real.
Para evitar a ambiguidade entre as reflexões de um nó e para facilitar o desafio, você também receberá uma lista de sinais de cruzamento como entrada.
Em um cruzamento positivo, a linha inferior vai para a esquerda do ponto de vista da linha superior. Em um cruzamento negativo, vai para a direita. Observe que reverter a direção de dar a volta no nó (ou seja, reverter a linha acima e abaixo da linha) não altera os sinais de cruzamento. No nosso exemplo, os sinais de cruzamento são [-1,-1,-1,1,-1,1]
. Eles são fornecidos na mesma ordem que a notação Dowker, isto é, para cruzamentos numerados 1, 3, 5, 7, etc.
Na imagem acima, o cruzamento descrito no primeiro diagrama, que é da forma , pode ser transformado como na segunda figura (também conhecida como suavização positiva ) ou como na terceira figura ( suavização negativa ).
Confuso ainda? Vamos fazer um exemplo, tentando encontrar o polinômio do colchete de (Nota: são dois nós interligados. Esse tipo de diagrama não será uma entrada em potencial nesse desafio, pois as entradas serão apenas um nó, mas podem aparecer como um nó). resultado intermediário no algoritmo.)
Primeiro usamos a regra 3
Usamos a regra 3 novamente em ambos os novos nós
Substituímos esses 4 novos nós na primeira equação.
A aplicação das regras 1 e 2 a esses 4 nos diz
Então, isso nos diz
Parabéns por completar sua breve introdução à teoria dos nós!
Entrada
Duas listas:
Notação Dowker, por exemplo
[6,-12,2,8,-4,-10]
. A numeração dos cruzamentos deve começar a partir de 1. Os números ímpares correspondentes[1,3,5,7,...]
estão implícitos e não devem ser fornecidos como entrada.Sinais (
1
/-1
ou se você preferir0
/1
oufalse
/true
ou'+'
/'-'
) para os cruzamentos correspondentes à notação Dowker, por exemplo[-1,-1,-1,1,-1,1]
.
Em vez de um par de listas, você poderia ter uma lista de pares, por exemplo [[6,-1],[-12,-1],...
Saída
[[1,-2],[5,0],[1,1],[-1,3]]
[0,1,0,5,1,0,-1]
Regras
Este é um desafio do código-golfe . Nenhuma das brechas padrão pode ser usada e as bibliotecas que possuem ferramentas para calcular as notações de Dowker ou os polinômios de Bracket, não podem ser usadas. (Um idioma que contém essas bibliotecas ainda pode ser usado, mas não as bibliotecas / pacotes).
Testes
// 4-tuples of [dowker_notation, crossing_signs, expected_result, description]
[
[[],[],[[1,0]],"unknot"],
[[2],[1],[[-1,3]],"unknot with a half-twist (positive crossing)"],
[[2],[-1],[[-1,-3]],"unknot with a half-twist (negative crossing)"],
[[2,4],[1,1],[[1,6]],"unknot with two half-twists (positive crossings)"],
[[4,6,2],[1,1,1],[[1,-7],[-1,-3],[-1,5]],"right-handed trefoil knot, 3_1"],
[[4,6,2,8],[-1,1,-1,1],[[1,-8],[-1,-4],[1,0],[-1,4],[1,8]],"figure-eight knot, 4_1"],
[[6,8,10,2,4],[-1,-1,-1,-1,-1],[[-1,-7],[-1,1],[1,5],[-1,9],[1,13]],"pentafoil knot, 5_1"],
[[6,8,10,4,2],[-1,-1,-1,-1,-1],[[-1,-11],[1,-7],[-2,-3],[1,1],[-1,5],[1,9]],"three-twist knot, 5_2"],
[[4,8,10,2,12,6],[1,1,-1,1,-1,-1],[[-1,-12],[2,-8],[-2,-4],[3,0],[-2,4],[2,8],[-1,12]],"6_3"],
[[4,6,2,10,12,8],[-1,-1,-1,-1,-1,-1],[[1,-10],[2,-2],[-2,2],[1,6],[-2,10],[1,14]],"granny knot (sum of two identical trefoils)"],
[[4,6,2,-10,-12,-8],[1,1,1,1,1,1],[[1,-14],[-2,-10],[1,-6],[-2,-2],[2,2],[1,10]],"square knot (sum of two mirrored trefoils)"],
[[6,-12,2,8,-4,-10],[-1,-1,-1,1,-1,1],[[1,-2],[1,6],[-1,10]],"example knot"]
]
Fontes externas
Não é necessário para o desafio, mas se você estiver interessado:
mensagens da caixa de areia: 1 , 2
obrigado @ChasBrown e @ H.Pwiz por terem detectado um erro na minha definição de notação Dowker