ความท้าทายของคุณคือการป้อนข้อความเป็นบรรทัดและส่งออกเช่นนี้
อินพุต / เอาต์พุต
อินพุตจะเป็นสตริงที่มีอักขระ ASCII ที่พิมพ์ได้เท่านั้น อักขระตัวแรกหรือตัวสุดท้ายจะไม่เว้นวรรคและจะไม่มีเว้นวรรคสองตัวในแถว มันจะมีความยาวอย่างน้อยสองตัวอักษร
ผลลัพธ์ของคุณควรเป็นสตริงเดียวกันโดยแปลงเป็นสีรุ้งตามที่อธิบายไว้ด้านล่าง ผลลัพธ์อาจอยู่ในรูปแบบของภาพ (บันทึกไปยังไฟล์หรือมีไว้เป็นอย่างอื่น) หรืออาจแสดงผลลัพธ์บนหน้าจอ (เป็นการดำเนินการอ้างอิงด้านล่าง)
การแปลง
ในการกำหนดสีตัวอักษรแต่ละตัวในสตริงควรใช้อัลกอริทึมต่อไปนี้ โปรดทราบว่าแต่ละตัวอักษรเป็นสีของตัวเองแต่ละ นี่ไม่ใช่การไล่ระดับสี!
หากตัวละครนี้เป็นช่องว่าง:
- ... ไม่สำคัญเพราะช่องว่างไม่สามารถ ... มีสีได้ เพียงแค่ออกพื้นที่
มิฉะนั้น:
อนุญาต
i= ดัชนีของตัวละครนี้ในสตริง (ตาม 0 ดังนั้นสำหรับตัวอักษรตัวแรกนี่คือ0) ไม่นับช่องว่าง ยกตัวอย่างเช่นในสตริงfoo barค่านี้จะเป็นสำหรับ4aกล่าวอีกนัยหนึ่งนี่คือจำนวนของพื้นที่ที่ไม่ได้รับการพบอนุญาตให้
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;
}
กฎระเบียบ
เมื่อคำนวณค่าฮิวของตัวอักษรคุณจะได้ตัวเลขทศนิยม (ไม่ใช่จำนวนเต็ม) คุณอาจปัดเศษนี้เป็นจำนวนเต็มที่ใกล้ที่สุดปูพื้นเพดานหรือไม่ปัดเลยก็ได้
ขนาดตัวอักษรต้องอ่านได้ ที่นี่กำหนดเป็นแบบอักษรขนาด 10 พอยต์ขึ้นไป
คุณอาจใช้ผืนผ้าใบที่มีความกว้างคงที่หรือ "พื้นที่การวาดภาพ" เพื่อเอาท์พุทข้อความ แต่ต้องสามารถใส่ตัวอย่างที่ให้ไว้ในประโยคแรกของโพสต์นี้
การให้คะแนนคือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ




