Su desafío es tomar la entrada como una línea de texto y generarla de esta manera.
De entrada y salida
La entrada será una cadena que contiene solo caracteres ASCII imprimibles. El primer o el último carácter nunca serán espacios, y nunca habrá dos espacios seguidos. Siempre tendrá al menos dos caracteres de longitud.
Su salida debe ser la misma cadena, convertida a colores del arco iris como se describirá a continuación. La salida puede estar en forma de imagen (guardada en un archivo o de alguna manera disponible), o simplemente puede mostrar el resultado en la pantalla (como lo hace la implementación de referencia a continuación).
Conversión
Para determinar en qué color debe convertirse cada letra en la cadena, use el siguiente algoritmo. Tenga en cuenta que cada letra es su propio color individual . ¡Esto no es un gradiente!
Si este personaje es un espacio:
- ... no importa, porque los espacios no pueden ... tener un color de todos modos. Simplemente genera un espacio.
De otra manera:
Let
i= el índice de este carácter en la cadena (basado en 0, por lo que para la primera letra, esto es0), sin contar espacios. Por ejemplo, en la cadenafoo bar, este valor sería4para ela. En otras palabras, esta es la cantidad de no espacios que se han encontrado hasta ahora.Let
n= el número de no espacios en la cadena.El color de esta letra ahora se puede expresar, en el sistema de coordenadas cilíndricas HSL , como [hue = (
i/n) * 360 °, saturation = 100%, lightness = 50%].
Tenga en cuenta que estas instrucciones implican que la salida para fooy f oodebería ser exactamente la misma, excepto por un espacio adicional después de f. Es decir, todas las letras deben conservar los mismos colores.
Las reglas adicionales para el proceso de conversión se describen a continuación, en las Reglas sección .
Implementación de referencia
Esto está escrito en JavaScript, y puede probarlo presionando el botón "Ejecutar fragmento 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;
}
Reglas
Al calcular el valor de tono de una letra, es casi seguro que obtendrá un número decimal (no entero). Puede redondear esto al número entero más cercano, colocarlo en el piso, tomar el techo o simplemente no redondear en absoluto.
El tamaño de la fuente debe ser legible. Aquí, esto se define como una fuente de tamaño 10pt o mayor.
Puede usar un lienzo de ancho fijo o "área de dibujo" para generar el texto, pero debe poder ajustarse al ejemplo dado en la primera oración de esta publicación.
La puntuación es el código de golf , por lo que ganará el código más corto en bytes.




