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
não é#800000
.000000
eff0000
deve serb40000
(255*sqrt((0+1)/2)
) #Respostas:
JavaScript (ES6), 290 bytes
fonte
Pitão, 126 bytes
Média quadrática média quadrática obrigatória em vez da média aritmética direta.
Experimente online!
Saída de amostra:
fonte
Java,
702662 caracteresDuas funções jogadas:
Como ninguém pode ler isso: aqui estão as duas funções na versão não destruída em uma classe:
Aqui você tem um limite superior para seu próprio código. O uso é chamar
colorize
(ou c na versão golfed) e passar o texto e uma matriz de códigos de cores hexadecimais. A função retornará uma String com tags HTML, como o OP, portanto, você precisa de uma maneira de renderizar o HTML.O algoritmo é mais fácil como a pergunta parece. O primeiro caractere sempre obtém a primeira cor, o último sempre a última.
Se tivermos mais cores do que caracteres no texto, apenas iteramos sobre o texto e as cores e as aplicamos.A parte divertida é a que se desvanece: comecei descobrindo a que distância as cores estão no texto. Eu basicamente calculo a diferença de vermelho, verde e azul entre duas cores fornecidas e, em seguida, adiciono uma parte dessa diferença à primeira cor, dependendo de onde o caractere está entre as cores. Se deixar o intervalo de duas cores, começamos do novo com as próximas duas cores. Isso é repetido para todos, exceto o último caractere, que sabemos que é sempre a última cor. Isso dá um desbotamento muito bonito.Essa pergunta foi muito divertida! Obrigado!
Atualizações
Agora eu não manuseio todos os casos especialmente. Em vez disso, aparei as cores, se houver duas, e aplico a função fade a todas as cordas. Se houver mais cores do que texto, as cores serão aparadas e a função de desbotamento funcionará exatamente como um mapeamento simples.
fonte