O desafio
Dadas as duas cadeias de caracteres hexadecimais maiúsculas (ambos 6 caracteres, XXXXXX e YYYYYY) representando valores RGB (que vão desde 000000
a FFFFFF
inclusive), e uma diferente de zero positivo inteiro N, exiba uma transição linear de N + 2 cores geradas a partir de XXXXXX para YYYYYY isso resultaria em um gradiente de cor.
Exemplo
Entrada
FF3762
F08800
9
Resultado
Observe que em nosso exemplo, solicitei 9 etapas intermediárias entre as duas cores; portanto, 11 linhas serão exibidas da cor inicial à cor final
FF3762
FD3F58
FC474E
FA4F44
F9573A
F75F31
F66727
F46F1D
F37713
F17F09
F08800
Ressalvas
Enquanto eu segui um processo linear simples de derivar os valores inteiros para as cores provisórias antes de convertê-los novamente em hexadecimal, seus métodos podem variar. Por favor, considere as várias maneiras de arredondar / diminuir seus números de acordo.
Teste
Para tornar isso interessante, forneci um snippet para permitir o teste do seu código, inclusive um botão para fornecer duas cores aleatórias para testar seu código. A exibição de seus resultados é opcional, mas é incentivada!
c1=()=>('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6);
$("#col").click(function(){
alert("Your two colors are: "+c1()+" and "+c1()+".");
});
$("#colors").blur(function(){
$("#test").empty();
var colArr = $("#colors").val().split("\n");
for(c in colArr){
$("#test").append('<div class="tester" style="background-color:#'+colArr[c]+';">'+colArr[c]+'</div>')
}
});
.tester{height: 20px;
width: 60px;padding: 4px;border: 1px solid black;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="col">Your two colors</button><br />
<textarea id="colors"></textarea>
<div id="test">
</div>
1) Você pode acessar duas cores aleatórias para o seu teste clicando no botão "Suas duas cores". 2) O número de etapas intermediárias será o mesmo que o número de caracteres no seu nome de usuário PPCG, incluindo espaços, no caso de "WallyWest", seria 9 (conforme meu exemplo acima). 3) Execute seu código com as duas cores e o número e, depois de ter sua lista gerada, você poderá colar sua saída na área de texto e separá-la para obter o gradiente de cores gerado.
Meu exemplo é mostrado aqui:
Devo admitir, isso parece incrível!
Observação: como mencionei, mostrar o teste de sua saída usando o snippet é opcional, mas é recomendável! :)
Resultado
A saída da lista deve estar na forma de conjuntos N + 2 de números hexadecimais de 6 dígitos separados por feeds de linha (\ n), como mostrado no meu exemplo acima. A saída pode ser na forma de linhas separadas, lista separada por espaço / vírgula, uma matriz ou o que for mais adequado para o seu idioma ... (Obrigado @nimi pelo aviso) Lembre-se de que, se você planeja testar seu código com o snippet, no entanto, você separa cada "cor" que depende de você.
Regras
Isso é código-golfe, então a solução mais curta em bytes será coroada a vencedora. Sem brechas , naturalmente. A entrada deve aceitar as duas strings e um número (que, como eu disse, será equivalente ao número de letras no seu nome de usuário no PPCG, portanto, a saída resultante sempre terá no mínimo três linhas.
Respostas:
MATL , 31 bytes
Isso usa interpolação linear com arredondamento para baixo. O formato de entrada é
Experimente online!
Saída gráfica, 31 bytes
Este é o resultado para entradas
Experimente no MATL Online ! O intérprete é atualmente experimental. Se você não obtiver nenhuma saída, atualize a página e pressione "Executar" novamente.
fonte
JavaScript (ES6), 130 bytes
fonte
Dyalog APL , 44 bytes
Instruções para N , então B eginning-cor, então E encontrando-cor. Precisa o
⎕IO←0
que é padrão em muitos sistemas.h[
...]
indexe em h (que tem um valor quando terminarmos de avaliar o conteúdo do colchete)N←⎕
solicitação para N numérico (4)1+
adicione um a N (5)(
...)÷
use isso para dividir o resultado de ...⍞⍞
prompt para duas cadeias de caracteres ["7E0E7E", "FF3762"](
...)∘⍳¨
encontre os índices dos caracteres de cada string em ...⎕D,⎕A
D igits seguidos de A lphabeth←
atribuído a hagora temos "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E B←
atribua os índices a E e B [[7,14,0,14,7,14], [15,15,3,7,6,2]]-/
subtraia e coloque B de E [[-8, -1, -3,7,1,12]]o resultado até agora é [[-1,6, -0,2, -0,6,1,4,0,2,2,4]]]
(
...)×
multiplique isso por ...2+N
dois mais N (6)⍳
primeiros inteiros [0,1,2,3,4,5]isso nos dá [[0,0,0,0,0,0], [- 1,6, -0,2, -0,6,1,4,0,2,2,4], [- 3,2, -0,4, -1,2,2,8,0,4,4,8 ], ...]
B∘+¨
adicione B a cada [[15,15,3,7,6,2], [13,4,14,8,2,4,8,4,6,2,4,4], [11,8,14,6,1,8,9,8,6,4,6,8], ... ]⌊
arredondar para baixo [[15,15,3,7,6,2], [13,14,2,8,6,4], [11,14,1,9,6,6], ...]↑
transformar lista de listas em tabelaaqui indexamos em h , dando
que é o mesmo que
e imprime como
TryAPL online!
fonte
Pitão - 35 bytes
Horrivelmente jogado, desisti.
Experimente online aqui .
Exemplo:
fonte
7cb472 93fb8a 8
e recebido apenas 10 linhas de saída ao testar seu código?93fb8a
... Seu código produziu duas linhas do mesmo valor?PowerShell v2 +,
176159150 bytesPega a entrada como duas strings e um número e, em seguida, converte a string inicial em uma matriz de strings divididas em cada dois caracteres, armazenando-a em
$x
. Em seguida, produzimos$a
como nossa seção inicial e fazemos o loop de++$n
para1
(para garantir o posicionamento correto da cerca).Cada iteração define o auxiliar
$j
como o número atual (usado posteriormente para garantir que tenhamos o número certo de etapas entre o local em que estamos atualmente no nosso destino) e calcula a próxima etapa com base em um loop$x
.Cada loop interno é apenas uma atribuição. Estamos configurando
$x
no local apropriado igual a uma nova string"{0:x2}"
usando o-f
operador ormat. Ox2
aqui especifica uma saída hexadecimal de dois dígitos e a entrada é o lado direito do-f
operador. O PowerShell possui um operador hexadecimal nativo para decimal0x
, portanto, essa longa expressão aninhada por parênteses está usando esse operador para converter o hex atual em números, subtraindo-o para encontrar a diferença que ainda está por vir (feito dividindo dinamicamente$b
aqui, como fizemos para$a
, e usando o módulo para selecionar o elemento correto), dividindo pelas$j
etapas restantes, convertendo para um[int]
(O PowerShell faz o arredondamento do banqueiro por padrão) e subtrai essa contagem de etapas do hexadecimal atual para obter qual deve ser o próximo hexadecimal.O resultado desse cálculo é armazenado novamente em
$x
três elementos hexadecimais. Isso é encapsulado em parênteses para criar uma cópia no pipeline e-join
editado em uma única sequência. Todas essas seqüências resultantes são deixadas no pipeline e a saída via implícitaWrite-Output
acontece na execução do programa.Exemplo
Recebi 0ba7c5 e 6c0e50 pelas minhas duas cores, e TimmyD tem 6 caracteres.
fonte
Python 2, 189 bytes
fonte
Atualização final [Groovy] (199 bytes) - conforme solicitação
Não golfe
Golfe
Experimente a final aqui: https://groovyconsole.appspot.com/script/5130696796405760
VERSÕES ANTIGAS ABAIXO, DECLINADAS PELA OP
Groovy (123 bytes)
Golfe
Não golfe
Entradas
Exemplo de saída
resulta em
Tente você mesmo: https://groovyconsole.appspot.com/script/5184465357766656
Com conversões hexadecimais incluídas
Acho que estou trapaceando também ... Aqui está o script com o uso de hex:
Novo código com conversões hexadecimais:
188 caracteres quando jogavam golfe:
Saída para 000000 a FFFFFF e 16 (comprimento do nome de usuário)
fonte
{s-> s.split("(?<=\\G.{2})").collect{Integer.parseInt(it,16)}}('FFFFFF')
Resultados em [255,255,255] Posso adicionar 62 bytes ao meu código usando essa conversão, se você realmente quiser.R, 68 bytes
Há uma função interna que interpola duas cores:
Entrada:
Saída: um vetor com valores
A especificação de cores em R requer um símbolo de hash.
Vamos traçar algo, como uma função:
fonte
FF3762 F08800 15
?C,
175169168 bytesUngolfed:
Obrigado ao @ h-walters por remover 5 bytes!
fonte
puts
sintaxe faz de novo?printf()
, mas não formata, apenas imprime a sequência especificada e adiciona uma nova linha.puts("")
para a terceira parte do primeiro loop for (;
depois de se tornar um,
antes) ... +0 bytes. No entanto, isso permite remover os chavetas após o segundo loop ... -2 bytes. Você pode salvar outro byte removendo 3 dej<3
e substituindo-o por suaprintf
instrução (isso é sorrateiro ... printf retornará apenas 2, mas ainda precisará avaliar pela terceira vez).0
inj=0
. Quando tudo estiver pronto, seu programa deverá ser 5 bytes mais curto e pelo menos 50% mais estranho.sh + ImageMagick, 81 bytes
uso:
("profundidade 8" não é necessário se o seu IM for compilado com 8bpp como padrão)
fonte