Liczba uzwojenia jest liczbą całkowitą obrotów netto przeciwnie do ruchu wskazówek zegara, które obserwator musiał wykonać, aby podążać daną zamkniętą ścieżką. Zwróć uwagę, że wszelkie obroty zgodne z ruchem wskazówek zegara liczą się ujemnie w kierunku liczby uzwojenia. Ścieżka może się przecinać.
Niektóre przykłady (bezwstydnie zaczerpnięte z Wikipedii) podano poniżej:
Twoim celem jest obliczenie liczby uzwojenia dla danej ścieżki.
Wejście
Zakłada się, że obserwator jest u źródła (0,0)
.
Dane wejściowe są skończoną sekwencją punktów (par liczb całkowitych) z dowolnego pożądanego źródła wejściowego, która opisuje kawałkową ścieżkę liniową. W razie potrzeby możesz spłaszczyć tę sekwencję liczb całkowitych 1D, a także zamienić dane wejściowe, aby przyjąć wszystkie współrzędne x przed wszystkimi współrzędnymi y / odwrotnie. Możesz również wziąć dane wejściowe jako liczbę zespolonąa+b i
. Ścieżka może się przecinać i zawierać segmenty o zerowej długości. Pierwszy punkt to początek ścieżki i zakłada się, że leży gdzieś na dodatniej osi x.
Żadna część ścieżki nie przecina początku. Ścieżka zawsze będzie zamknięta (tzn. Pierwszy i utracony punkt są takie same). Twój kod może sugerować ostatni punkt lub wymagać jego uwzględnienia.
Na przykład w zależności od preferencji oba dane wejściowe określają ten sam kwadrat:
domniemany punkt końcowy
1,0
1,1
-1,1
-1,-1
1,-1
wyraźny punkt końcowy
1,0
1,1
-1,1
-1,-1
1,-1
1,0
Wynik
Dane wyjściowe to jedna liczba całkowita dla liczby uzwojenia. Może to być dowolne źródło (zwracana wartość, standardowe wyjście, plik itp.).
Przykłady
Wszystkie przykłady mają wyraźnie zdefiniowany punkt końcowy i są podane jako pary x, y. Nawiasem mówiąc, powinieneś być w stanie bezpośrednio wprowadzić te przykłady do dowolnych kodów, zakładając niejawnie zdefiniowane punkty końcowe, a wyniki powinny być takie same.
1. Test podstawowy
1,0
1,1
-1,1
-1,-1
1,-1
1,0
Wynik
1
2. Test powtarzanego punktu
1,0
1,0
1,1
1,1
-1,1
-1,1
-1,-1
-1,-1
1,-1
1,-1
1,0
Wynik
1
3. Test zgodny z ruchem wskazówek zegara
1,0
1,-1
-1,-1
-1,1
1,1
1,0
Wynik
-1
4. Test zewnętrzny
1,0
1,1
2,1
1,0
Wynik
0
5. Uzwojenie mieszane
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
Wynik
2
Punktacja
To jest kod golfowy; najkrótszy kod wygrywa. Obowiązują standardowe luki. Możesz używać dowolnych wbudowanych funkcji, o ile nie zostały one specjalnie zaprojektowane do obliczania liczby uzwojenia.
"1-i"
lub"1-1i"
?)