안녕하세요 월드 레인보우


11

마크 업이 아닌 언어에서 색상을 다루는 것은 종종 문제를 복잡하게 만듭니다. 색상이 다른 언어로 어떻게 사용되는지 몇 가지 변형을보고 싶습니다.

이 경쟁의 목적은 무지개의 7 가지 색상으로 'Hello World'를 출력하는 것입니다.

Wikipedia에 따르면 이들은 7 가지 색상입니다.

Red      #FF0000 (RGB: 255, 0, 0)
Orange   #FF7F00 (RGB: 255, 127, 0)
Yellow   #FFFF00 (RGB: 255, 255, 0)
Green    #00FF00 (RGB: 0, 255, 0)
Blue     #0000FF (RGB: 0, 0, 255)
Indigo   #6600FF (RGB: 111, 0, 255)
Violet   #8B00FF (RGB: 143, 0, 255)

규칙

  1. 프로그램은 'Hello World'를 출력해야합니다. (반드시 텍스트 일 ​​필요는 없지만 'Hello World'로 구별 할 수 있어야합니다)
  2. 각 글자는 다른 색이어야합니다.
  3. 색상은 어떤 순서로도 가능합니다.
  4. 7 가지 색상 각각을 한 번 이상 사용해야합니다. (주어진 색보다 더 많이 사용할 수 있습니다)
  5. 어떤 경우에도 마크 업 언어 사용하지 마십시오 .

승자는 문자 수가 가장 적은 사람이며 규칙을 따릅니다.

DART 로 작성된 경우 보너스 -1 자

나는 1 월 11 일에 우승자를 선택할 것이다 (내가; D를 기억한다면).

행운을 빕니다

수상자

나는 승자를 업데이트 한 실수 D :를했다.

1 일 stranac-Python, 60 자

2 일. 일 마리-카로 넨 펄 + GD, 146 자

모든 규칙을 준수하는 최단 길이.

브라우니 는 DART 답변 으로 JiminP가리 킵니다 .

답변:


7

파이썬, 60 자

이제 7 가지 색상과 "올바른"색상을 사용합니다.

ansi 이스케이프 시퀀스를 사용합니다. 밑줄이있어 보이지 않는 공간이 아닙니다.

이 버전은 파이썬의 인쇄 방식으로 인해 여분의 공백을 인쇄하지만 공백은 약간의 문자를 절약하므로 거기에있는 것이 좋습니다.

for p in zip(range(7)*2,'Hello_World'):print'\033[3%im%s'%p,

MrZander가 요구 한 스크린 샷 : 여기에 이미지 설명을 입력하십시오


오류가 발생 했습니까? 모든 색상을 올바르게 사용했음을 증명하는 스크린 샷을 게시하십시오. "검은 색에서 흰색으로 8 가지 색상"은 7 가지 필수 색상을 사용한 것처럼 들리지 않습니다.
MrZander

@ MrZander : 내 답변을 업데이트했으며 지금 당신을 기쁘게하기를 바랍니다. Btw, 당신이 제공 한 6 번째 색이 정확한가요? 그것은 7과 거의 동일합니다.
stranac

Wikipedia에서 곧바로 나왔습니다. 저는 컬러 전문가가 아닙니다.
MrZander

2
이것은 사용자 정의 팔레트를 사용하여 작동합니다. 예를 들어,은 H검은 색의 이스케이프 코드를 사용하여 인쇄되므로 대부분의 터미널에서 보이지 않습니다.
hammar

12

매스 매 티카

ImageMultiply[ColorNegate[Graphics[Text[Style["Hello World",30]],ImageSize->190]],ColorData["Rainbow","Image"]]

규칙을 준수하지 않는다는 것을 알고 있습니다. 그러나 Mathematica의 이미지 처리 기능을 사용해 보았습니다.

스크린 샷 :

안녕하세요 월드 !!!!!!!


10

하스켈, 88 자

f(c,n)=putStr$"\27["++show n++"m"++[c]
main=mapM_ f$zip"Hello World\n"$35:cycle[31..36]

스크린 샷

이것은 ANSI 터미널 색상을 사용하며 그중 6 개만 있으며 주어진 정확한 색상과 일치하지 않을 수 있습니다 (터미널 설정에 따라 다름). 여기서 규칙을 약간 구부립니다.

거의 정확한 색상, 107 자의 약간 긴 버전

이 버전은 ANSI 색상 대신 xterm 색상을 사용합니다. 이것은 사용자 정의 팔레트에 의존하지 않으며 256 색 xterm 팔레트에서 찾을 수있는 가장 가까운 색상을 사용합니다.

f(c,n)=putStr$"\27[38;5;"++show n++"m"++[c]
main=mapM_ f$zip"Hello World\n"$cycle[196,208,226,46,21,57,93]

여기에 이미지 설명을 입력하십시오


7

파이썬, 261 자

C=((255,0,0),(255,127,0),(255,255,0),(0,255,0),(0,0,255),(111,0,255),(143,0,255))
print'P3 67 5 255'
for i in range(335):print'%d %d %d'%(C+C[2:])[i%67/6]if 0x4f7c938a00e7df7d12208a8aa0220820a34413d154044105f7e8828a28808820828cf04f39100e0417d1>>i&1 else'0 0 0'

사양을 정확하게 구현하여 ppm 이미지를 생성합니다. 결과는 gif로 변환되고 4 배로 확대됩니다.

여기에 이미지 설명을 입력하십시오


잘 했어 이해하기 힘든 시간이 걸렸습니다.
cemper93

2
n=255;C=((n,0,0),(n,127,0),(n,n,0),(0,n,0),(0,0,n),(111,0,n),(143,0,n))
Steven Rumbalski

7

Perl-> ANSI 터미널, 53 자

s//Hello World/;s/./\e[3${[5,(1..6)x2]}[pos]m$&/g;say

이것은 Hammar의 Haskell 솔루션 과 정확히 동일한 출력을 생성합니다 . 을 사용 say하므로 perl 5.10+ 및 -M5.010(또는 -E) 스위치가 필요합니다. 나이가 perls를 들어, 교체 say와 함께 print. \e리터럴 ESC 문자 로 대체 하면 사소한 한 문자를 줄일 수 있지만 코드를 읽고 편집하기가 훨씬 어려워집니다.

편집 : Hammar의 출력과 정확하게 일치하고 실제로 6 가지 가능한 터미널 색상을 모두 표시하기 위해 두 개의 문자가 추가되었습니다. (이전 버전에서는 컬러 6 = 시안 색으로 인쇄 된 문자 만 공백이었습니다.)

스크린 샷 :

안녕하세요 월드


편집 2 : 경우 사용자 정의 터미널 팔레트 사용 (과 공간에 대한 밑줄하는) 허용, 나는 쉽게 단지 50 문자와 사양에 주어진 정확한 색상을 재현 할 수 있습니다 :

$_=Hello_World;s/./\e[3${[(0..6)x2]}[pos]m$&/g;say

스크린 샷 :

Hello_World


3

Perl-> HTML, 99 자

@c=(("00")x5,77,(ff)x5,77)x2;print"<font color=#",@c[$i+8,$i+4,$i++],">$_"for split//,"Hello World"

스크린 샷 :

안녕하세요 월드

HTML은 아마도 유효성 검사기를 통과하지 않지만 거의 모든 브라우저에서 이해해야합니다. 이 코드는 나열된 정확한 RGB 색상을 생성하지는 않지만 매우 가까워집니다. 구체적으로 글자의 색상은 다음과 같습니다.

H  Red           #FF0000
e  Orange        #FF7700
l  Yellow        #FFFF00      
l  Chartreuse    #77FF00
o  Green         #00FF00
  (Spring green  #00FF77)
W  Cyan          #00FFFF
o  Sky blue      #0077FF
r  Blue          #0000FF
l  Indigo        #7700FF
d  Violet        #FF00FF

검정색 배경에서는 출력이 훨씬 좋아 보이지만 명시 적으로 인쇄하면 <body bgcolor=black>28 개의 추가 문자가 필요합니다. 대신 동일한 효과를 얻도록 브라우저 설정을 조정할 수 있습니다. :-)


3
규칙 5를 충분히 구체적으로 지정하지 않았을 수도 있습니다. 다른 언어와 함께 마크 업을 사용하고 싶지 않았습니다. 그러나 어쨌든 매우 창의적인 코드입니다.
MrZander

3

펄 + GD, 146 자

다른 답변에 대한 의견에 따라 GD 라이브러리를 사용하여 이미지 파일을 직접 생성하는 솔루션이 있습니다.

use GD'Simple;move{$m=new GD'Simple 70,12}2,12;s//Hello World/;s/./fgcolor$m(((0)x5,127,(255)x5,127)x2)[$i+8,$i+4,$i++];string$m$&/eg;print$m->png

출력은 다음과 같습니다.

안녕하세요 월드

다시 한 번 검은 색 배경을 사용하는 것이 더 나아 보이지만 29 자 ( $m->bgcolor(0,0,0);$m->clear;)의 비용이 듭니다 .

편집 : 간접 객체 표기법과 몇 가지 다른 조정을 사용하여 20자를 줄이는 방법을 알아 냈습니다. 새 코드는 경고를 표시하지만 여전히 잘 실행됩니다.


그것은 더 좋아;)
MrZander

지금까지는 모든 규칙을 따르는 점 중 가장 낮은 문자 수입니다.
MrZander

3

추신 155 143

이것은 팔라티노가 팔라티노-로마의 줄임말 인 "그림"을 만드는 고스트 스크립트의 능력에 의존합니다.

/h{c 1 1 sethsbcolor}def/c 0 def
200 400 moveto/Palatino 36 selectfont
h{32 ne{/c c .14 add dup 1 gt{1 sub}if def}if pop
h}(Hello World!)kshow

1
나는 "시간"이 더 짧다고 생각하지만 ... 웃음.
luser droog

당신의 아이디어 중 일부를 훔쳤습니다 ...
Thomas W.

3

이 작업을 수행하는 몇 가지 다른 접근 방식

추신

첫 번째 : 가장 짧은 것 ( 89 ) :

9 9 moveto/Courier 9 selectfont
0{pop pop 
dup 1 1 sethsbcolor
.07 add}( Hello World)kshow

렌더링 결과

언 골프 :

9 9 moveto
/Courier 9 selectfont
0                       % hue
{                       % hue c1 c2
  pop pop               % hue
  dup 1 1 sethsbcolor   % hue
  .07 add               % newHue
}( Hello World)kshow

hsb 색상 공간을 사용하여 x 방향으로 색상을 계속 변경합니다. (HSB 색상을 사용하는 아이디어와 kshow는 luser droog에게 제공됩니다. 그의 항목을 참조하십시오!) MrZander가 제공 한 정확한 7 가지 색상을 사용하지 않습니다.

MrZander의 색상으로 제한 할 때 141 문자를 사용합니다.

9 9 moveto/Courier 9 selectfont(H e*l4l4oI  WIosrsl{d~)dup
0 2 20{2 copy
1 add get 32 sub 166 div 1 1 sethsbcolor
1 getinterval show
dup}for

렌더링 결과

이것은 인쇄 가능한 ASCII 범위에서 MrZander 색상의 색조 값을 1 바이트로 인코딩합니다. 이 바이트는 32를 빼고 166으로 나누어 0과 1 사이의 색조 값으로 변환됩니다. "Hello World"문자열의 각 문자 뒤에는 인코딩 된 색조 값이옵니다.

언 골프 :

9 9 moveto
/Courier 9 selectfont
(H e*l4l4oI  WIosrsl{d~)dup     % string string
0 2 20{                         % string string index
  2 copy                        % string string index string index
  1 add get                     % string string index hueChar
  32 sub 166 div                % string string index hueValue
  1 1 sethsbcolor               % string string index 
  1 getinterval                 % string substring
  show                          % string
  dup                           % string string
}for

TODO : 색상에 문제가있는 것 같습니다.


2

일부 부정 행위지만 문제를 해결

배쉬 + 루비 ( lolcat보석 필요 )

echo Hello World | lolcat -p 0.25

레인보우 헬로우 월드


1

다트에서 HTML로 135 134-1 = 133

main(){for(var s="Hello World",i=0;i<11;print("<font color=#${'F00F60FB0FF06F00F00B606B00F60F90F'.substring(i*3,i*3+3)}>${s[i++]}"));}

마크 업 언어를 사용하지 않고 텍스트 색상을 지정할 수있는 방법이 있습니까? 캔버스를 테스트 할 수 없습니다 ...


Oooo ... HTML
로도

1

"어떤 경우에도 마크 업 없음"이라고 표시되어 있지만이 CSS를 468 자로 제출하고 싶습니다.

<style>b{font-weight:normal}i{font-style:normal}u{text-decoration:none}b:after{content:'e';color:orange}b:before{content:'H';color:red}i:after,i:before{content:'l'}i:before{color:#ff0}i:after{color:#0f0}u:before{content:'o ';color:#66f}u:after{content:'W';color:blue}s{text-decoration:none}s:before{content:'o';color:#006}s:after{content:'r';color:#60f}p{display:inline}p:before{content:'l';color:#8b00ff}p:after{content:'d'}</style><b></b><i></i><u></u><s></s><p></p>

마크 업으로 스타일링을 수행하지 않습니다.


0

루비

242 더 절차적인 방법 :

require 'paint'

s = "HelloWorld"
out = ""
[
  '#FF0000',
  '#FF7F00',
  '#FFFF00',
  '#00FF00',
  "#00FFFF",
  "#5555FF",
  '#0000FF',
  '#000077',
  '#6600FF',
  '#8B00FF'
].each_with_index { |c, i| out << "#{Paint[s[i], c.dup]}" }
puts out

내가 색상을 생성하는 더 좋은 방법을 생각하면 내가 할 것입니다. 중간 색상 중 일부는 색상을 가깝게 만들기 위해 시행 착오를 거쳤습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.