Tantangan Anda adalah mengambil input sebagai garis teks dan menampilkannya seperti ini.
Input output
Input akan berupa string yang hanya berisi karakter ASCII yang dapat dicetak. Karakter pertama atau terakhir tidak akan pernah menjadi spasi, dan tidak akan pernah ada dua spasi dalam satu baris. Panjangnya akan selalu setidaknya dua karakter.
Output Anda harus string yang sama, dikonversi ke warna pelangi seperti yang akan dijelaskan di bawah ini. Outputnya mungkin dalam bentuk gambar (disimpan ke file atau entah bagaimana dibuat tersedia), atau mungkin hanya menampilkan hasilnya di layar (seperti implementasi referensi di bawah ini).
Konversi
Untuk menentukan apa warna setiap huruf dalam string seharusnya, gunakan algoritma berikut. Perhatikan bahwa setiap huruf adalah warna masing-masing . Ini bukan gradien!
Jika karakter ini adalah spasi:
- ... tidak masalah, karena ruang tidak bisa benar-benar ... memiliki warna. Cukup output ruang.
Jika tidak:
Misalkan
i= indeks karakter ini dalam string (berbasis 0, jadi untuk huruf pertama, ini0), tidak menghitung spasi. Misalnya, dalam stringfoo bar, nilai ini adalah4untuka. Dengan kata lain, sejauh ini sudah berapa banyak ruang kosong yang ditemukan.Let
n= jumlah non-spasi dalam string.Warna surat ini sekarang dapat dinyatakan, dalam sistem koordinat-silindris HSL , sebagai [rona = (
i/n) * 360 °, saturasi = 100%, cahaya = 50%].
Perhatikan bahwa arah ini menyiratkan bahwa output untuk foodan f ooharus persis sama, kecuali untuk ruang tambahan setelah f. Artinya, semua huruf harus mempertahankan warna yang sama.
Aturan lebih lanjut untuk proses konversi dijelaskan di bawah ini, di bagian Aturan .
Implementasi referensi
Ini ditulis dalam JavaScript, dan Anda dapat mencobanya dengan menekan tombol "Run snippet".
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;
}
Aturan
Saat menghitung nilai Hue dari sebuah huruf, Anda hampir pasti akan mendapatkan angka desimal (non-integer). Anda bisa membulatkan ini ke bilangan bulat terdekat, melantai, mengambil langit-langit, atau tidak bulat sama sekali.
Ukuran font harus dapat dibaca. Di sini, ini didefinisikan sebagai font ukuran 10pt atau lebih besar.
Anda dapat menggunakan kanvas dengan lebar tetap atau "area gambar" untuk menampilkan teks, tetapi harus dapat mencocokkan dengan contoh yang diberikan pada kalimat pertama posting ini.
Skor adalah kode-golf , sehingga kode terpendek dalam byte akan menang.




