想象一下一个二维房间,墙壁上镀有平面镜。
突然,一束光束射入房间,那里缺少一堵墙!光束在房间周围跳舞,被壁镜反射,最终再次离开房间。
逻辑
您将得到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, \]
一个不会再离开房间的无限循环示例。)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
祝好运!