Ваша задача полягає в тому, щоб сприйняти текст як рядок тексту та видати його таким чином.
Введення-виведення
Введенням буде рядок, що містить лише символи для друку ASCII. Перший або останній символи ніколи не будуть пробілами, і ніколи не буде двох пробілів поспіль. Це завжди буде не менше двох символів.
Вихід повинен бути тим самим рядком, перетвореним у кольори веселки, як буде описано нижче. Вихід може бути у формі зображення (зберігається у файлі чи якимось іншим чином доступний), або він може просто відображати результат на екрані (як це робиться в нижченаведеній реалізації).
Перетворення
Щоб визначити, яким кольором має стати кожна літера в рядку, скористайтеся наступним алгоритмом. Зауважте, що кожна літера має свій індивідуальний колір . Це не градієнт!
Якщо цей символ є пробілом:
- ... це не має значення, оскільки простори не можуть насправді ... мати колір все одно. Просто виведіть пробіл.
Інакше:
Нехай
i= індекс цього символу в рядку (на основі 0, тому для першої літери це0), не рахуючи пробілів. Наприклад, у рядкуfoo barце значення буде4дляa. Іншими словами, саме стільки непросторів зустрічалося досі.Нехай
n= кількість не пропусків у рядку.Колір цього листа тепер може бути виражений у циліндрично-координатній системі HSL як [hue = (
i/n) * 360 °, насиченість = 100%, легкість = 50%].
Зауважте, що ці вказівки означають, що результат для fooта f ooповинен бути абсолютно однаковим, за винятком додаткового простору після f. Тобто всі літери повинні зберігати однакові кольори.
Подальші правила процесу перетворення описані нижче, у розділі Правила .
Довідкова реалізація
Це написано на JavaScript, і ви можете спробувати, натиснувши кнопку «Запустити фрагмент коду».
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;
}
Правила
Обчислюючи значення букви Hue, ви майже напевно отримаєте десяткове (не ціле число) число. Ви можете закруглити це до найближчого цілого числа, перекрити підлогу, взяти стелю або просто зовсім не округлити.
Розмір шрифту повинен бути читабельним. Тут це визначається як шрифт розміром 10 крап або більше.
Ви можете використовувати полотно фіксованої ширини або "зону малювання" для виведення тексту, але він повинен вміти відповідати прикладу, наведеному в першому реченні цього допису.
Підрахунок балів - це гольф-код , тому найкоротший код у байтах виграє.




