Задача состоит в том, чтобы реализовать двухмерную программу трассировки лучей на основе текста.
Источники белого света являются @
символами. R
, G
И B
являются светофильтры. /
и \
зеркала с отражающей способностью 80%. ?
это датчик света. >
, <
, ^
И V
объединить свет в нужном направлении (например , если один красный и один зеленый пришел в >
свет будет излучаться в направлении вправо и будет желтым цветом). Другие непробельные символы поглощают весь свет. Свет излучается из @
символов в четырех направлениях.
Когда программа запускается, она должна выводить то же, что и ввод, но с трассированными лучами. Поскольку это 2-мерное, и я гарантирую, что на входе никакие лучи не пересекутся, проблем с этим не будет. Каждый луч должен быть представлен буквой; 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% Color ).
Если ваш язык не может читать из STDIN и записывать в STDOUT, создайте функцию (анонимную или лямбда, если она доступна), которая принимает входные данные в качестве аргумента и возвращает результат.
Директивы для компилятора, структуры, требуемые или рекомендуемые для всех или большинства программ, созданных на языке, и т. Д. Могут быть опущены. Например, #include
и using
директивы (но не #define
) могут быть удалены в языках стиля C, #/usr/bin/perl -options
в Perl, и
Module Module1
Sub Main()
End Sub
End Module
в VB.NET, например. Если вы импортируете пространства имен или добавляете директивы include, запишите их в своем ответе.
Это достаточно сложно, сейчас? :)
>
захватывает свет, который проходит прямо мимо него. И если w
сверху проходит через это R
, то b
и снизу. Наконец (я думаю), вы ошибаетесь из-за того, что лучи не пересекаются. Чтобы привести пример в одну строку, для чего нужен правильный вывод @R> B@
?
@
внизу слева излучает свет во всех четырех направлениях, не так ли? Так, в частности, это излучает это w
. И я не нарушил интервалы, по крайней мере, как показано в Chromium. Что касается прохождения прямо мимо этого, мое редактирование может прояснить это.