挑战是要实现基于文本的二维射线跟踪程序。
白光的来源是@
符号。R
,G
并B
是光的过滤器。/
和\
与80%的反射率的反射镜。?
是一个光传感器。>
,<
,^
并V
在适当的方向相结合的光(例如,如果一个红色和一个绿色来到一个>
的光将朝向右侧被发射,这将是黄色)。其他非空白字符会吸收所有光。@
符号从四个方向发射光。
运行该程序时,它应产生与输入相同的输出,但带有光线。因为这是二维的,并且我保证输入中不会有任何光线交叉,所以不会有任何问题。每条射线应以字母表示;r =红色,g =绿色,b =蓝色,c =青色,m =品红色,y =黄色,w =白色。永远不会有任何三元颜色。套管对于区分输入和输入很重要。在输出之后,应将问号捕获的光的值(从出现的顺序,从左到右,从上到下)输出为百分比和颜色。例如,此输入:
/ @
-
\R> ?
@B/
应该给出输出:
/wwwwwwwwwwwwwwwwww@w
w -
w\R>mmmmmmmmmmmmmmmmm?
w b
@B/
#1: 72% Magenta
还要注意的另一个重要点-当使用“棱镜”(箭头)组合两种颜色时,组合后的光的强度变为两种颜色的平均强度。输出必须完全符合规定(例如#x:[x] [x] x%Color)。
如果您的语言无法从STDIN读取并向STDOUT写入,请创建一个函数(将匿名或lambda可用)接受该输入作为参数并返回结果。
可以省略针对编译器的指令,使用该语言创建的所有或大多数程序所需或推荐的结构等。例如,#include
和using
指令(但不是#define
)可以在C语言风格的语言被除去,#/usr/bin/perl -options
在Perl和
Module Module1
Sub Main()
End Sub
End Module
例如在VB.NET中。如果您导入名称空间或添加包含指令,请在您的答案中注意它们。
现在够难了吗?:)
与Code Golf相关:堆栈溢出时的激光。
—
dmckee ---前主持人小猫,
在您的示例中,镜像的行为没有任何意义。您有一个\(转义符被打断了)会影响光线,光线会直接越过它。光线与镜子排在同一行,并留在同一列,反之亦然,这似乎更为明智。同样,
—
彼得·泰勒
>
正在捕获的光线会直接越过它。如果w
从顶部开始通过,则底部也R
应该通过b
。最后(我认为),您对光线不交叉是错误的。举一个单行示例,正确的输出是@R> B@
什么?
为什么要添加随机w并破坏所有间距?光线并没有直射过去,不确定您的意思。
—
Ry- 2011年
@minitech,它
—
彼得·泰勒
@
的左下角在所有四个方向发光,不是吗?因此,特别是它发出了w
。而且我没有打破任何间距,至少在Chromium中是如此。至于直截了当,我的编辑可能会清除它。
minitech:作为对未来任务的建议:首先在Sandbox或Puzzle Lab中征求意见,这足以消除工作中的矛盾和早期问题。这样,将任务发布到此处后,您将知道其他任务已经对其进行了检查(并可能已实施)。
—
乔伊,