一间镜子


18

(此挑战非常相似,但当前的挑战具有更多的复杂性。)


想象一下一个二维房间,墙壁上镀有平面镜。

突然,一束光束射入房间,那里缺少一堵墙!光束在房间周围跳舞,被壁镜反射,最终再次离开房间。

逻辑

您将得到5个变量:W,H,X,YZ ^
现在,它们是什么意思?

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, \] 一个不会再离开房间的无限循环示例。)

+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+

祝好运!

Answers:


5

木炭,55字节

BNNJNNPψ↷⎇⁼δ/⎇∧⁻⁻θ¹ζIε⁷I3⎇∧IζIε⁵I1W¬℅KK«¹F³¿∧κ℅KK«↷κ¶↷κ

在线尝试!链接是详细版本的代码。编辑:我不知道为什么,但是该代码现在无法正常工作。是一个经过调整的版本。原始代码说明:

BNN

画外盒。

JNNPψ

将光标移动到入口点,然后在该点上的框中打一个孔,这样便成为背景。

↷⎇⁼δ/⎇∧⁻⁻θ¹ζIε⁷I3⎇∧IζIε⁵I1P

旋转到适当的方向以打印初始线段。

W¬℅KK«¹

当光标在孔上时,绘制下一个线段。

F³¿∧κ℅KK«↷κ¶↷κ

寻找一个孔,在其中绘制下一个线段。这可以通过重复相同的代码3次来实现。第一次没有任何反应。第二次,如果光标不在孔上,它将向右旋转45°,然后向右移动一步,然后向右旋转45°。这具有将其沿一个轴反射的效果。第三次,如果光标仍不在孔上,它将向右旋转90°,然后向右移动一步,然后向右旋转90°。这具有改变到另一个轴的反射的效果。如果仍然没有孔,则说明已到达拐角或无限循环,因此外部循环将暂停。


1
为了使人们能够测试您的代码作品,可以在网上单独链接到打高尔夫球的代码,并附带详细版本。
trichoplax


@trichoplax 很简单
MD XF

@trichoplax TIO链接确实在输出中显示了高尔夫球代码,这是我从中复制和粘贴它的地方……
Neil

1
@trichoplax使用时,-v -sl它实际上是打印出来的翻译后的简洁代码,将被执行。当然,这确实取决于副谓词生成正确的简洁代码,因为如果没有,则即使原始冗长代码在技术上是正确的,生成的代码也会失败。
尼尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.