(Цей виклик дуже схожий, але цей поточний виклик має додаткові ускладнення.)
Уявіть двовимірну кімнату, де стіни обшиті плоскими дзеркалами.
Раптом промінь світла вдаряється в приміщення, де відсутній шматок стіни! Світловий промінь танцює по кімнаті, відбиваючись від настінних дзеркал, і врешті-решт знову виходить із кімнати.
Логіка
Вам дається 5 змінних: W, H, X, Y і Z .
Тепер, що вони означають?
W, H - розмір приміщення (включаючи стіни), W - ширина, а H - висота.
X, Y - координата, на якій стіна має отвір. Можна припустити, що це завжди знаходиться на стіновій плитці. Координати на основі 0, вісь X спрямована праворуч, а вісь Y спрямована вниз.
Z - єдиний символ, що представляє напрямок, по якому світло потрапляє в приміщення, \
або /
.
Кімната повинна бути складена з таких символів:
|
для горизонтальних стін-
для вертикальних стін+
для куточків
Приклад: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Тепер, коли у нас є кімната, давайте зруйнувати одну з настінних плиток, тож промінь світла потрапить у приміщення. Промені світла - це діагональні лінії, представлені символами \
та /
символами.
Замінимо настінну плитку на X = 2, Y = 0 на \
промінь світла.
+-\---+
| |
| |
+-----+
Вхідне світло рухається по діагоналі по кімнаті, поки не потрапив у дзеркальну стіну. Якщо б'є стіна, напрямок обертається вздовж осі стіни, і промінь рухається далі.
+-\---+
|\ \/\|
| \/\/|
+-----+
У цьому прикладі світловий промінь потрапляє до точки, де потрапляє кут стіни, що призводить до того, що промінь повністю повертається назад і рухається всю дорогу назад, врешті-решт залишаючи приміщення.
Ваше завдання
Напишіть програму, яка друкує кімнату та весь шлях світлового променя, поки вона знову не вийде з кімнати або повториться у нескінченну петлю.
Вхідні дані
Вхідні дані можуть бути отримані в будь-якому зручному форматі, але він повинен включати в себе 4 цілих числа W, H, X, Y і Z символів, наприклад [10, 8, 0, 3, \]
.
Ви можете припустити, що:
- W, H> = 3
- X, Y завжди розташовані біля стіни
- Z зможе містити лише значення
\
та/
.
Вихід
Ви можете вирішити, повернути чи рядок або безпосередньо на нього stdout
.
Він повинен містити стіну кімнати та промінь світла (визначений символами ASCII вище).
Правила
- Стандартні лазівки заборонені.
- Це код-гольф , тому найкоротший код у байтах будь-якою мовою виграє.
- Усі мови кодування, створені до публікації цього виклику, дозволені.
Приклади
Вхід: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Вхід: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Вхід: [10, 8, 0, 3, \]
(Приклад нескінченного циклу, який більше не вийде з кімнати.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
Удачі!