Biorąc pod uwagę sztukę ASCII dwóch wektorów, znajdź wielkość i stopień uzyskanego wektora.
Wejście
Można to odebrać przez STDIN, odczytać z lokalnego pliku lub dostarczyć poprzez wywołanie funkcji. Oto przykład wejścia dwóch wektorów:
^------>
|
|
|
x
Oznacza to zmianę o 4 jednostki na północ i 7 jednostek na wschód. Punkt początkowy każdego wejścia będzie reprezentowany przez x
(dziesiętny 120
).
Wszystkie wektory są liniami poziomymi lub pionowymi.
Każdy wektor ma jeden z tych czterech punktów końcowych:
^v<>
i składa się z myślnika (-
dziesiętnie 45) lub pionowego paska (|
dziesiętnie 124).Puste punkty na płaszczyźnie są wypełnione spacjami (
dziesiętnie 32).
Dane wejściowe mogą być pojedyncze
x
.Sąsiadujące wektory są zawsze prostopadłe do siebie.
Wszystkie wektory są od końca do końca.
Wynik
Będzie to przemieszczenie wynikowego punktu (odległość od punktu początkowego) i stopień, w jakim się przesunął, względem punktu początkowego.
Dla powyższego wejścia dane wyjściowe powinny być 8.06
jednostkami i 60.3
stopniami. Każda powinna mieć dokładnie 3 znaczące liczby. Oto kilka przykładów liczb z 3 cyframi znaczącymi:
- 1,00
- 60,1
- 453
- 7,08
- 4.50
- 349
Wszystkie pomiary jednostkowe będą <= 999
.
Liczby te powinny być wyprowadzane w poniższym formacie. To używa liczb z góry.
8.06 units @ 60.3 degrees
Po tym może następować pojedyncza spacja lub znak nowej linii.
Jeśli dane wejściowe są pojedyncze x
, bez przesunięcia, a tym samym bez kąta przesunięcia, dane wyjściowe powinny być pustą linią (pojedynczy znak nowej linii) lub mieć następujący format:
0 units @ - degrees
Jeśli próbujesz zakwalifikować się do premii, kierunek powinien również być -
.
W przypadku, gdy bonusy 2, 3 lub oba zostaną zrealizowane, wynik powinien być zgodny z poniższym modelem i podlegać takim samym ograniczeniom jak powyżej.
8.06 units @ 60.3 degrees NE
Stopnie należy mierzyć zgodnie ze standardową płaszczyzną.
90
135 | 45
\|/
180 ---x---- 0
/|\
225 | 315
270
0
stopnie to wschód, 1 - 89
stopnie to północny wschód, 90
to północ, itd.
Bonusy
Poniższe są warte łącznie -50%.
Odbierz premię -10% za każdy dodatkowy wektor, który można obsłużyć. Premię tę można zastosować maksymalnie 3 razy. Wektory nigdy się nie nakładają ani nie krzyżują.
Weź bonus -10%, jeśli twój wynik zawiera główny kierunek kąta (północ, południe, wschód, zachód).
Odbierz premię -10%, jeśli twój wynik zawiera pośrednie kierunki kąta (północny wschód, północny zachód, południowy wschód, południowy zachód).
Przykłady
W:
x---->
|
v
Na zewnątrz:
5.39 units @ 338 degrees
Opcjonalnie SE
W:
<--------------^
|
|
x
Na zewnątrz:
15.3 units @ 169 degrees
Opcjonalnie NW
W:
x
|
|<-----^
| |
v------>
Na zewnątrz:
2.24 units @ 297 degrees
Opcjonalnie SE
Przykłady (wiele wektorów)
W:
x--->
|
|
v----------->
Na zewnątrz:
16.3 units @ 349 degrees
Opcjonalnie SE
W:
<-------^
| |
| |
v |
|
|
x
Na zewnątrz:
8.54 units @ 159 degrees
Opcjonalnie NW
W:
^-->
| |
| v
|
<--------x
Na zewnątrz:
6.32 units @ 162 degrees
Opcjonalnie NW
x
? Jaka jest granica między północą a północnym zachodem?x-->
. Czy wektory mogą się krzyżować?x
. Może być ich więcej niż dwa (przy próbie uzupełnienia bonusu), ale nie mniej. Pracuję nad przykładami dla wielu wektorów. W żadnym wejściu wektory się nie krzyżują. @ThomasKwaOdpowiedzi:
JavaScript (ES6), 305 bajtów - 50% bonus = 152,5 wyniku
Wyjaśnienie
Wejście musi być wypełnione spacjami. Wykorzystuje wszystkie bonusy.
Test
Pokaż fragment kodu
źródło
Python 2, 238,5 (
594562482477-50%) bajtówWyjaśnienie
Znajduje pozycję początkową i końcową, patrząc na każdy znak na wejściu.
Start jest
x
Koniec można znaleźć, patrząc na każdą strzałkę (
<>^v
) i ich sąsiadów. Jeśli sąsiedzi kontynuują wektory, zignoruj. W przeciwnym razie to koniec.Spójrz na sąsiadów prostopadłych do kierunku strzałki.
Jeśli zawierają linię prostopadłą, jest to wektor ciągły.
Przykłady (
_
wskazuje spację):Ponieważ znaleziono punkt końcowy, może być dowolna liczba wektorów ( premia 30% ).
źródło
\n
jako przełomów ...input()
i odpowiednim opakowaniem danych wejściowych za pomocą „”, ale wydaje się, że nie ma żadnych zasad!