Мета
У цьому змаганні вам дають випадкову кімнату з однією свічкою всередині. Мета - написати найкоротшу програму (це гольф), яка визначає, які частини кімнати освітлюються свічкою, замінюючи темні плями на @
'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 \+-+
| @|
| @\ -@++
+------+
@
занадто нижній лівий кут ?