Wyzwanie polega na przyjęciu tekstu jako wiersza tekstu i wydrukowaniu go w ten sposób.
Wejście wyjście
Dane wejściowe będą ciągiem zawierającym tylko drukowalne znaki ASCII. Pierwsze lub ostatnie znaki nigdy nie będą spacjami i nigdy nie będzie dwóch spacji z rzędu. Zawsze będzie mieć co najmniej dwie postacie.
Twój wynik powinien być taki sam, przekonwertowany na kolory tęczy, co zostanie opisane poniżej. Wynik może być w postaci obrazu (zapisany w pliku lub w inny sposób udostępniony) lub może po prostu wyświetlić wynik na ekranie (tak jak w poniższej implementacji referencyjnej).
Konwersja
Aby ustalić, jaki kolor powinna mieć każda litera w ciągu, użyj następującego algorytmu. Pamiętaj, że każda litera ma swój indywidualny kolor . To nie jest gradient!
Jeśli ta postać jest spacją:
- ... to nie ma znaczenia, ponieważ przestrzenie tak naprawdę nie mogą ... mieć koloru. Po prostu wyjmij spację.
Inaczej:
Niech
i= indeks tego znaku w ciągu (oparty na 0, więc dla pierwszej litery to jest0), nie licząc spacji. Na przykład w ciągufoo barta wartość będzie4dlaa. Innymi słowy, tak wiele napotkano do tej pory spacji.Niech
n= liczba spacji w ciągu.Kolor tej litery można teraz wyrazić w układzie współrzędnych cylindrycznych HSL jako [odcień = (
i/n) * 360 °, nasycenie = 100%, jasność = 50%].
Zauważ, że te kierunki sugerują, że dane wyjściowe dla fooi f oopowinny być dokładnie takie same, z wyjątkiem dodanej spacji po f. Oznacza to, że wszystkie litery powinny zachować te same kolory.
Dalsze zasady dotyczące procesu konwersji opisano poniżej w sekcji Reguły .
Realizacja referencyjna
Jest to napisane w JavaScript i możesz spróbować, naciskając przycisk „Uruchom fragment kodu”.
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;
}
Zasady
Podczas obliczania wartości Barwy litery prawie na pewno otrzymasz liczbę dziesiętną (niecałkowitą). Możesz zaokrąglić to do najbliższej liczby całkowitej, umieścić ją na podłodze, wziąć sufit lub po prostu w ogóle nie zaokrąglić.
Rozmiar czcionki musi być czytelny. Tutaj jest to definiowane jako czcionka o rozmiarze 10pt lub większa.
Do wydrukowania tekstu możesz użyć płótna o stałej szerokości lub „obszaru rysowania”, ale musi on pasować do przykładu podanego w pierwszym zdaniu tego wpisu.
Punktacja to gra w golfa , więc wygra najkrótszy kod w bajtach.




