Возьмите 2-мерную сетку и нарисуйте на ней несколько отрезков, чтобы представить зеркала. Теперь выберите точку для размещения теоретического лазера и угол, чтобы определить направление, на которое он указывает. Вопрос в следующем: если вы следуете по пути лазерного луча на определенном расстоянии, в какой точке координат вы находитесь?
Пример:

На этом изображении, Lявляется расположение лазера, tявляется его угол (измеряется от положительной оси X), M1, M2, и M3все сегменты линии зеркала, и Eявляется точкой на пути лазерного луча после того, как D = d1 + d2 + d3 + d4блоков, начиная с L.
Цель
Написать кратчайшую программу (в байтах) , который выводит Eданные L, t, Dи список зеркал.
(Используйте http://mothereff.in/byte-counter для подсчета байтов.)
Формат ввода
Вход будет поступать со стандартного ввода в формате:
Lx Ly t D M1x1 M1y1 M1x2 M1y2 M2x1 M2y1 M2x2 M2y2 ...
- Все значения будут плавающей точку , соответствующей это регулярное выражение:
[-+]?[0-9]*\.?[0-9]+. - Между каждым числом всегда ровно один пробел.
- Требование кавычек вокруг ввода разрешено.
tв градусах, но не обязательно в[0, 360)диапазоне. (Если вы предпочитаете использовать радианы, просто скажите это в своем ответе.)Dможет быть отрицательным, эффективно поворачивая лазер на 180 градусов.Dтакже может быть 0.- Там может быть как угодно много зеркал (включая их вообще).
- Порядок зеркал не должен иметь значения.
- Вы можете предположить, что ввод будет кратным 4 числам. например,
Lx Ly tилиLx Ly t D M1x1являются недействительными и не будут проверены. Нет ввода также является недействительным.
Схема выше может быть введена как:
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
(Обратите внимание, что изображение было нарисовано от руки, и эти значения являются лишь приблизительными. Входные значения Мартина Бюттнера
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
даст больше столкновений, хотя они не соответствуют эскизу.)
Выходной формат
Вывод должен идти в стандартный вывод в формате:
Ex Ey
Они также являются поплавками и могут быть в экспоненциальной форме.
Заметки
- Зеркала могут пересекаться друг с другом.
- Обе стороны зеркал являются отражающими.
- Луч может попасть в одно и то же зеркало много раз.
- Луч продолжается вечно.
Неопределенные случаи
Вы можете предположить, что случаи, когда
- лазер запускается на отрезке зеркальной линии
- лазерный луч достигает конечной точки зеркала
- лазерный луч попадает на пересечение между двумя зеркалами
не определены и не будут проверены. Ваша программа может сделать что угодно, если это произойдет, в том числе выдать ошибку.
бонус
Просто ради интереса, я буду награждать 200 баллов за наивысшую оценку, которая выводит графическое представление проблемы (вы даже можете написать интерактивный сценарий). Эти бонусные представления не требуют участия в игре и могут быть снисходительны к тому, как обрабатываются ввод и вывод. Они отличаются от фактических представлений о гольфе, но оба должны быть представлены в одном и том же ответе .
Примечание: хорошо подать только бонусный ответ, вы просто не будете принятым ответом. Чтобы быть принятым, вы должны точно следовать спецификации ввода / вывода (например, вывод включает только Ex Eyизображения, а не изображения) и быть самым коротким.








