Thách thức của bạn là lấy đầu vào là một dòng văn bản và xuất nó như thế này.
Đầu ra đầu vào
Đầu vào sẽ là một chuỗi chỉ chứa các ký tự ASCII có thể in được. Các ký tự đầu tiên hoặc cuối cùng sẽ không bao giờ là khoảng trắng và sẽ không bao giờ có hai khoảng trắng liên tiếp. Nó sẽ luôn dài ít nhất hai ký tự.
Đầu ra của bạn phải là cùng một chuỗi, được chuyển đổi thành màu cầu vồng như được mô tả bên dưới. Đầu ra có thể ở dạng hình ảnh (được lưu vào một tệp hoặc bằng cách nào đó có sẵn) hoặc đơn giản là nó có thể hiển thị kết quả trên màn hình (như cách thực hiện tham chiếu bên dưới).
Chuyển đổi
Để xác định màu nào mỗi chữ cái trong chuỗi sẽ trở thành, sử dụng thuật toán sau. Lưu ý rằng mỗi chữ cái là màu riêng của nó . Đây không phải là một gradient!
Nếu nhân vật này là một khoảng trắng:
- ... không thành vấn đề, bởi vì không gian thực sự không thể ... có màu. Đơn giản chỉ cần xuất ra một không gian.
Nếu không thì:
Đặt
i= chỉ mục của ký tự này trong chuỗi (dựa trên 0, vì vậy đối với chữ cái đầu tiên, đây là0), không tính khoảng trắng. Ví dụ: trong chuỗifoo bar, giá trị này sẽ4dành choa. Nói cách khác, đây là cách mà nhiều không gian đã gặp phải cho đến nay.Đặt
n= số lượng khoảng trắng trong chuỗi.Màu sắc của chữ cái này hiện có thể được thể hiện, trong hệ tọa độ hình trụ HSL , như [hue = (
i/n) * 360 °, bão hòa = 100%, độ sáng = 50%].
Lưu ý rằng các hướng này ngụ ý rằng đầu ra cho foovà f oophải giống hệt nhau, ngoại trừ một không gian được thêm vào sau f. Đó là, tất cả các chữ cái nên giữ lại màu sắc giống nhau.
Các quy tắc khác cho quy trình chuyển đổi được mô tả bên dưới, trong phần Quy tắc .
Thực hiện tham khảo
Điều này được viết bằng JavaScript và bạn có thể thử nó bằng cách nhấn nút "Chạy đoạn mã".
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;
}
Quy tắc
Khi tính toán giá trị Hue của một chữ cái, bạn gần như chắc chắn sẽ nhận được một số thập phân (không nguyên). Bạn có thể làm tròn số này đến số nguyên gần nhất, đặt sàn, lấy trần hoặc đơn giản là không làm tròn số nào cả.
Kích thước phông chữ phải có thể đọc được. Ở đây, đây được định nghĩa là phông chữ kích thước 10pt hoặc lớn hơn.
Bạn có thể sử dụng khung vẽ có chiều rộng cố định hoặc "vùng vẽ" để xuất văn bản, nhưng nó phải có thể phù hợp với ví dụ được đưa ra trong câu đầu tiên của bài đăng này.
Ghi điểm là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ giành chiến thắng.




