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