Biorąc pod uwagę ciąg N, S, E i W, wyślij łożysko (kąt w kierunku zgodnym z ruchem wskazówek zegara od północy w stopniach), popraw do 5 miejsc po przecinku.
W tradycyjnej notacji kompasu ciąg składa się tylko z 2 takich znaków (takich jak NNW lub ESE). Tutaj musisz również zaakceptować ciągi zawierające wszystkie 4 (jak WNNNSE) . Używanie tylko 2 symboli pozwala ludziom intuicyjnie zrozumieć znaczenie. Dopuszczenie 4 symboli sprawia, że czytanie jest okropne, ale umożliwia krótsze sposoby opisywania namiaru z określoną dokładnością.
(Jak wskazano w uwagach przez user2357112 , okazuje się, można udowodnić, że dla danego łożyska, łańcuch 4 symbol będzie dokładnie taka sama jak długość łańcucha 2 symbolu, tak ja to wyzwanie oparte na fałszywym założeniu. Mam nadzieję, że ten brak praktycznego celu nie umniejsza przyjemności z wyzwania ...)
Dokładna metoda została opisana poniżej i jest równoważna tradycyjnej notacji (rozwija się na niej, a nie zmienia).
Wkład
- Dane wejściowe to pojedynczy ciąg znaków zawierający tylko znaki
NESW
. - Dane wejściowe mogą być ciągiem znaków, jeśli wolisz, pod warunkiem, że nie obejmuje to żadnego przetwarzania wstępnego. Na przykład pobranie zagnieżdżonej listy w
[N, [E, [S, [W]]]]
celu ułatwienia kolejności przetwarzania jest niedozwolone. - Zabieranie różnych postaci jest niedozwolone. Nie możesz wziąć ciąg
1234
zamiastNESW
.
Wydajność
- Dane wyjściowe muszą być liczbą dziesiętną lub reprezentacją ciągu jednego (nie wymierną / ułamkową).
- Zera końcowe nie muszą być wyświetlane. Jeśli łożysko jest
9.00000
, to wynik9
również liczy się jako poprawny do 5 miejsc po przecinku. - Dane wyjściowe mieszczą się w zakresie [0, 360). To znaczy, w tym 0, ale z wyłączeniem 360.
- Poprawność jest sprawdzana poprzez zaokrąglenie wyniku do 5 miejsc po przecinku. Jeśli łożysko ma wartość 0,000005, zaokrągla to do 0,00001. Wyjścia 0,00001 i 0,000005 są poprawne.
- Dane wyjściowe w notacji naukowej dla niektórych danych wejściowych są dopuszczalne. Na przykład
1e-5
zamiast0.00001
.
Konwersja
- Punkty pojedynczemu znakowi kompas
N
,E
,S
iW
odpowiadają 0, 90, 180 i 270 ° odpowiednio. - Przygotowanie jednego z nich do struny powoduje, że łożysko przecina łożysko pojedynczego znaku i łożysko oryginalnego ciągu.
- Wybrano najbliższe z dwóch możliwych dwudzielnych łożysk, tak że NE reprezentuje 45 stopni, a nie 225 stopni.
- Jest to jednoznaczne, chyba że kąt, który ma być podzielony na dwie części, wynosi 180 stopni. Dlatego
NS
,SN
,WE
, iEW
odpowiadają niezdefiniowany łożysk, a wejście nigdy nie kończy się w każdym z nich. Mogą jednak pojawiać się gdziekolwiek indziej w ciągu wejściowym, ponieważ nie powoduje to niejednoznaczności. - Jeśli dwa ostatnie znaki są identyczne, ostatni znak będzie zbędny, ponieważ bisekcja zwróci ten sam kierunek. Ponieważ nic to nie dodaje do notacji, twój kod nie musi sobie z tym poradzić. Dlatego
NN
,EE
,SS
, iWW
odpowiadają niezdefiniowany łożysk, a wejście nigdy nie kończy się w każdym z nich. Mogą jednak pojawiać się gdziekolwiek indziej w ciągu wejściowym.
Przykłady
N: 0
E: 90
S: 180
SE: halfway between S and E: 135
NSE: halfway between N and SE: 67.5
NNSE: halfway between N and NSE: 33.75
NNNSE: halfway between N and NNSE: 16.875
NNNNSE: halfway between N and NNNSE: 8.4375
Przypadki testowe
Przedłożenie jest ważne tylko wtedy, gdy daje poprawne dane wyjściowe dla wszystkich przypadków testowych. Zauważ, że przypadki testowe przekraczają granice tego, co można obsługiwać z podwójną precyzją. W przypadku języków domyślnie ustawionych na pojedynczą precyzję prawdopodobnie będziesz musiał wydać bajty, aby określić podwójną precyzję w celu uzyskania poprawnych wyników.
Wyniki przypadków testowych są zaokrąglone do 5 miejsc po przecinku, a także z dowolną dokładnością. Oba są prawidłowymi danymi wyjściowymi.
WNE 337.5 337.5
WEN 337.5 337.5
WEWEWEWEWEWEWEWEWEWEWEN 330.00001 330.000007152557373046875
NESWNESWNESWNESWNESWNESWNESW 90 89.99999932944774627685546875
NNNNNNNNNNNNNNNNNNNNNNNE 0.00001 0.0000107288360595703125
NNNNNNNNNNNNNNNNNNNNNNNW 359.99999 359.9999892711639404296875
SNNNNNNNNNNNNNNNNNNNNNNNE 90.00001 90.00000536441802978515625
SNNNNNNNNNNNNNNNNNNNNNNNW 269.99999 269.99999463558197021484375
Punktacja
To jest golf golfowy . Wynik to długość kodu źródłowego w bajtach, a najkrótsza wygrana.
Pedanteria
Popełniłem błąd, myśląc, że „North by North West” jest ważnym kierunkiem kompasu. Szczęśliwy błąd, ponieważ doprowadził do pomysłu na wyzwanie, ale potem odkryłem na stronie Wikipedii :
„Tytuł filmu Alfreda Hitchcocka z 1959 roku, North by Northwest, nie jest właściwie punktem orientacyjnym na 32-wiatrowym kompasie, ale film zawiera odniesienie do Northwest Airlines ”.
Okazuje się również, że metoda zastosowana do tego wyzwania jest zgodna tylko z tradycyjnymi punktami kompasu do 16-punktowego kompasu włącznie. 32-wiatrowy kompas opisany na tej stronie jest nieco inny i wygodnie przeoczyłem jego istnienie w tym wyzwaniu.
Wreszcie, dla każdego, kto uważa, że powinienem używać „południowo-wschodniej” zamiast „południowo-wschodniej”,.
WNNNSE
wyjście będzie 323.4375
. W sekcji przykładowej znajduje się przewodnik, który miałby zastosowanie w ten sam sposób do tego przypadku.
f(N,N,N,S,E)
porządku?
WNNNSE
<= jaki byłby wynik dla tego przykładowego wpisu na początku Twojego postu? dla mnie to brzmi nieważnie, ale trudno powiedzieć.