Os desafios dos camaleões são aparentemente ruins . Que pena, camaleões são criaturas bonitas. Hora de mudar!
Como todos sabemos, muitos camaleões possuem uma capacidade notável de se misturar com o ambiente ao mudar a cor de sua pele. Qual é também o objetivo deste desafio.
Desafio
Imagine um quadrado de nove pixels. Oito pixels são os arredores. No centro está o camaleão.
Como isso:
O camaleão tenta naturalmente se misturar com o ambiente. Isso é feito alterando sua cor para a média da dos pixels adjacentes. Então, nesse caso, o camaleão mudaria de cor para .
Objetivo
Dadas as cores dos pixels circundantes, produza a cor do camaleão.
A cor do camaleão é definida como o total de todo vermelho, verde e azul nos pixels ÷ 8.
Entrada
Uma matriz de valores de cores para os oito pixels circundantes, começando no canto superior esquerdo e continuando no sentido horário, da seguinte maneira:
[[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>]]
Você pode optar por receber a entrada de uma forma diferente, desde que consista em oito triplos de números decimais de 0 a 255.
Se você receber uma entrada de uma forma diferente, os números deverão ter um comprimento consistente ou um separador não numérico entre eles. Os triplos devem ter um caractere de separação, a menos que sejam preenchidos com 0 a 9 dígitos. (Por exemplo, 044200255044200255044200255044200255044200255044200255044200255044200255
é válido, também é 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255
e 44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255
, mas 4420025544200255442002554420025544200255442002554420025544200255
não é.)
Resultado
Uma matriz / string / etc. contendo as cores do pixel central (em decimal), assim:
[<red>,<green>,<blue>]
Caso você produza algo diferente de uma matriz: os números devem ter um comprimento consistente ou ter um separador não numérico entre eles. (Por exemplo, 044200255
é válido, também é 44 200 255
, mas 44200255
não é.)
Os números não podem conter pontos decimais, por exemplo, 44.0 200 255.0
é inválido.
Arredondamento
A saída deve ser arredondada para o número inteiro mais próximo. (As metades devem ser arredondadas para cima.) Por exemplo, se a soma de todo o vermelho for 1620 , você deverá produzir 203
, não 202
ou 202.5
.
Exemplos
As imagens são apenas ilustrativas. O pixel do meio é a saída, os pixels ao redor são a entrada.
Entrada:
[[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200]]
Resultado:
[200,200,200]
Entrada:
[[0,0,0],[255,255,255],[0,0,0],[255,255,255],[255,255,255],[0,0,0],[255,255,255],[0,0,0]]
Resultado:
[128,128,128]
Entrada:
[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,0]]
Resultado:
[83,125,103]
Entrada:
[[0,56,58],[65,0,200],[33,200,0],[60,33,0],[98,0,200],[0,28,220],[2,200,0],[99,0,5]]
Resultado:
[45,65,85]
As submissões podem ser um programa completo ou uma função. Aplicam-se as regras de E / S padrão e brecha .
Respostas:
MATL,
84 bytesExperimente online!
4 bytes salvos graças ao copo!
Explicação:
fonte
s8/
porXm
(ou seja,mean
abaixo das colunas). Além disso, você pode ser capaz de especificar a entrada como3 x 8
para começar e se livrar do3e!
YmYo
deve fazê-lo ... basta pegar a entrada como[[R,G,B];[R,G,B];...]
ponto e vírgula entre as linhas RGB.Yo
-se redondo, ou volta para mais próximo com os laços que está sendo arredondado para cima? O desafio quer o último.Python, 38 bytes
Arredonda a média (na direção do número inteiro mais próximo, com as metades arredondadas para cima) adicionando 4 à soma e depois dividindo o piso por 8 através do deslocamento de bits
>>3
.fonte
Gelatina , 5 bytes
Conjunto de teste . (Ligeiramente modificado para verificar todos os casos de teste de uma só vez.)
fonte
C,
15112310391Requer 24 parâmetros passados para o programa, na ordem RGBRGB ... e gera o trigêmeo RGB sem uma nova linha.
fonte
main(c,v)char**v;{
salvar 2 bytes? Também +1 para <3 no código fonte!Pitão , 8 bytes
Conjunto de teste .
fonte
Pyke, 7 bytes
Experimente aqui!
fonte
J, 11 bytes
Recebe a entrada como uma matriz 8x3 em que cada linha é um valor RGB
Explicação
fonte
JavaScript,
756455 bytesUma resposta JavaScript para você começar.
Editar: salvou 11 bytes graças ao Dendrobium e outros 9 graças ao Neil .
fonte
a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+7>>3)
[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,7]]
gera 83, 125, * 104 * em vez de 83, 125, * 103 * com o seu código.ceil
. 64 bytes:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
x+4>>3
deve arredondar corretamente.Lisp -
180179 bytesEDIT: Formatado para mais golfe.
Faz da maneira correta , eu acho. Não testado.
a
é apenas médiar
é o arredondamento adequado desse desafio, já que o Lispround
arredonda para o número par mais próximoc
faz o trabalho real, recebendo entradas no formato'((R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B))
e retornando uma'(R G B)
lista contendo a resposta.fonte
Nim ,
13412611510878 bytesDefine um procedimento anônimo, que requer que a entrada seja transmitida como uma sequência aninhada dupla e seja exibida como uma matriz de 3 elementos. O procedimento pode ser usado apenas como argumento para outro procedimento; para testar, use o seguinte wrapper:
Uma sequência Nim é uma matriz com
@
na frente, como@[1, 2, 3]
. Uma entrada para este procedimento pode ser:fonte
Japonês, 8 bytes
Tente
Alternativa, 9 bytes
Tente
fonte
Quarto (gforth) , 65 bytes
Experimente online!
Recebe entrada como argumentos de pilha (ordem rgb)
Explicação
Para cada um dos três canais de cores:
Código Explicação
fonte
Encantos Rúnicos , 41 bytes
Experimente online!
Utiliza 3 ponteiros de instruções para analisar a entrada na ordem correta (como os valores de entrada estão sempre na ordem
RGB, RGB,...
) e desde que cada um dos três IPs não se mesclem e não avance para o próximoi
comando read nput muito cedo (daí todos os espaços), ele funciona e economiza bytes, além de ter que girar continuamente a pilha para manter o valor correto no topo, a fim de calcular as somas.Tecnicamente, este código contém um erro no arredondamento correto dos
x.5
valores de algumas entradas, mas isso se deve ao método de arredondamento padrão usado pelo C # , que é arredondar para o número do evento mais próximo, em vez de para cima e devido a problemas na perda de precisão do ponto flutuante , e eu não tinha conhecimento desse problema antes de escrever esta resposta e verificar os casos de teste. Isso será corrigido em uma compilação futura , juntamente com algumas outras coisas, como essa exceção não tratada .Enquanto isso, essa modificação faz o ajuste necessário.
fonte