(Эта проблема очень похожа, но эта текущая проблема имеет дополнительные сложности.)
Представьте себе двухмерную комнату, где стены покрыты плоскими зеркалами.
Внезапно луч света попадает в комнату, где отсутствует кусок стены! Световой луч танцует по комнате, отражаясь от настенных зеркал и в конце концов покидая комнату.
Логика
Вам дается 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, \]
(Пример бесконечного цикла, который больше не покинет комнату.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
Удачи!