Цель
В этом соревновании вам дают случайную комнату с одной свечой внутри. Цель состоит в том, чтобы написать самую короткую программу (это гольф), которая определяет, какие части комнаты освещаются свечой, заменяя темные пятна на @«s». Программа должна занять место в STDIN, а вывод - в STDOUT.
Пример ввода / Комната
+------+
| C |
| +--+
| \ |
+---------+
Свечи представлена с C, а стены / зеркала представлены с |, -, /или \. Сами стены являются зеркалами. Углы комнаты обозначены +.
В комнатах никогда не будет диагональных стен, и свет никогда не сможет выйти из комнаты.
Кроме того, первый персонаж в линии всегда будет частью стены вне комнаты. Абсолютным последним символом в каждой строке будет противоположная стена комнаты. Никакие персонажи между этими двумя не будут находиться за пределами комнаты.
Свет и отражение
Свеча испускает восемь (похожих на лазер) лучей света в восьми основных направлениях: N, S, E, W, NE, SE, SW и NW. Эти лучи света отражаются от зеркал, как описано ниже:
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
А -представляет поглощаемый свет. Свет всегда поглощается C или +. Важно отметить, что свет отражается от зеркала только тогда, когда он занимает то же пространство, что и зеркало. Эти правила намного легче понять, когда вы рисуете отражение на бумаге.
Пример вывода
В качестве вывода программа должна напечатать изображение освещенной комнаты с темными пятнами, написанными как @, световые пятна оставлены пустыми, а зеркала не пострадали. Для приведенного выше примера результат будет:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Это означает, что если вы вытянете лучи света, они никогда не достигнут пространства, отмеченного значком @.
Больше примеров
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@?