O desafio é implementar um programa de rastreamento de raios bidimensional, baseado em texto.
Fontes de luz branca são @símbolos. R, GE Bsão filtros de luz. /e \são espelhos com 80% de refletividade. ?é um sensor de luz. >, <, ^E Vcombinar a luz na direção adequada (por exemplo, se um vermelho e um verde veio em uma >luz seria emitida para a direita e seria amarelo). Outros caracteres sem espaço em branco absorvem toda a luz. A luz é emitida a partir de @símbolos em quatro direções.
Quando o programa é executado, ele deve produzir saída igual à entrada, mas com raios rastreados. Como isso é bidimensional, e eu garanto na entrada que nenhum raio jamais se cruzará, não haverá problema com isso. Cada raio deve ser representado por uma letra; r = vermelho, g = verde, b = azul, c = ciano, m = magenta, y = amarelo, w = branco. Nunca haverá cores ternárias. A caixa é importante para diferenciá-la da entrada. Após essa saída, os valores da luz capturados pelos pontos de interrogação (em ordem de aparência, da esquerda para a direita, de cima para baixo) devem ser exibidos como porcentagens e cores. Por exemplo, esta entrada:
/ @
-
\R> ?
@B/
Deve dar a saída:
/wwwwwwwwwwwwwwwwww@w
w -
w\R>mmmmmmmmmmmmmmmmm?
w b
@B/
#1: 72% Magenta
Outro ponto importante a ser observado - quando duas cores são combinadas usando um "prisma" (as setas), a força da luz combinada se torna a força média das duas. A saída deve ser exatamente como especificado (por exemplo, #x: [x] [x] x% Cor ).
Se seu idioma não puder ler de STDIN e gravar em STDOUT, crie uma função (anônima ou lambda quando disponível) que aceite a entrada como argumento e retorne o resultado.
Diretivas para o compilador, estruturas necessárias ou recomendadas para todos ou a maioria dos programas criados no idioma etc. podem ser omitidas. Por exemplo, #includee usingdirectivas (mas não #define) pode ser removida em linguagens de estilo C, #/usr/bin/perl -optionsem Perl, e
Module Module1
Sub Main()
End Sub
End Module
no VB.NET, por exemplo. Se você importar namespaces ou adicionar diretivas de inclusão, observe-os em sua resposta.
Isso é difícil o suficiente agora? :)
>captura de luz passa diretamente por ela. E se o wde cima passa por isso R, o bde baixo deve. Finalmente (eu acho), você está errado sobre os raios não cruzarem. Para dar um exemplo de uma linha, qual seria a saída correta @R> B@?
@ no canto inferior esquerdo emite luz nas quatro direções, não é? Então, em particular, emite isso w. E eu não quebrei nenhum espaçamento, pelo menos como renderizado no Chromium. Quanto a passar direto, minha edição pode esclarecer isso.