Antigamente, todas as 1337 crianças usavam faders de texto nas salas de chat. Eu não sei sobre vocês, mas quero me sentir bem como eles. O único problema é que seus scripts e aplicativos antigos estavam fortemente acoplados ao software para o qual foram criados, então não posso simplesmente usar essa incrível funcionalidade onde quiser. Também quero que a solução seja facilmente portátil, para que você precise tornar o código o menor possível para caber no meu disquete (prefiro carregar apenas um disquete, mas se o seu código-fonte for muito grande Eu posso carregar mais de um : P ).
Entrada
- Uma lista de cores (rgb, hex, nomes etc.)
- Texto para formatar
Seu programa deve esperar que a lista de cores contenha pelo menos 2 cores.
O texto a ser formatado pode ter qualquer comprimento maior que zero e os caracteres serão limitados aos ascii imprimíveis. (Dica: entradas de texto mais longas podem exigir que você reutilize cores intermediárias para caracteres consecutivos)
Resultado
O texto de saída não deve diferir do texto de entrada de nenhuma outra maneira que não seja fonte e / ou marcação / estilo (Nota: se sua saída contiver marcação html, será necessário codificar html na entrada). Você pode produzir texto com marcação / estilo (tags de estilo html, cores do console etc.) ou uma imagem do texto desbotado. Todos os hexágonos de cores devem estar presentes na saída, a menos que a entrada não contenha caracteres suficientes para atender a esse requisito. Se for esse o caso, consulte as regras de prioridade para determinar quais hexadecimais de cores devem estar presentes em sua saída. A ordem ou essas cores em sua saída ainda devem ser a ordem de entrada.
Regras de prioridade de cores
- No caso de a entrada ser um caractere, a primeira cor será usada
- No caso de haver apenas dois caracteres, a primeira e a última cor serão usadas
- No caso de haver mais de três cores e mais cores do que caracteres, a primeira e a última cores devem ser priorizadas e, em seguida, o restante das cores na ordem de entrada.
- No caso de haver mais caracteres do que cores, os caracteres devem desaparecer de uma cor para a outra usando cores intermediárias
Exemplos (regras de prioridade 1-3, respectivamente):
# Cores | Cor 0 | ... Cor n | Texto
3 ff0000 0000ff ffff00 M
-> -> ->
3 ff0000 0000ff ffff00 hi
4 ff0000 0000ff ffff00 0fff00 sup
Para ficar claro, a cor do texto deve desaparecer de uma cor hexadecimal para a seguinte. O desbotamento não precisa ser perfeitamente uniforme, mas não deve ser uma mudança abrupta de cor, a menos que não haja caracteres suficientes para desbotar. Geralmente, esse desbotamento é alcançado escolhendo cores intermediárias para cada um dos caracteres, aumentando / diminuindo os valores de rgb em algum intervalo determinado pelo número de caracteres com os quais você deve trabalhar e pela diferença entre as cores. Por exemplo, se precisarmos de uma única cor entre (# ff0000) e (# 000000), poderemos escolher como fica no meio. A saída ideal parecerá bastante bonita.
Exemplo (regra de prioridade 4):
3 ff0000 ff7f00 f0ff00 To be or not to be, that is the question...
->
-OR-
<span style="color:#ff0000;">T</span><span style="color:#ff0600;">o</span><span style="color:#ff0c00;"> </span><span style="color:#ff1200;">b</span><span style="color:#ff1800;">e</span><span style="color:#ff1e00;"> </span><span style="color:#ff2400;">o</span><span style="color:#ff2a00;">r</span><span style="color:#ff3000;"> </span><span style="color:#ff3600;">n</span><span style="color:#ff3c00;">o</span><span style="color:#ff4300;">t</span><span style="color:#ff4900;"> </span><span style="color:#ff4f00;">t</span><span style="color:#ff5500;">o</span><span style="color:#ff5b00;"> </span><span style="color:#ff6100;">b</span><span style="color:#ff6700;">e</span><span style="color:#ff6d00;">,</span><span style="color:#ff7300;"> </span><span style="color:#ff7900;">t</span><span style="color:#ff7f00;">h</span><span style="color:#fe8500;">a</span><span style="color:#fe8b00;">t</span><span style="color:#fd9100;"> </span><span style="color:#fc9700;">i</span><span style="color:#fb9d00;">s</span><span style="color:#fba400;"> </span><span style="color:#faaa00;">t</span><span style="color:#f9b000;">h</span><span style="color:#f9b600;">e</span><span style="color:#f8bc00;"> </span><span style="color:#f7c200;">q</span><span style="color:#f6c800;">u</span><span style="color:#f6ce00;">e</span><span style="color:#f5d400;">s</span><span style="color:#f4da00;">t</span><span style="color:#f4e100;">i</span><span style="color:#f3e700;">o</span><span style="color:#f2ed00;">n</span><span style="color:#f1f300;">.</span><span style="color:#f1f900;">.</span><span style="color:#f0ff00;">.</span>
Na sua resposta, especifique como sua saída deve ser exibida (como html, em um console, como uma imagem etc.).
* Todos os fundos pretos são apenas para ênfase de cores e não são necessários
Pontuação
Isso é código-golfe , então a resposta mais curta (em bytes) vence.
Se você conseguir adicionar fade a personagens individuais, eu sempre pensarei que você é legal (mas nenhum bônus para marcar, pois isso não será justo para alguns langs)
000000
e ff0000
deve ser b40000
( 255*sqrt((0+1)/2)
) #
#000000
e#ff0000
não é#800000
.