ゴール
このコンペティションでは、キャンドルが1本入ったランダムな部屋が与えられます。目標は、暗いスポットをに置き換えて、部屋のどの部分をキャンドルで照らすかを決定する最短のプログラム(これはゴルフです)を書くこと@です。プログラムは、STDINからのスペースを確保し、出力をSTDOUTに出力する必要があります。
入力/部屋の例
+------+
| C |
| +--+
| \ |
+---------+
ろうそくはで表されC、壁/ミラーは、で表され|、-、/、または\。壁自体は鏡です。部屋のコーナーはで表されます+。
部屋には斜めの壁はありません。また、部屋の外に光が漏れることはありません。
また、行の最初のキャラクターは常に部屋の外の壁の一部になります。各行の絶対的な最後のキャラクターは、部屋の反対側の壁になります。これら2つの間にキャラクターが部屋の外にいることはありません。
光と反射
キャンドルは、8つの基本的な方向(N、S、E、W、NE、SE、SW、およびNW)に8つの(レーザーのような)光線を放射します。以下に説明するように、これらの光線はミラーで反射します。
Old Direction of Travel | Mirror | New Direction
N S E W NE SE SW NW / E W N S -- -- -- --
N S E W NE SE SW NW \ W E S N -- -- -- --
N S E W NE SE SW NW | - - - - NW SW NE SW
N S E W NE SE SW NW - - - - - SE NE SW NE
A -は吸収される光を表します。光は常にCまたは+によって吸収されます。ミラーと同じスペースを占有している場合にのみ、ライトがミラーで反射することに注意することが重要です。これらのルールは、紙に反射を描くと理解しやすくなります。
出力例
出力として、プログラムは照明された部屋の画像を印刷する必要があります。暗いスポットはとして書き込まれ@、明るいスポットは空白のままで、ミラーは影響を受けません。上記の例では、出力は次のようになります。
+------+
| C |
|@ @ +--+
| @\ |
+---------+
これは、光線を引き出した場合、でマークされたスペースに到達しないことを意味します@。
その他の例
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@そうではありませんか?