Цель
В этом соревновании вам дают случайную комнату с одной свечой внутри. Цель состоит в том, чтобы написать самую короткую программу (это гольф), которая определяет, какие части комнаты освещаются свечой, заменяя темные пятна на @
«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 \+-+
| @|
| @\ -@++
+------+
@
?