Seu desafio é receber a entrada como uma linha de texto e produzi-la dessa maneira.
Entrada / saída
A entrada será uma sequência que contém apenas caracteres ASCII imprimíveis. O primeiro ou o último caracteres nunca serão espaços e nunca haverá dois espaços seguidos. Sempre terá pelo menos dois caracteres.
Sua saída deve ser a mesma string, convertida em cores do arco-íris, conforme descrito abaixo. A saída pode estar na forma de imagem (salva em um arquivo ou de alguma forma disponibilizada) ou pode simplesmente exibir o resultado na tela (como a implementação de referência abaixo).
Conversão
Para determinar a cor de cada letra na sequência, use o seguinte algoritmo. Observe que cada letra tem sua própria cor individual . Este não é um gradiente!
Se esse personagem for um espaço:
- ... não importa, porque os espaços não podem realmente ... ter uma cor de qualquer maneira. Basta imprimir um espaço.
De outra forma:
Let
i= o índice desse caractere na string (com base em 0, portanto, para a primeira letra0), sem contar os espaços. Por exemplo, na cadeiafoo bar, esse valor seria4para oa. Em outras palavras, é esse o número de não-espaços encontrados até agora.Let
n= o número de não espaços na string.A cor desta letra agora pode ser expressa, no sistema de coordenadas cilíndricas HSL , como [matiz = (
i/n) * 360 °, saturação = 100%, luminosidade = 50%].
Observe que essas instruções implicam que a saída fooe f oodeve ser exatamente a mesma, exceto por um espaço adicional após a f. Ou seja, todas as letras devem manter as mesmas cores.
Regras adicionais para o processo de conversão estão descritas abaixo, na seção Regras .
Implementação de referência
Isso está escrito em JavaScript e você pode experimentá-lo pressionando o botão "Executar trecho de código".
window.addEventListener('load', function() {
addRainbow('Your challenge is to take input as a line of text and ' +
'output it like this.');
});
// append this text rainbow-ified to the argument (document.body by default)
function addRainbow(text, el) {
(el || document.body).appendChild(makeRainbow(text));
}
// returns a <div> that contains the text in a rainbow font
function makeRainbow(text) {
var div = document.createElement('div');
var letterCount = text.replace(/ /g, '').length, spaceCount = 0;
text.split('').forEach(function(letter, idx) {
if (letter == ' ') ++spaceCount;
div.appendChild(makeLetter(letter, (idx - spaceCount) / letterCount));
});
return div;
}
// returns a <span> that contains the letter in the specified color
function makeLetter(letter, hue) {
hue = Math.floor(hue * 360);
var span = document.createElement('span');
span.appendChild(document.createTextNode(letter));
span.style.color = 'hsl(' + hue + ', 100%, 50%)';
return span;
}
Regras
Ao calcular o valor de Matiz de uma letra, você quase certamente obterá um número decimal (não inteiro). Você pode arredondar para o número inteiro mais próximo, colocar no chão, pegar o teto ou simplesmente não arredondar.
O tamanho da fonte deve ser legível. Aqui, isso é definido como uma fonte de tamanho 10pt ou superior.
Você pode usar uma tela de largura fixa ou "área de desenho" para produzir o texto, mas ele deve poder se encaixar no exemplo dado na primeira frase desta postagem.
A pontuação é código-golfe , portanto o código mais curto em bytes vencerá.




