Votre défi est de prendre l'entrée comme une ligne de texte et de la produire comme ceci.
Entrée sortie
L'entrée sera une chaîne qui ne contient que des caractères ASCII imprimables. Le premier ou le dernier caractère ne sera jamais un espace et il n'y aura jamais deux espaces de suite. Il comportera toujours au moins deux caractères.
Votre sortie doit être la même chaîne, convertie en couleurs arc-en-ciel comme décrit ci-dessous. La sortie peut être sous forme d'image (enregistrée dans un fichier ou autrement mise à disposition), ou simplement afficher le résultat à l'écran (comme le fait l'implémentation de référence ci-dessous).
Conversion
Pour déterminer la couleur de chaque lettre de la chaîne, utilisez l'algorithme suivant. Notez que chaque lettre a sa propre couleur individuelle . Ce n'est pas un dégradé!
Si ce personnage est un espace:
- ... cela n'a pas d'importance, car les espaces ne peuvent pas vraiment ... avoir une couleur de toute façon. Générez simplement un espace.
Autrement:
Soit
i= l'index de ce caractère dans la chaîne (basé sur 0, donc pour la toute première lettre, c'est0), sans compter les espaces. Par exemple, dans la chaînefoo bar, cette valeur serait4pour lea. En d'autres termes, c'est le nombre de non-espaces qui ont été rencontrés jusqu'à présent.Soit
n= le nombre de non-espaces dans la chaîne.La couleur de cette lettre peut maintenant être exprimée, dans le système de coordonnées cylindriques HSL , comme [teinte = (
i/n) * 360 °, saturation = 100%, légèreté = 50%].
Notez que ces directions impliquent que la sortie pour fooet f oodoit être exactement la même, sauf pour un espace ajouté après le f. Autrement dit, toutes les lettres doivent conserver les mêmes couleurs.
D'autres règles pour le processus de conversion sont décrites ci-dessous, dans les règles section .
Implémentation de référence
Ceci est écrit en JavaScript, et vous pouvez l'essayer en appuyant sur le bouton "Exécuter l'extrait de code".
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;
}
Règles
Lors du calcul de la valeur de teinte d'une lettre, vous obtiendrez presque certainement un nombre décimal (non entier). Vous pouvez l'arrondir à l'entier le plus proche, le fixer au sol, prendre le plafond ou simplement ne pas arrondir du tout.
La taille de la police doit être lisible. Ici, cela est défini comme une police de taille 10pt ou supérieure.
Vous pouvez utiliser un canevas à largeur fixe ou une "zone de dessin" pour sortir le texte, mais il doit être en mesure de correspondre à l'exemple donné dans la toute première phrase de cet article.
La notation est le code-golf , donc le code le plus court en octets gagnera.




