Завдання полягає у реалізації двовимірної програми трасування променів на основі тексту.
Джерелами білого світла є @
символи. 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% Колір ).
Якщо ваша мова не може читати з STDIN і писати в STDOUT, створіть функцію (анонімна або лямбда-версія, якщо вона доступна), яка приймає введення як аргумент і повертає результат.
Директиви щодо компілятора, структури, необхідні або рекомендовані для всіх або більшості програм, створених мовою тощо, можуть бути опущені. Наприклад, #include
і using
директиви (але не #define
) можуть бути видалені на мовах стилю С, #/usr/bin/perl -options
на Perl та
Module Module1
Sub Main()
End Sub
End Module
наприклад, у VB.NET Якщо ви імпортуєте простори імен або додаєте директиви, що включають, врахуйте їх у своїй відповіді.
Зараз це досить важко? :)
>
це захоплення світла, яке йде прямо повз нього. І якщо w
вершина проходить через це R
, то так само b
і знизу. Нарешті (я думаю) ви помиляєтесь, що промені не перетинаються. Щоб навести однорядковий приклад, яким би був правильний вихід @R> B@
?
@
внизу зліва випромінює світло у всіх чотирьох напрямках, чи не так? Так, зокрема, це випромінює w
. І я не порушив жодного інтервалу, принаймні, як це було зроблено в Chromium. Щодо того, щоб пройти прямо повз нього, моя редакція може зрозуміти це.