Weź dwuwymiarową siatkę i narysuj na niej kilka segmentów linii, które będą reprezentować lustra. Teraz wybierz punkt, aby umieścić teoretyczny laser i kąt, aby zdefiniować kierunek, w który wskazuje. Pytanie brzmi: jeśli podążasz ścieżką wiązki laserowej na określonej odległości, w jakim punkcie współrzędnych jesteś?
Przykład:
Na tym rysunku L
jest położenie lasera t
jest jego kąt (mierzona od dodatniej osi X) M1
, M2
i M3
są regulowane lusterka odcinka linii, i E
jest punktem na drodze wiązki laserowej po D = d1 + d2 + d3 + d4
jednostek, począwszy od L
.
Cel
Napisz najkrótszy program (w bajtach), które wyjścia E
podane L
, t
, D
, oraz listę luster.
(Użyj http://mothereff.in/byte-counter do liczenia bajtów.)
Format wejściowy
Dane wejściowe będą pochodzić ze standardowego wejścia w formacie:
Lx Ly t D M1x1 M1y1 M1x2 M1y2 M2x1 M2y1 M2x2 M2y2 ...
- Wszystkie wartości będą punkty odpowiadające tym regex pływających:
[-+]?[0-9]*\.?[0-9]+
. - Zawsze jest dokładnie jedna spacja między każdą liczbą.
- Wymagane jest stosowanie cudzysłowów wokół danych wejściowych.
t
jest w stopniach, ale niekoniecznie w[0, 360)
zakresie. (Jeśli wolisz, możesz zamiast tego użyć radianów, po prostu powiedz to w swojej odpowiedzi).D
może być ujemny, skutecznie obracając laser o 180 stopni.D
może również wynosić 0.- Może być dowolnie wiele kopii lustrzanych (w tym w ogóle żadnych).
- Kolejność serwerów lustrzanych nie powinna mieć znaczenia.
- Możesz założyć, że dane wejściowe będą wielokrotności 4 liczb. na przykład
Lx Ly t
czyLx Ly t D M1x1
są nieważne i nie będą testowane. Żadne dane wejściowe są również nieprawidłowe.
Powyższy układ można wprowadzić jako:
1 1 430 17 4.8 6.3 6.2 5.3 1.5 4.8 3.5 6 6.3 1.8 7.1 3
(Zwróć uwagę, że obraz został narysowany odręcznie, a te wartości są jedynie przybliżeniami. Wartości wejściowe Martina Büttnera z
1 1 430 17 4.8 5.3 6.2 4.3 1.5 4.8 3.5 6 6.3 1.8 7.1 3
spowoduje więcej kolizji, choć nie pasują do szkicu).
Format wyjściowy
Dane wyjściowe powinny przejść na standardowe wyjście w formacie:
Ex Ey
Są to również zmiennoprzecinkowe i mogą mieć postać wykładniczą.
Notatki
- Lustra mogą się przecinać.
- Obie strony lusterek są odblaskowe.
- Wiązka może trafić wiele razy w to samo lustro.
- Wiązka trwa wiecznie.
Niezdefiniowane przypadki
Możesz założyć, że w przypadkach, w których
- laser rozpoczyna się na odcinku linii lustrzanej
- promień lasera uderza w punkt końcowy lustra
- promień lasera uderza w przecięcie dwóch luster
są niezdefiniowane i nie będą testowane. Twój program może zrobić wszystko, jeśli wystąpią, w tym zgłosić błąd.
Premia
Dla zabawy przyznam 200 punktów premiowych za najwyżej ocenione zgłoszenie, które przedstawia graficzną reprezentację problemu (możesz nawet napisać interaktywny skrypt). Te bonusy nie muszą być rozgrywane w golfa i mogą być pobłażliwe przy przetwarzaniu danych wejściowych i wyjściowych. Różnią się one od rzeczywistych zgłoszeń golfowych, ale oba powinny zostać przesłane w tej samej odpowiedzi .
Uwaga: Tylko przesłanie odpowiedzi premiowej jest w porządku, po prostu nie będziesz akceptowaną odpowiedzią. Aby zostać zaakceptowanym, musisz dokładnie przestrzegać specyfikacji wejścia / wyjścia (np. Wyjście dotyczy tylko Ex Ey
, a nie obrazów) i być najkrótszym.