Ihre Herausforderung besteht darin, die Eingabe als Textzeile zu verstehen und so auszugeben.
Input-Output
Die Eingabe ist eine Zeichenfolge, die nur druckbare ASCII-Zeichen enthält. Das erste oder letzte Zeichen wird niemals ein Leerzeichen sein, und es wird niemals zwei Leerzeichen in einer Reihe geben. Es wird immer mindestens zwei Zeichen lang sein.
Ihre Ausgabe sollte dieselbe Zeichenfolge sein, die in Regenbogenfarben konvertiert wurde, wie nachfolgend beschrieben wird. Die Ausgabe kann in Bildform erfolgen (in einer Datei gespeichert oder auf andere Weise verfügbar gemacht), oder sie zeigt das Ergebnis einfach auf dem Bildschirm an (wie in der folgenden Referenzimplementierung).
Umwandlung
Verwenden Sie den folgenden Algorithmus, um zu bestimmen, welche Farbe jeder Buchstabe in der Zeichenfolge haben soll. Beachten Sie, dass jeder Buchstabe eine eigene Farbe hat . Dies ist kein Farbverlauf!
Wenn dieses Zeichen ein Leerzeichen ist:
- ... spielt keine Rolle, da Leerzeichen sowieso keine Farbe haben können. Gib einfach ein Leerzeichen aus.
Andernfalls:
Let
i= der Index dieses Zeichens in der Zeichenfolge (0-basiert, also für den allerersten Buchstaben0), ohne Leerzeichen. In der Zeichenfolgefoo barwäre dieser Wert beispielsweise4für diea. Mit anderen Worten, so viele Nicht-Leerzeichen wurden bisher angetroffen.Let
n= Die Anzahl der Nicht-Leerzeichen in der Zeichenfolge.Die Farbe dieses Buchstabens kann nun im HSL-Zylinderkoordinatensystem ausgedrückt werden als [Farbton = (
i/n) * 360 °, Sättigung = 100%, Helligkeit = 50%].
Beachten Sie, dass diese Richtungen implizieren, dass die Ausgabe für foound f oogenau gleich sein sollte, mit Ausnahme eines zusätzlichen Leerzeichens nach dem f. Das heißt, alle Buchstaben sollten die gleichen Farben behalten.
Weitere Regeln für den Konvertierungsprozess werden unten im Abschnitt Regeln beschrieben .
Referenzimplementierung
Dies ist in JavaScript geschrieben, und Sie können es versuchen, indem Sie auf die Schaltfläche "Code-Snippet ausführen" klicken.
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;
}
Regeln
Wenn Sie den Farbtonwert eines Buchstabens berechnen, erhalten Sie mit ziemlicher Sicherheit eine Dezimalzahl (keine Ganzzahl). Sie können dies auf die nächste ganze Zahl runden, auf den Boden legen, die Decke nehmen oder einfach gar nicht runden.
Die Schriftgröße muss lesbar sein. Hier wird dies als Schriftgröße von 10pt oder mehr definiert.
Sie können eine Leinwand mit fester Breite oder einen "Zeichenbereich" verwenden, um den Text auszugeben, aber er muss in der Lage sein, dem im allerersten Satz dieses Beitrags angegebenen Beispiel zu entsprechen.
Das Scoring ist Code-Golf , also gewinnt der kürzeste Code in Bytes.




