Le nombre d'enroulement est le nombre entier de révolutions nettes dans le sens antihoraire qu'un observateur doit avoir effectuées pour suivre un chemin fermé donné. Notez que toute rotation dans le sens des aiguilles d'une montre compte négative pour le nombre de bobinage. Le chemin est autorisé à s'entrecroiser.
Quelques exemples (pris sans vergogne de Wikipedia) sont donnés ci-dessous:
Votre objectif est de calculer le nombre d'enroulement pour un chemin donné.
Contribution
L'observateur est supposé être à l'origine (0,0)
.
L'entrée est une séquence finie de points (paire de nombres entiers) provenant de n'importe quelle source d'entrée souhaitée qui décrit le chemin linéaire par morceaux. Vous pouvez aplatir cela en une séquence 1D de nombres entiers si vous le souhaitez, et vous pouvez également étaler l'entrée pour prendre toutes les coordonnées x avant toutes les coordonnées y / vice-versa. Vous pouvez également prendre l'entrée comme un nombre complexe a+b i
. Le chemin peut se recouper et peut contenir des segments de longueur nulle. Le premier point est le début du chemin et est supposé se situer quelque part sur l'axe x positif.
Aucune partie du chemin ne coupera l'origine. Le chemin sera toujours fermé (c'est-à-dire que le premier et le point perdu sont les mêmes). Votre code peut impliquer le dernier point ou exiger qu'il soit inclus.
Par exemple, selon votre préférence, les deux entrées spécifient le même carré:
point final implicite
1,0
1,1
-1,1
-1,-1
1,-1
point final explicite
1,0
1,1
-1,1
-1,-1
1,-1
1,0
Production
La sortie est un entier unique pour le nombre d'enroulement. Il peut s'agir de n'importe quelle source (valeur de retour, sortie standard, fichier, etc.).
Exemples
Tous les exemples ont le point final explicitement défini et sont donnés sous forme de paires x, y. Soit dit en passant, vous devriez également pouvoir directement alimenter ces exemples dans n'importe quel code en supposant des points d'extrémité définis implicitement et les sorties devraient être les mêmes.
1. Test de base
1,0
1,1
-1,1
-1,-1
1,-1
1,0
Production
1
2. Test ponctuel répété
1,0
1,0
1,1
1,1
-1,1
-1,1
-1,-1
-1,-1
1,-1
1,-1
1,0
Production
1
3. Test dans le sens horaire
1,0
1,-1
-1,-1
-1,1
1,1
1,0
Production
-1
4. Test extérieur
1,0
1,1
2,1
1,0
Production
0
5. Enroulement mixte
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
Production
2
Notation
C'est le golf de code; le code le plus court gagne. Des échappatoires standard s'appliquent. Vous pouvez utiliser toutes les fonctions intégrées tant qu'elles n'ont pas été spécifiquement conçues pour calculer le nombre d'enroulement.
"1-i"
ou"1-1i"
?)