O desafio é implementar um programa de rastreamento de raios bidimensional, baseado em texto.
Fontes de luz branca são @
símbolos. R
, G
E B
são filtros de luz. /
e \
são espelhos com 80% de refletividade. ?
é um sensor de luz. >
, <
, ^
E V
combinar 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, #include
e using
directivas (mas não #define
) pode ser removida em linguagens de estilo C, #/usr/bin/perl -options
em 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 ow
de cima passa por issoR
, ob
de 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 issow
. E eu não quebrei nenhum espaçamento, pelo menos como renderizado no Chromium. Quanto a passar direto, minha edição pode esclarecer isso.Respostas:
Python,
602559614 caracteresEdit: fixo para que não precise de espaços à direita.
fonte
F #
fonte