입력 한 텍스트를 한 줄로 입력하여 다음과 같이 출력해야합니다.
입출력
입력은 인쇄 가능한 ASCII 문자 만 포함하는 문자열이됩니다. 첫 번째 또는 마지막 문자는 공백이 아니며 행에 두 개의 공백이 없습니다. 항상 2 자 이상이어야합니다.
출력은 동일한 문자열이어야하며 아래 설명 된대로 무지개 색으로 변환해야합니다. 출력은 이미지 형식 (파일에 저장되거나 다른 방식으로 사용 가능하게 됨) 일 수도 있고 단순히 결과를 화면에 표시 할 수도 있습니다 (아래 참조 구현과 같이).
변환
문자열의 각 문자가 어떤 색이되어야하는지 결정하려면 다음 알고리즘을 사용하십시오. 참고 각 문자가 자신의 개별 색상입니다 . 이것은 그라디언트가 아닙니다!
이 문자가 공백 인 경우 :
- ... 공간은 실제로 색상을 가질 수 없기 때문에 중요하지 않습니다. 간단히 공간을 출력하십시오.
그렇지 않으면:
하자
i
(그래서 매우 첫 글자를 위해,이이며, 0 기반 = 문자열에서이 문자의 인덱스는0
공간을 계산하지). 예를 들어, 문자열foo bar
이 값이 될 것이다4
을 위해a
. 즉, 지금까지 발생한 비 공백 수입니다.n
문자열에 공백이 아닌 수를 보자 .이 문자의 색상은 이제 HSL 원통형 좌표계 에서 [hue = (
i
/n
) * 360 °, 채도 = 100 %, 명도 = 50 %] 로 표현할 수 있습니다 .
이 주 방향의 출력한다는 것을 의미 foo
하고 f oo
, 완전히 동일하게 애프터 추가 공간을 제외한다 f
. 즉, 모든 글자는 같은 색을 유지해야합니다.
변환 프로세스에 대한 추가 규칙은 아래의 규칙 섹션 에 설명되어 있습니다 .
참조 구현
이것은 JavaScript로 작성되었으며 "Run code 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;
}
규칙
문자의 색조 값을 계산할 때 거의 확실하게 10 진수 (정수가 아닌) 숫자를 얻게됩니다. 이것을 가장 가까운 정수로 반올림하거나, 바닥을 내거나, 천장을 취하거나, 전혀 반올림하지 않을 수 있습니다.
글꼴 크기를 읽을 수 있어야합니다. 여기서는 10pt 크기 이상의 글꼴로 정의됩니다.
고정 너비 캔버스 또는 "도면 영역"을 사용하여 텍스트를 출력 할 수 있지만 이 게시물의 첫 번째 문장에 제시된 예에 맞출 수 있어야합니다 .
스코어링은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.