La tua sfida è prendere l'input come una riga di testo e generarlo in questo modo.
Input Output
L'input sarà una stringa che contiene solo caratteri ASCII stampabili. Il primo o l'ultimo personaggio non saranno mai spazi e non ci saranno mai due spazi di fila. Avrà sempre almeno due caratteri.
L'output deve essere la stessa stringa, convertita in colori arcobaleno come sarà descritto di seguito. L'output può essere in forma di immagine (salvato in un file o in qualche modo reso disponibile), oppure può semplicemente visualizzare il risultato sullo schermo (come fa l'implementazione di riferimento di seguito).
Conversione
Per determinare di che colore dovrebbe diventare ciascuna lettera nella stringa, utilizzare il seguente algoritmo. Nota che ogni lettera ha il suo colore individuale . Questo non è un gradiente!
Se questo personaggio è uno spazio:
- ... non importa, perché gli spazi non possono davvero ... avere un colore comunque. Basta generare uno spazio.
Altrimenti:
Let
i= l'indice di questo carattere nella stringa (basato su 0, quindi per la prima lettera, questo è0), senza contare gli spazi. Ad esempio, nella stringafoo bar, questo valore sarebbe4pera. In altre parole, questo è il numero di non spazi finora incontrati.Let
n= il numero di non spazi nella stringa.Il colore di questa lettera può ora essere espresso, nel sistema di coordinate cilindriche HSL , come [tonalità = (
i/n) * 360 °, saturazione = 100%, leggerezza = 50%].
Si noti che queste direzioni implicano che l'output per fooe f oodovrebbe essere esattamente lo stesso, ad eccezione di uno spazio aggiunto dopo il f. Cioè, tutte le lettere dovrebbero conservare gli stessi colori.
Ulteriori regole per il processo di conversione sono descritte di seguito, nella sezione Regole .
Implementazione di riferimento
Questo è scritto in JavaScript e puoi provarlo premendo il pulsante "Esegui frammento di codice".
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;
}
Regole
Quando si calcola il valore di tonalità di una lettera, si otterrà quasi certamente un numero decimale (non intero). Puoi arrotondarlo al numero intero più vicino, spostarlo, prendere il soffitto o semplicemente non arrotondare affatto.
La dimensione del carattere deve essere leggibile. Qui, questo è definito come un carattere di dimensione 10pt o superiore.
Puoi usare una tela a larghezza fissa o "area di disegno" per produrre il testo, ma deve essere in grado di adattarsi all'esempio dato nella prima frase di questo post.
Il punteggio è code-golf , quindi vincerà il codice più breve in byte.




