O número do enrolamento é o número inteiro de rotações líquidas no sentido anti-horário que um observador deve ter feito para seguir um determinado caminho fechado. Observe que quaisquer rotações no sentido horário contam negativas para o número do enrolamento. O caminho pode se auto-interceptar.
Alguns exemplos (descaradamente retirados da Wikipedia) são dados abaixo:
Seu objetivo é calcular o número do enrolamento para um determinado caminho.
Entrada
Presume-se que o observador esteja na origem (0,0)
.
A entrada é uma sequência finita de pontos (pareados de números inteiros) de qualquer fonte de entrada desejada que descreva o caminho linear em partes. Você pode achatar isso em uma sequência 1D de números inteiros, se desejar, e também pode deslizar a entrada para obter todas as coordenadas x antes de todas as coordenadas y / vice-versa. Você também pode considerar a entrada como um número complexo a+b i
. O caminho pode se auto-interceptar e pode conter segmentos de comprimento zero. O primeiro ponto é o início do caminho e supõe-se que esteja em algum lugar no eixo x positivo.
Nenhuma parte do caminho cruzará a origem. O caminho sempre será fechado (ou seja, o primeiro e o ponto perdido são os mesmos). Seu código pode implicar o último ponto ou exigir que ele seja incluído.
Por exemplo, dependendo da sua preferência, ambas as entradas especificam o mesmo quadrado:
ponto final implícito
1,0
1,1
-1,1
-1,-1
1,-1
ponto final explícito
1,0
1,1
-1,1
-1,-1
1,-1
1,0
Resultado
A saída é um único inteiro para o número do enrolamento. Pode ser para qualquer fonte (valor de retorno, stdout, arquivo etc.).
Exemplos
Todos os exemplos têm o ponto final definido explicitamente e são dados como pares x, y. Aliás, você também deve alimentar esses exemplos diretamente em qualquer código, assumindo pontos finais definidos implicitamente e as saídas devem ser as mesmas.
1. Teste básico
1,0
1,1
-1,1
-1,-1
1,-1
1,0
Resultado
1
2. Teste de ponto repetido
1,0
1,0
1,1
1,1
-1,1
-1,1
-1,-1
-1,-1
1,-1
1,-1
1,0
Resultado
1
3. Teste no sentido horário
1,0
1,-1
-1,-1
-1,1
1,1
1,0
Resultado
-1
4. Teste externo
1,0
1,1
2,1
1,0
Resultado
0
5. Enrolamento misto
1,0
1,1
-1,1
-1,-1
1,-1
1,0
1,-1
-1,-1
-1,1
1,1
1,0
1,1
-1,1
-1,-1
1,-1
1,0
1,1
-1,1
-1,-1
1,-1
1,0
Resultado
2
Pontuação
Isso é código de golfe; o código mais curto vence. Aplicam-se brechas padrão. Você pode usar quaisquer funções internas, desde que não tenham sido projetadas especificamente para calcular o número do enrolamento.
"1-i"
ou"1-1i"
?)