สวัสดีชาวโลกเรนโบว์


11

การจัดการกับสีในภาษาที่ไม่ใช่มาร์กอัปมักทำให้เกิดความยุ่งยาก ฉันต้องการดูรูปแบบการใช้สีในภาษาต่างๆ

เป้าหมายของการแข่งขันนี้คือแสดงผลลัพธ์ '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. คุณต้องใช้เจ็ดสีแต่ละสีอย่างน้อยหนึ่งครั้ง (คุณอาจใช้มากกว่าสีที่กำหนด)
  5. ไม่มีการใช้ภาษามาร์กอัปในกรณีใด

ผู้ชนะคือผู้ที่มีจำนวนอักขระต่ำสุดและปฏิบัติตามกฎ

อักขระโบนัส -1 ถ้าเขียนด้วยDART

ฉันจะเลือกผู้ชนะในวันที่ 11 มกราคม (ถ้าฉันจำได้; D)

โชคดี

ผู้ชนะ (s)

ฉันทำผิดพลาด D: ผู้ชนะที่อัปเดต

1 stranac - Python 60 ตัวอักษร

ครั้งที่ 2 Ilmari - Karonen Perl + GD, 146 ตัวอักษร

ความยาวสั้นที่สุดพร้อมกับกฎทั้งหมดที่ปฏิบัติตาม

บราวนี่ชี้ไปที่ JiminPสำหรับคำตอบของ DART

คำตอบ:


7

Python 60 ตัวอักษร

ตอนนี้ใช้ 7 สีและ "แก้ไข"

ใช้ลำดับการหลบหนีแบบ Ansi ขีดเส้นใต้อยู่ตรงนั้นดังนั้นจึงไม่ใช่พื้นที่ที่มองไม่เห็น

รุ่นนี้พิมพ์ช่องว่างเพิ่มเติมบางส่วนเนื่องจากวิธีการพิมพ์ของงูใหญ่ แต่ช่องว่างเหล่านั้นประหยัดได้ไม่กี่ตัวอักษรดังนั้นฉันสบายดีเมื่ออยู่ที่นั่น

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

และภาพหน้าจอตามที่ MrZander ต้องการ: ป้อนคำอธิบายรูปภาพที่นี่


ฉันทำผิดพลาดหรือไม่? โปรดโพสต์ภาพหน้าจอเพื่อพิสูจน์ว่าคุณใช้ทุกสีอย่างถูกต้อง "8 สีจากสีดำเป็นสีขาว" ไม่ได้เสียงเหมือนที่ใช้กับ 7 สีที่ต้องการ
MrZander

@MrZander: ฉันได้อัปเดตคำตอบของฉันและหวังว่าตอนนี้จะทำให้คุณพอใจ แต่คุณแน่ใจหรือไม่ว่าสีที่ 6 ที่คุณให้นั้นถูกต้อง? มันสวยมากเหมือนกับที่ 7
stranac

เอาตรงๆ Wikipedia ... ฉันไม่มีผู้เชี่ยวชาญด้านสีเลยฮ่าฮ่า
MrZander

2
สิ่งนี้ต้องอาศัยจานสีที่กำหนดเองในการทำงาน ตัวอย่างเช่นHพิมพ์โดยใช้รหัสยกเว้นสำหรับสีดำดังนั้นจึงไม่สามารถมองเห็นได้ในอาคารส่วนใหญ่
hammar

12

มาติกา

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

ฉันรู้ฉันรู้ว่ามันไม่สอดคล้องกับกฎ .. แต่ฉันต้องลองเล่นกับฟังก์ชั่นการประมวลผลภาพของ Mathematica

ภาพหน้าจอ:

สวัสดีชาวโลก!!!!!!!


10

Haskell, 88 ตัวอักษร

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

ภาพหน้าจอ

โปรดทราบว่านี่ใช้สีเทอร์มินัล ANSI ซึ่งมีเพียง 6 สีและพวกเขาอาจไม่ตรงกับสีที่ได้รับ (ขึ้นอยู่กับการตั้งค่าเทอร์มินัล) ดังนั้นฉันจึงก้มกฎเล็กน้อย

รุ่นที่ยาวขึ้นเล็กน้อยที่มีสีที่ถูกต้องเกือบ 107 ตัว

รุ่นนี้ใช้สี xterm แทนสี ANSI สิ่งนี้ไม่ได้ขึ้นอยู่กับจานสีที่กำหนดเองและใช้สีที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้ในจานสี xterm 256 สี

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

Python 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

นี้ผลิตผลผลิตเดียวกันแน่นอนเป็นวิธีการแก้ปัญหาของ Haskell Hammar มันใช้sayดังนั้นต้องการ Perl 5.10+ และสวิตช์-M5.010(หรือ-E) สำหรับ perls เก่าแทนที่ด้วยsay printการลดขนาดตัวอักษรเพียงเล็กน้อยสามารถทำได้โดยการแทนที่\eด้วยตัวอักษร ESC ตามตัวอักษร แต่นั่นจะทำให้รหัสอ่านและแก้ไขได้ยากขึ้น

แก้ไข:เพิ่มสองตัวอักษรเพื่อจับคู่ผลลัพธ์ของ Hammar และเพื่อแสดงสีเทอร์มินัลทั้งหกสีที่เป็นไปได้ (ในเวอร์ชั่นก่อนหน้านี้มีเพียงอักขระตัวเดียวที่พิมพ์ด้วยสี 6 = สีฟ้าคือช่องว่าง)

ภาพหน้าจอ:

สวัสดีชาวโลก


แก้ไข 2:ถ้าใช้เทอร์มินัลพาเลตแบบกำหนดเอง (และขีดเส้นใต้สำหรับช่องว่าง) ได้รับอนุญาตจากนั้นฉันสามารถทำซ้ำสีตามที่กำหนดในสเปคได้อย่างง่ายดายเพียง 50 ตัวอักษร:

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

ภาพหน้าจอ:

สวัสดีชาวโลก


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

ผลลัพธ์ดูดีขึ้นมากบนพื้นหลังสีดำ แต่การพิมพ์ a <body bgcolor=black>จะต้องเสียค่าใช้จ่ายเพิ่ม 28 อักขระ คุณสามารถปรับการตั้งค่าเบราว์เซอร์ของคุณเพื่อให้ได้ผลเหมือนเดิมแทน :-)


3
ฉันอาจไม่เจาะจงมากพอสำหรับกฎข้อ 5 ฉันไม่ต้องการเห็นมาร์กอัปที่ใช้ร่วมกับภาษาอื่นด้วย แต่ในกรณีใด ๆ รหัสสร้างสรรค์มาก
MrZander

3

Perl + 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 ตัวอักษรโดย (ab) โดยใช้สัญกรณ์วัตถุทางอ้อมและการปรับแต่งอื่น ๆ รหัสใหม่ส่งเสียงเตือน แต่ก็ยังทำงานได้ดี


นั่นเป็นเหมือนมันมาก)
MrZander

จนถึงตอนนี้นับเป็นตัวละครที่ต่ำที่สุดที่เป็นไปตามกฎทั้งหมดไปยังจุด
MrZander

3

Postscript 155 143

สิ่งนี้อาศัยความสามารถของ Ghostscript ในการ "คิดออก" ว่า Palatino นั้นสั้นสำหรับ Palatino-Roman

/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

ขโมยความคิดของคุณบางอย่าง ...
โธมัสดับเบิลยู.

3

วิธีการที่แตกต่างกันในการทำสิ่งนี้ด้วย

PostScript

ครั้งแรก: หนึ่งที่สั้นที่สุด ( 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

นี่คือการเปลี่ยนสีในทิศทาง x อย่างต่อเนื่องโดยใช้พื้นที่สี hsb (ความคิดในการใช้สี hsb และ kshow ได้รับการยกย่องให้เป็น luser droog - ดูข้อความของเขา!) มันไม่ได้ใช้เจ็ดสีที่แน่นอนที่ MrZander มอบให้

เมื่อ จำกัด ตัวเองเป็นสีของ 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

แสดงผลลัพธ์

ค่านี้เข้ารหัสค่าสีของ MrZander เป็นหนึ่งไบต์ในช่วง ASCII ที่พิมพ์ได้ ไบต์นี้ถูกแปลเป็นค่าสีในช่วงระหว่าง 0 ถึง 1 โดยการลบ 32 และหารด้วย 166 อักขระแต่ละตัวของสตริง "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

สิ่งที่ต้องทำ : บางสิ่งบางอย่างไม่ถูกต้องกับสี


2

บางคนโกง แต่แก้ปัญหา

Bash + Ruby (ต้องการ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 ... +1 แม้แต่กับ HTML
MrZander

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.