วาดรุ้ง


25

ความท้าทายนั้นง่าย: วาดสายรุ้งในจำนวนน้อยที่สุดเท่าที่จะทำได้

รายละเอียดสำหรับรุ้งมีดังนี้:

  • รูปจะต้องมีความกว้าง 400 พิกเซลและสูง 200 พิกเซล (เป็นตัวเลือก 401x201 หากคุณต้องการจุดศูนย์กลางพิกเซลเดียว)
  • วงแหวนสีแดงควรแตะทุกเส้นขอบของภาพ (รัศมีด้านนอก = 200 พิกเซล)
  • วงแหวนทั้งหมดจะต้องมีความกว้างเท่ากัน (10 พิกเซล)
    • วงแหวนสีม่วงจะมีรัศมีภายในเท่ากับ 130 พิกเซล
  • โบว์ควรเป็นครึ่งบนของวงกลมที่สมบูรณ์แบบ
  • พื้นหลังจะเป็นสีขาว (ยอมรับแบบโปร่งใส)
  • รูปจะต้องไม่มีเส้นขอบ (ยกเว้นในกรณีที่ไม่สามารถระงับเส้นขอบได้)
  • ไม่อนุญาตให้ใช้ฟังก์ชันการสร้างรุ้งในตัว!

สีต่อไปนี้จะใช้ในรุ้งกินน้ำ:

รุ้ง

นี่คือรหัสกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะชนะ!

ตัวอย่าง:

รุ้ง

ที่เกี่ยวข้อง แต่แตกต่างกัน!


26
Builtin รุ้งทำให้ฟังก์ชั่นไม่ได้รับอนุญาตในฐานะที่ฉันแน่ใจว่า Mathematica มีหนึ่ง
หลุยส์ Mendo

รุ้งอาจไม่สมบูรณ์ขนาดไหน? ไม่ต่อต้านนามแฝงถึงการฉีกขาด? ลองนึกภาพในคำตอบนี้
aross

@aross: ควรมีลักษณะเหมือนรุ้งตัวอย่าง (บางพิกเซลอาจแตกต่างกันไปเนื่องจากการคำนวณที่ไม่ถูกต้อง) รุ้งสองอันสุดท้ายนั้น“ ยุ่ง” เกินไปในขณะที่อันแรกนั้นดูโอเค ฉันไม่ได้มีกฎที่สมบูรณ์แบบเพื่อใช้วิจารณญาณที่ดีที่สุดที่คุณ :-)
สตีวีกริฟฟิ

@StewieGriffin เหตุผลที่ฉันขอเป็นเพราะเห็นได้ชัดว่ากราฟิก PHP เป็นรถสวยในขณะที่การแก้ปัญหาที่ถูกต้องในทฤษฎี ดีอันที่สองคืออันที่สามจะต่อต้านการลบรอยหยัก (ซึ่งก็ใช้งานไม่ได้ด้วย)
aross

กราฟิกแบบเวกเตอร์ไม่ได้รับอนุญาตหรือไม่ แก้ไข: ไม่เป็นไร - ฉันเห็นว่ามีคำตอบของ TikZ อยู่แล้วดังนั้นฉันจึงรวบรวมพวกเขาไว้
Julian Wolf

คำตอบ:


15

MATL , 107 95 92 87 84 83 ไบต์

-200:200 0:200!PYyq10/k12-t8<*t0>*Q7B.561FTh.295Oh.51h4BPFTF6Bl.5hOh4B8$v255*k5M/YG

สิ่งนี้ทำงานในรีลีสปัจจุบัน (14.0.0)ของภาษา / คอมไพเลอร์

แก้ไข (6 กรกฎาคม 2017) : คุณสามารถลองได้ที่MATL Online! .

ในการตรวจสอบว่าสีถูกต้องให้ลบอักขระห้าตัวสุดท้าย (คุณต้องรอสองสามวินาทีแล้วเลื่อนลงไปที่ส่วนท้ายของผลลัพธ์)

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบาย

รหัสมีสามขั้นตอนหลัก:

ขั้นตอนที่ 1 : สร้างเมทริกซ์ 201x401 กับตัวเลขจากไป1 8พิกเซลที่มีค่า1คือพื้นหลัง (สีขาว), พิกเซลที่มีค่า2, ... , 8แทนแต่ละแถบสีรุ้ง

พิกัดแนวนอนช่วงจาก-200ไป200ซ้ายไปขวาและพิกัดแนวตั้งช่วงจาก0การ200ด้านล่างขึ้นไปด้านบน ดังนั้นจุดกำเนิด (0,0) คือจุดกึ่งกลางด้านล่างมุมบนซ้ายคือ (-200,200) เป็นต้น

แถบรุ้งที่แตกต่างกันนั้นถูกสร้างขึ้นโดยการคำนวณระยะทางจากแต่ละพิกเซลไปยังจุดกำเนิดและการหาปริมาณในขั้นตอนที่ 10 พิกเซล

ขั้นตอนที่ 2 : สร้างเมทริกซ์ 8x3 ที่กำหนด colormap แต่ละแถวเป็นหนึ่งในสีที่จำเป็น (สีขาวและสีรุ้งเจ็ดสี) แต่ละค่าของเมทริกซ์ 201x401 ก่อนหน้าจะถูกตีความว่าเป็นดัชนีไปยังแถวของตารางสีนี้

เราสร้างเมทริกซ์ตารางสีโดยใช้ค่าระหว่าง 0 ถึง 1 สำหรับแต่ละองค์ประกอบสีแล้วคูณด้วย 255 และปัดเศษลง วิธีนี้ค่าส่วนใหญ่จะเริ่มต้นที่ 0 และ 1 ซึ่งต่อมาจะกลายเป็น 0 และ 255 ค่าระดับกลางจะถูกเข้ารหัสเป็นค่าระหว่าง 0 และ 1 กับ 2 หรือ 3 ทศนิยมเลือกเพื่อให้เมื่อคูณและปัดเศษให้ค่าที่ต้องการแน่นอน

ขั้นตอนที่ 3 : แสดงภาพด้วย colormap นั้น

               % STEP 1: CREATE MATRIX DEFINING THE RAINBOW BANDS
-200:200       % row vector [-200, -199, ..., 200]
0:200          % row vector [0, 1, ..., 200]
!P             % transpose and flip: convert into column vector [200; 199; ...; 0]
Yy             % hypotenuse function with broadcast: distance from each point to (0,0)
q10/k          % subtract 1, divide by 10, floor (round down). Gives 20 circular bands
               % 10 pixels wide, with values from 0 to 19
12-            % subtract 12
t8<*           % values larger than 7 are set to 0
t0>*           % values less than 0 are set to 0. We now have 7 bands with values
               % 1, ..., 7, and the white background with value 0
Q              % add 1: white becomes 1, bands become 2, ..., 8

               % STEP 2: CREATE MATRIX DEFINING THE COLORMAP
7B             % first row: [1 1 1] (7 converted to binary: color white)
.561FTh        % second row (light purple)
.295Oh.51h     % third row (dark purple)
4BP            % fourth row: [0 0 1] (4 converted to binary and flipped: blue)
FTF            % fifth row (green)
6B             % sixth row: [1 1 0] (6 converted to binary: yellow)
l.5hOh         % seventh row: orange
4B             % eigth row: [1 0 0] (4 converted to binary: red)
8$v            % vertically concatenate the 8 eight rows
255*k          % multiply by 255 and round down. Gives exact color values 
5M/            % push 255 again and divide. This is needed because colors in MATL are
               % defined between 0 and 1, not between 0 and 255

               % STEP 3: DISPLAY
YG             % display image with that colormap

28

Piet , 838 codels, หลายพันพิกเซล

บางคนต้องทำ:

รุ้งที่น่ากลัว

หากคุณบันทึกภาพนี้คุณสามารถลองออนไลน์ได้ !

โปรแกรม Piet ที่แท้จริงคือด้านบนเท่านั้น ~ 125 พิกเซลซึ่งฉันสร้างโดยใช้โปรแกรม Python ที่ฉันเขียน

การแก้ไขในภายหลังหลังจากนั้นทำให้ฉันเจ็บจริง ๆ ฉันจะสะดุดหลายวัน!

สิ่งนี้จะแสดงผลภาพในรูปแบบ SVG เนื่องจาก SVG เป็นวิธีที่ง่ายที่สุดในการทำเช่นนี้ ฉันขโมยรหัส SVG ของ Doorknob อย่างไร้ยางอาย ขาออก:

เอาต์พุตที่ถูกต้อง

ดีจริงๆนี้:

<svg viewBox='0 0 400 200'><circle cx='200' cy='200' r='200' fill='red'/><circle cx='200' cy='200' r='190' fill='#ff7f00'/><circle cx='200' cy='200' r='180' fill='yellow'/><circle cx='200' cy='200' r='170' fill='lime'/><circle cx='200' cy='200' r='160' fill='blue'/><circle cx='200' cy='200' r='150' fill='indigo'/><circle cx='200' cy='200' r='140' fill='#8f00ff'/><circle cx='200' cy='200' r='130' fill='white'/></svg>

โชคดีที่ชนะคำตอบนี้ผู้ใช้ที่ไม่ใช่ Esolang!


2
สคริปต์ python นี้เป็นแบบสาธารณะหรือไม่ ฉันขอเพื่อนที่ขี้เกียจมาก ....
NaCl

เอ่อใช้เวลาประมาณ 2 นาทีในการติดตั้ง xD คุณสามารถค้นหาเวอร์ชั่นเก่าได้ที่นี่และปรับแก้หากจำเป็น: mediafire.com/download/0isocsb81n7r2cv/piet.py (หมายเหตุ: ฉันทำสิ่งนี้เมื่อฉันอายุ 10 ขวบโค้ดน่าอาย เพื่อพูดให้น้อยที่สุด) - จำเป็นต้องติดตั้ง PyPNG
theonlygusti

15

Pyth, 150 149 128 ไบต์

"<svg viewBox=0,0,400,200>"V8s["<circle cx=200 cy=200 r="-200*TN" fill="@c"red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff"dN" />

เอาต์พุตใน SVG:

<svg viewBox=0,0,400,200>
<circle cx=200 cy=200 r=200 fill=red />
<circle cx=200 cy=200 r=190 fill=#ff7f00 />
<circle cx=200 cy=200 r=180 fill=#ff0 />
<circle cx=200 cy=200 r=170 fill=#0f0 />
<circle cx=200 cy=200 r=160 fill=#00f />
<circle cx=200 cy=200 r=150 fill=indigo />
<circle cx=200 cy=200 r=140 fill=#8f00ff />
<circle cx=200 cy=200 r=130 fill=#fff />

รุ้ง

ขอขอบคุณที่@MamaFunRoll 16 ไบต์และ@PatrickRoberts 6 อื่น ๆ !


2
คุณสามารถบันทึกจำนวนมากได้ด้วยการบรรจุสตริง
สปาเก็ตต์

@AquaTart ทั้งหมดที่ทำคือเพิ่มไบต์ O_o
Doorknob

3
ฉันไม่คิดว่าคุณต้องการราคาใด ๆ เครื่องหมายทับหรือ</svg>แท็กสิ้นสุดสุดท้าย
Mama Fun Roll

4
สองคำแนะนำ: red #ff7f00 #ff0 #0f0 #00f #8f00ff #fffสำหรับรายชื่อสีและใช้ราคาเดียวออกค่าพารามิเตอร์ทั้งหมดที่ไม่ได้มีช่องว่างในพวกเขา ( cx, cy, rและfill) แต่ให้แน่ใจว่าจะออกจากช่องว่างระหว่างความคุ้มค่าของการเติมและที่/เพื่อให้สีที่ไม่ได้รับการตีความผิด . ยังลบ</svg>ตามที่แนะนำข้างต้น
Patrick Roberts

1
red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fffขออภัยฉันหมายถึง นอกจากนี้หากคุณแทนที่ช่องว่างด้วยเครื่องหมายจุลภาคในviewBoxคุณสามารถลบเครื่องหมายคำพูดเดี่ยวสำหรับพารามิเตอร์นั้นได้เช่นกัน
Patrick Roberts

14

Minecraft 1.10 (เกือบ), 2677 ตัวอักษรคำสั่งเดียว, 868 blytes

ดีฉันเลือกภาษา verbose

summon FallingSand ~ ~1 ~ {Block:log,Time:1,Passengers:[{id:FallingSand,Block:redstone_block,Time:1,Passengers:[{id:FallingSand,Block:activator_rail,Time:1,Passengers:[{id:MinecartCommandBlock,Command:"summon ArmorStand ~ ~ ~ {Tags:[\"b\"]}"},{id:MinecartCommandBlock,Command:"summon Pig ~ ~ ~ {NoAI:1b}"},{id:MinecartCommandBlock,Command:setblock ~-1 ~-2 ~6 chain_command_block 3 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=200] ~ ~ ~ tp @e[c=1] ~ -99 ~"}},{id:MinecartCommandBlock,Command:setblock ~-1 ~-2 ~5 chain_command_block 3 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=190,r=200] ~ ~ ~ setblock ~ ~ ~ wool 14"}},{id:MinecartCommandBlock,Command:setblock ~-1 ~-2 ~4 chain_command_block 3 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=180,r=190] ~ ~ ~ setblock ~ ~ ~ wool 1"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~4 chain_command_block 4 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=170,r=180] ~ ~ ~ setblock ~ ~ ~ wool 4"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~5 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=160,r=170] ~ ~ ~ setblock ~ ~ ~ wool 13"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~6 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=150,r=160] ~ ~ ~ setblock ~ ~ ~ wool 11"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~7 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=140,r=150] ~ ~ ~ setblock ~ ~ ~ wool 10"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~8 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=130,r=140] ~ ~ ~ setblock ~ ~ ~ wool 2"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~8 chain_command_block 4 replace {auto:1,Command:"tp @e[type=Cow] ~1 ~ ~"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~7 chain_command_block 3 replace {auto:1,Command:"tp @e[type=Bat] ~-1 ~ ~"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~6 chain_command_block 3 replace {auto:1,Command:"execute @e[type=Pig] ~ ~ ~ summon Bat ~ ~ ~ {NoAI:1b}"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~5 chain_command_block 3 replace {auto:1,Command:"execute @e[type=Pig] ~ ~ ~ summon Cow ~ ~ ~ {NoAI:1b}"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~4 repeating_command_block 3 replace {auto:1,Command:"tp @e[type=Pig] ~ ~1 ~"}},{id:MinecartCommandBlock,Command:setblock ~ ~ ~1 command_block 0 replace {Command:fill ~ ~-3 ~-1 ~ ~ ~ air}},{id:MinecartCommandBlock,Command:setblock ~ ~-1 ~1 redstone_block},{id:MinecartCommandBlock,Command:kill @e[type=MinecartCommandBlock,r=1]}]}]}]}

สร้างโลก Superflat ใหม่วางระเบียบนั้นลงในบล็อกคำสั่ง Impulse ตั้งระยะการเรนเดอร์ของคุณค่อนข้างสูงและรัน ทำลายชุดเกราะเมื่อคอมพิวเตอร์ของคุณหยุดการทำงานช้า

ผลลัพธ์คือ 400 บล็อกข้ามและ 200 บล็อกสูงตามที่ร้องขอ

ฉันใช้ตัวสร้างคำสั่งตัวเดียวของ MrGarrettoเพื่อรวมทุกอย่างเข้าด้วยกันจากนั้นปรับเปลี่ยนผลลัพธ์เล็กน้อยเพื่อประหยัดอีกสองไบต์ นี่คืออินพุตของมัน:

INIT:summon ArmorStand ~ ~ ~ {Tags:["b"]}
INIT:summon Pig ~ ~ ~ {NoAI:1b}
tp @e[type=Pig] ~ ~1 ~
execute @e[type=Pig] ~ ~ ~ summon Cow ~ ~ ~ {NoAI:1b}
execute @e[type=Pig] ~ ~ ~ summon Bat ~ ~ ~ {NoAI:1b}
tp @e[type=Bat] ~-1 ~ ~
tp @e[type=Cow] ~1 ~ ~
execute @e[tag=b] ~ ~ ~ execute @e[rm=130,r=140] ~ ~ ~ setblock ~ ~ ~ wool 2
execute @e[tag=b] ~ ~ ~ execute @e[rm=140,r=150] ~ ~ ~ setblock ~ ~ ~ wool 10
execute @e[tag=b] ~ ~ ~ execute @e[rm=150,r=160] ~ ~ ~ setblock ~ ~ ~ wool 11
execute @e[tag=b] ~ ~ ~ execute @e[rm=160,r=170] ~ ~ ~ setblock ~ ~ ~ wool 13
execute @e[tag=b] ~ ~ ~ execute @e[rm=170,r=180] ~ ~ ~ setblock ~ ~ ~ wool 4
execute @e[tag=b] ~ ~ ~ execute @e[rm=180,r=190] ~ ~ ~ setblock ~ ~ ~ wool 1
execute @e[tag=b] ~ ~ ~ execute @e[rm=190,r=200] ~ ~ ~ setblock ~ ~ ~ wool 14
execute @e[tag=b] ~ ~ ~ execute @e[rm=200] ~ ~ ~ tp @e[c=1] ~ -99 ~

นั่นคือทั้งหมด 15 บล็อคคำสั่ง 1.9+ และ 838 ไบต์ดังนั้น 15 * 2 + 838 = 868 blytes

นี่คือส่วน (เกือบ) มันขาดมุมและขอบ มันไม่ควรมีเหตุผล - ข้อผิดพลาด Minecraft? จะเป็นบล็อกขนาด 400x200 ที่แน่นอนหากไม่ใช่เพื่อมัน ฉันทำไม่ได้มาก

Rainboom


4
Yay เครื่องกำเนิดสายรุ้งแบบหมู! +1
TuxCrafting

หากเป็น 2677 ตัวอักษรจะเป็นเพียง 868 "blytes" ได้อย่างไร จากวิธีที่ฉันเข้าใจว่าหน้า blytes จริงควรเป็น 2677 + 4
theonlygusti

มันเป็น 868 ถ้าคุณสร้างมันในโลก 2677 ถ้าคุณใช้ fallingsand ที่จะสร้างมันขึ้นมา (ซึ่งมีจำนวนมากของเหนือศีรษะ)
คอท

12

Mathematica 152 144 126 ไบต์

Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]

ป้อนคำอธิบายรูปภาพที่นี่

ขอบคุณ @CatsAreFluffy สำหรับการลบ 8 ไบต์ & @njpipeorgan อีก 18 :)


3
ใช้#VS #[[1]], #2VS #[[2]]และVS@@@ /@
CalculatorFeline

1
นอกจากนี้ทำงานแทนThread Transpose
LegionMammal978

1
Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]บันทึกอีก 18 ไบต์ แต่ความคิดเหมือนกัน
njpipeorgan มีน

1
เพียงแค่อยากรู้อยากเห็น ... คือมี "สายรุ้ง builtin"?
mbomb007

@ mbomb007 ไม่ว่าฉันรู้!
martin

8

เป็นกลุ่ม, 165 142 139

i<svg viewBox=0,0,400,200><cr><circle cx=2<C-n> cy=2<C-n> r=2<C-n> fill=red<cr>#ff7f00<cr>#ff0<cr>#0f0<cr>#00f<cr>indigo<cr>#8f00ff<cr>#fff<esc>2Gqq0y4f=jPBB10<C-x>@qq@qV2G:norm A /><cr>

ใช่นี่เป็นอุบาย จะต้องมีการปรับปรุงที่สามารถทำได้

เอาต์พุตเป็น SVG เช่นคำตอบ Pyth ของฉันคำตอบ

ขอบคุณ@MyHamDJสำหรับการลบทิ้ง 3 ไบต์!


คุณสามารถกำจัด 2 ไบต์ (หรือการกดแป้น) หากคุณเปลี่ยนคำสั่ง ex ครั้งสุดท้ายด้วยkv3G:norm A'/><cr>
DJMcMayhem

นอกจากนี้คุณยังสามารถถอดเพิ่มได้อีก 3 ครั้งหากคุณป้อน<circle cx...สตริงที่บรรทัดที่ 2 ในครั้งแรกแทนที่จะพิมพ์สีทั้งหมดแล้วจึงป้อนเข้าไปในภายหลัง
DJMcMayhem

8

HTML + SVG + ES6, 169

<svg width=400 viewBox=0,0,40,20 onload="this.innerHTML=`f00
ff7f00
ff0
0f0
00f
4b0082
8f00ff
fff`.replace(/.+/g,c=>`<circle cx=20 cy=20 r=${--r} fill=#${c} />`,r=21)"/>


ใช้height=200และแทนcx=200 cy=200 r=${--r}0 viewBox='0 0 40 20'ที่ควรบันทึก 7 ไบต์
Patrick Roberts

ฉันหวังว่ามันโอเคที่ผมยืมความคิดของคุณด้วย.replaceวิธีการ ...
แพทริคโรเบิร์ต

@PatrickRoberts แน่นอนไม่เป็นไรฉันยืมของคุณไปแล้ว
edc65

5
ฉันก็ไม่ได้คาดหวังที่จะเห็นr-=1ในสนามกอล์ฟรหัส ...
นีล

@ Neil bah! มันคือ - = 10 ในการทำซ้ำบางส่วนก่อนการเปิดตัวครั้งสุดท้าย
edc65


6

JavaScript (ES6), 171 158 ไบต์

document.write`<svg width=400 height=200>${`f00
ff7f00
ff0
0f0
00f
4b0082
8f00ff
fff`.replace(/.+/g,c=>`<circle cx=200 cy=200 r=${i--}0 fill=#${c} />`,i=20)}`

มอบเครดิตให้กับ @ edc65 สำหรับแนวคิดในการแปลง

`[...].map((c,i)=>...)`

ไปยัง

`...`.replace(/.+/g,c=>...,i=20)

อาจดูยาวกว่า แต่จำนวนไบต์ที่บันทึกไว้ในการบีบอัดอาร์เรย์ไปยังสตริงนั้นคุ้มค่ากับการแปลง (จะบันทึก 13 ไบต์ในกรณีนี้)

การสาธิต

document.write`<svg width=400 height=200>${`f00
ff7f00
ff0
0f0
00f
4b0082
8f00ff
fff`.replace(/.+/g,c=>`<circle cx=200 cy=200 r=${i--}0 fill=#${c} />`,i=20)}`


6

HTML (162) + CSS (146)

body{height:200px;width:400px}div{height:100%;box-sizing:border-box;border-radius:50% 50% 0 0/100% 100% 0 0;border:solid;border-width:10px 10px 0}
<div style=color:red><div style=color:#FF7F00><div style=color:#FF0><div style=color:#0F0><div style=color:#00F><div style=color:#4B0082><div style=color:#8F00FF>


HTML (224) + CSS (128)

body{height:200px;width:400px}div{height:100%;box-sizing:border-box;border-radius:50% 50% 0 0/100% 100% 0 0;padding:10px 10px 0}
<div style=background:red><div style=background:#FF7F00><div style=background:#FF0><div style=background:#0F0><div style=background:#00F><div style=background:#4B0082><div style=background:#8F00FF><div style=background:#FFF>


5

SpecBAS - 318 254 ไบต์

หากเราวาดรูปสายรุ้งเราก็ดูเหมือนว่าเป็นสถานที่ที่ดีในการใช้ตัวต่อกับ ZX Spectrum BASIC

1 p,k=20,x1=0,x2=400,y=200
2 FOR EACH s IN [16711680,16744192,16776960,65280,255,4915330,9371903]: PALETTE p,s: INC p: NEXT s
3 CLS 15: DRAW 0,200 TO 70,200: DRAW 330,200 TO 400,200
4 FOR i=1 TO 7
5 INK k: DRAW x1,y TO x2,y,-PI: DRAW x1+10,y TO x2-10,y,-PI: FILL x1+5,190
6 x1+=10,x2-=10,k+=1
7 NEXT i

บรรทัดที่ 2 ตั้งค่าจานสีสำหรับค่า RGB เฉพาะที่ต้องการ (และอาจไม่ช่วยนับไบต์) เนื่องจากสีสเปกตรัมมาตรฐานไม่ตรง

DRAWคำสั่งสามารถใช้พารามิเตอร์พิเศษซึ่งทำให้มันเปิดผ่านจำนวนองศาเรเดียนระหว่าง x1, y1 และ x2, y2 ในที่สุดก็พบช่องว่างในครึ่งวงกลมที่เพิ่งวาดและน้ำท่วมเติมด้วยสีปัจจุบัน

ป้อนคำอธิบายรูปภาพที่นี่


5

Tcl / Tk , 263 ไบต์

canvas .c -bg #FFF -bo 0 -highlightt 0;pack .c -e 1 -f both;wm ge . 400x200;foreach {r c} {200 #FF0000 190 #FF7F00 180 #FFFF00 170 #00FF00 160 #0000FF 150 #4B0082 140 #8F00FF 130 #FFF} {.c cr o -$r -$r $r $r -outline $c -f $c};after 100 {.c x s -5 u;.c y s -10 u}

อนิจจาคำถามประเภทนี้มักจะสนับสนุนภาษาลึกลับบางอย่างเสมอ ... ที่กล่าวว่า Tcl / Tk ทำให้การทำงานด้านกราฟิกทั้งหมด: ง่ายสั้นและ สามารถอ่านได้

ที่กล่าวว่าฉันได้เสียสละความสามารถในการอ่านตัวเลือกกระทืบตัวละครน้อยที่สุดเท่าที่จะทำได้ ฉันไม่คิดว่าการ crunching รายการสีจะช่วยได้มากเมื่อเทียบกับรหัสเพื่อแกะมัน ...

สำหรับการเปรียบเทียบนี่คือรหัสที่ยังไม่ได้จัดส่ง (380 ไบต์):

canvas .c -bg #FFF -borderwidth 0 -highlightthickness 0
pack .c -expand yes -fill both
wm geometry . 400x200
foreach {r c} {
  200 #FF0000 
  190 #FF7F00 
  180 #FFFF00 
  170 #00FF00 
  160 #0000FF 
  150 #4B0082 
  140 #8F00FF 
  130 #FFFFFF
} {
  .c create arc -$r -$r $r $r -extent 180 -outline $c -fill $c
}
after 100 {
  .c xview scroll -5 units
  .c yview scroll -10 units
}

afterคำสั่งเป็นสิ่งจำเป็นที่โชคไม่ดีเนื่องจากไม่มีการเลื่อน (ผ้าใบของการประสานงานแหล่งกำเนิด) สามารถทำได้ก่อนที่หน้าต่างถูกแมปไปยังหน้าจอ

นอกจากนี้รหัส crunched ดึงเต็มจริงรุ้ง (ใช้วงกลมแทนส่วนโค้ง) และเพียงอาศัยการตัดหน้าต่าง ...

อย่างไรก็ตามฉันหวังว่าคุณจะสนุก O):


คุณสามารถใช้lmapแทนforeachการย่อให้สั้นลง
sergiol

และคุณสามารถใส่บรรทัดแรกในบรรทัดที่สองเช่น:pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
sergiol

มีการเชื่อมโยงกันระหว่างโค้ดสองเวอร์ชันของคุณ Golfed ทำcreate oval; ทำไม่create arcได้ คุณช่วยอธิบายได้ไหม
sergiol

ขอบคุณสำหรับความคิดเห็น เวอร์ชันที่ไม่ดีสำหรับการอ่านไม่ใช่ความถูกต้องในการนำไปใช้ และอนิจจาฉันจะไม่กลับไปแก้ไข foreach -> lmap ทั้งหมดของฉัน ที่เหลือสำหรับผู้อ่าน ... : O)
Dúthomhas

5

LaTeX, 290 ไบต์

\documentclass{proc}\input tikz\begin{document}\def\z#1!#2!#3!#4!{\definecolor{t}{rgb}{#1,#2,#3}\fill[color=t](200pt,0)circle(#4pt);}\tikz{\clip(0,0)rectangle(400pt,200pt);\z1!0!0!200!\z1!.5!0!190!\z1!1!0!180!\z0!1!0!170!\z0!0!1!160!\z.29!0!.51!150!\z.56!0!1!140!\z1!1!1!130!}\end{document}

ลองได้ที่นี่

คำอธิบาย

\documentclass{proc}
\input tikz
\begin{document}

    %Define macro "\z" with 4 arguments.         
    % The first 3 arguments are rgb values for the color
    % Last argument is the radius in pt that we draw a full circle with

    \def\z#1!#2!#3!#4!
        {\definecolor{t}{rgb}{#1,#2,#3}
         \fill[color=t](200pt,0)circle(#4pt);}

    % Start a Tikz figure

    \tikz{

        % We only draw the top half of the circle

        \clip(0,0)rectangle(400pt,200pt);

        % Draw each circle from biggest to smallest

        \z1!0!0!200!
        \z1!.5!0!190!
        \z1!1!0!180!
        \z0!1!0!170!
        \z0!0!1!160!
        \z.29!0!.51!150!
        \z.56!0!1!140!

        % Draw a white circle last

        \z1!1!1!130!
    }
\end{document}

@DonMuesli ขอบคุณสำหรับลิงค์เพิ่ม
ลดขนาด

4

Java, 354 ไบต์

public void r() throws IOException{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));int[]c={0xFF0000,0xFF7F00,0xFFFF00,0xFF00,255,0x4B0082,0x8F00FF};for(int v=0;v<7;v ++){g.setColor(new Color(c[v]));g.drawArc(v*10+5,v*10+5,390-v*20,390-v*20,0,360);}ImageIO.write(i,"PNG",new File("a.png"));}}

เพียงแค่ใช้ Graphics2Dคลาสในการวาด 7 โค้งด้วยอาเรย์เพื่อจัดเก็บสี ฉันแน่ใจว่ามันสามารถปรับปรุงเพิ่มเติมได้

รหัสไม่ได้รับการตอบกลับ:

public void ungolfed() throws IOException {
        BufferedImage i = new BufferedImage(400, 200, 2); // 2 is TYPE_INT_ARGB
        Graphics2D g = i.createGraphics();
        g.setStroke(new BasicStroke(10));
        int[] c = {0xFF0000, 0xFF7F00, 0xFFFF00, 0x00FF00, 0x0000FF, 0x4B0082, 0x8F00FF};
        for(int v = 0; v < 7; v ++) {
            g.setColor(new Color(c[v]));
            g.drawArc(v * 10 + 5, v * 10 + 5, 390 - v * 20, 390 - v * 20, 0, 360);
        }
        ImageIO.write(i, "PNG", new File("a.png"));
    }

2
คุณ0x0000ffอาจจะเป็นแค่คนเดียว0xffหรือแค่255คนเดียวกับที่0x00ff00เป็น0xff00อยู่ 0xff0000สามารถ255<<16บันทึกไบต์อื่นได้ การวนซ้ำของคุณอาจเป็นการประหยัดอีกสองสามไบต์ คุณสามารถบันทึกได้อีกหนึ่งไบต์โดยการเพิ่มการประกาศ,qของคุณ intคุณจะต้องทำให้มันint c[]=แทนint[] cเพื่อให้qเป็นและไม่ได้เป็นint int[]การทำเช่นนั้นจะช่วยให้คุณเพิ่มq=390-v*20;วงเข้าไป และแทนที่390-v*20ด้วย q มันทำงานได้มากสำหรับหนึ่งไบต์ แต่ไบต์เป็นไบต์ใช่มั้ย!
corsiKa

2
คุณสามารถบันทึกอีกสองไบต์ได้โดยเพียงแค่โยน Exception แทน IOException
corsiKa

ฉันยังสงสัยว่าคุณสามารถใช้drawOvalและแสดงภาพครึ่งบน ... อาจจะแพงกว่านิดหน่อยแม้ว่า ...
corsiKa

ฉันรู้ว่ามันผ่านมาประมาณ 1.5 ปีแล้ว แต่คุณสามารถตีกอล์ฟได้สักหน่อย .. void r()throws Exception{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));for(int c[]={255<<16,16744192,16776960,65280,255,4915330,9371903},v=0,t;v<7;g.drawArc(t=v*10+5,t,t=390-v++*20,t,0,360))g.setColor(new Color(c[v]));ImageIO.write(i,"PNG",new File("a.png"));}}( 325 bytes )
Kevin Cruijssen

4

Bubblegum , 139 119 bytes

hexdump:

00000000: b329 2e4b 5728 cb4c 2d77 caaf b035 d031  .).KW(.L-w...5.1
00000010: d031 3130 d031 3230 b0e3 b249 ce2c 4ace  .110.120...I.,J.
00000020: 4955 48ae b005 f215 922b c154 1198 4ccb  IUH......+.T..L.
00000030: ccc9 b12d 4a4d 51d0 c7ad ced0 12aa 4e39  ...-JMQ.......N9
00000040: 2dcd 3c0d 2884 4fad 0542 2d7e 85e6 3085  -.<.(.O..B-~..0.
00000050: 0604 149a c115 1aa4 e155 680a 5598 9997  .........Uh.U...
00000060: 9299 9e8f 57a9 09cc 4c0b a07f d2f0 1b6b  ....W...L......k
00000070: 8cf0 1148 2100 0a                        ...H!..

น่าเศร้านี่สั้นกว่าคำตอบ Pyth ของฉันคำตอบ:(

สร้างไฟล์ SVG เดียวกัน


4

CSS, 244 242 240 ไบต์

body{width:400px;height:200px;background-image:radial-gradient(500px at bottom,#FFF 26%,#8F00FF 26%,#8F00FF 28%,#4B0082 28%,#4B0082 30%,#00F 30%,#00F 32%,#0F0 32%,#0F0 34%,#FF0 34%,#FF0 36%,#FF7F00 36%,#FF7F00 38%,red 38%,red 40%,#FFF 40%)}

แก้ไข: บันทึก 2 ไบต์ด้วยการแก้ไขข้อบกพร่องใน Chrome บันทึกอีก 2 ไบต์ด้วย @TrangOul

หมายเหตุ: ตัวอย่างใช้<div>ข้อ จำกัด ของ Stack Snippets


ดูเหมือนว่าพื้นหลังด้านนอกของรุ้งจะเป็นสีแดง (อย่างน้อยในโทรศัพท์ของฉัน)
Stewie Griffin

@StewieGriffin ทำงานได้ดีสำหรับฉันใน Firefox สำหรับ Android (ฉันไม่สามารถหาวิธีเปิดใช้ Stack Snippets ในเบราว์เซอร์เริ่มต้นของโทรศัพท์)
Neil

ตกลงแปลกเล็กน้อย :-) ฉันใช้โครเมี่ยม 49.0.2623.91 บน galaxy s6 edge btw
Stewie Griffin

@StewieGriffin ดูเหมือนว่า Chrome จะแตกใน Windows เช่นกัน
Neil

@StewieGriffin ตกลงฉันคิดว่าฉันมีวิธีแก้ปัญหาและประหยัดสองไบต์เช่นกัน!
Neil

4

JavaScript 271 251

c=document.body.appendChild(document.createElement('canvas'))
x=c.getContext('2d')
c.width=400
r=c.height=200
for(i=0;i<8;x.beginPath(),x.arc(r,r,r-i*10,0,7),x.fillStyle="#"+"FF0000FF7F00FFFF0000FF000000FF4B00828F00FFFFFFFF".substr(i++*6,6),x.fill());


ขอบคุณ @StewieGriffin ฉันได้ทำการเปลี่ยนแปลงสำหรับ 10 ได้รับการพยายามนับถอยหลัง แต่ยังคงเป็นวิธีการจากลูกบิดประตูตอบ pyth!
wolfhammer

คุณสามารถย้ายทุกอย่างระหว่างสำหรับภายในสุดท้ายสำหรับส่วนคั่นด้วย{ ... } เช่น, for(i=0;i<8;x.beginPath(),x.arg(...etc...))คุณอาจจะสามารถใช้slice/ spliceของซับสเตจได้หากฉันไม่เข้าใจผิด นอกจากนี้ยังอาจจะสั้นจะทำให้ <ผ้าใบ> .innerHTMLใช้ หรือแม้แต่คำตอบ HTML + JS และให้ <canvas> และ id ของcจากนั้นก็ควรจะถูกเพิ่มโดยอัตโนมัติเป็นตัวแปรทั่วโลกของ JS
Downgoat

@ Downgoat substrมีข้อได้เปรียบตรงนี้ในพารามิเตอร์ตัวที่สองคือความยาวไม่ใช่อ็อฟเซ็ต สำหรับการเล่นกอล์ฟdocument.bodyนั้นดูเหมือนว่าจะช่วยให้ประหยัดได้มาก
Neil

4

C, 220 217 213 ไบต์

#define X printf("%c",s<169|s/401?y:s
i=8e4,t,y=255;main(s){for(puts("P6 400 200 255");i--;X/288?y:s<195?143:s<225?75:0),X<256|s/360?0:s/323?127:y),X<225&s/195?130:s<256?y:0))s=i/400,t=i%400-200,s=(s*s+t*t)/100;}

เอาต์พุตคือ PPM (ชนิดไบนารี่)

แก้ไข:บันทึกสองไบต์ขอบคุณ @tucuxi

แก้ไข 2:จัดเรียงโค้ดใหม่เพื่อประหยัดมากขึ้น


1
คุณสามารถโกนไบต์ด้วยi;s;t;main()-> s;t;main(i)และอีกอันหนึ่งได้โดยวางส่วนหนึ่งของคุณไว้สำหรับห่วงตัวถังสำหรับ: ;)code1,code2;-> ;code2)code1;(บันทึกเครื่องหมายจุลภาค!)
tucuxi

4

Google Blockly , 48 บล็อก, 75 ไบต์

คลิกที่ gif ด้านล่างเพื่อไปยังโซลูชันซึ่งคุณสามารถดูวิธีการใช้งานได้ใกล้ขึ้น
สำหรับคำอธิบายฉันคิดว่าภาพหนึ่งภาพมีค่าหนึ่งพันคำและดังนั้น gif จึงมีค่าหนึ่งพันภาพ

ลิงก์ไปยัง gif ที่อ่านได้ขนาดใหญ่

หมายเหตุ: ฉันไม่แน่ใจวิธีนับในบล็อกดังนั้นฉันนับทุกบล็อกเป็น 1 ไบต์และทุกตัวแปรเป็นวิธีปกติดังนั้น0== 1 ไบต์, 530== 3 ไบต์, Arial== 5 ไบต์และbold== 4 ไบต์
ฉันนับตัวละครพิเศษที่ฉันใช้เพื่อตัดรุ้งเป็น 2 ไบต์ กรุณารายงานข้อผิดพลาดหรือข้อเสนอแนะของนับไบต์ในความคิดเห็น


4

Postscript (87 ไบต์)

การถ่ายโอนข้อมูล Hex:

00000000: 3188 0131 2030 2e35 3631 8800 3120 302e  1..1 0.561..1 0.
00000010: 3237 3888 0030 2e35 3188 0030 8801 3088  278..0.51..0..0.
00000020: 0130 8801 3188 0031 2030 2e35 8800 3188  .0..1..1 0.5..1.
00000030: 0030 87c8 0038 7b34 2031 9287 929d 87c8  .0...8{4 1......
00000040: 0030 2032 9258 3087 b400 9205 9216 9242  .0 2.X0........B
00000050: 880a 92a9 7d92 83                        ....}..

เอาท์พุท:

enter image description here


3

HTML + CSS, 310 307 ไบต์

<b style=background:red><b style=background:#ff7f00><b style=background:#ff0><b style=background:lime><b style=background:blue><b style=background:indigo><b style=background:#8f00ff><b style=background:#fff;width:260px;height:130px><style>b{float:left;padding:10px 10px 0 10px;border-radius:300px 300px 0 0}

มาร์กอัป Super-duper ที่ไม่ถูกต้อง (อาจหรืออาจดูไม่ถูกต้องในเบราว์เซอร์ของคุณ) แค่อยากจะดูว่ามันเป็นไปได้ไหม


คุณสามารถตัดสองไบต์โดยใช้ # FF0 แทนสีเหลือง คุณอาจสามารถใช้แอตทริบิวต์ bgcolor แทนแอตทริบิวต์ style ได้เช่นกัน
อยากรู้อยากเห็น dannii

@curiousdannii คุณพูดถูกเกี่ยวกับสี ( whiteอาจสั้นลง) แน่นอน - ไม่รู้ว่าทำไมฉันถึงไม่เห็นมัน ฉันลองbgcolorก่อนโพสต์ แต่น่าเสียดายที่มันไม่ได้รับการสนับสนุนอีกต่อไป (ที่นี่ใน Chrome อยู่แล้ว)
Flambino

3

PHP, 285 ไบต์

<?php $a=imagecreate(400,200);define("b",255);$c=array(b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b);for($i=0;$i<9;$i++){imagefilledellipse($a,200,200,420-$i*20,420-$i*20,imagecolorallocate($a,$c[$i*3],$c[$i*3+1],$c[$i*3+2]));}header("Content-type:png");imagepng($a);?>

ขาออก:

Taste the rainbow!


1
ความพยายามที่ดี แต่โปรดทราบว่าการปิดแท็ก PHP ที่ท้ายไฟล์ถือว่าเป็นนิสัยที่ไม่ดีแม้ว่าจะไม่เล่นกอล์ฟ มันจะสั้นลงเป็นสคริปต์ CLI ด้วยวิธีนี้คุณสามารถสำรองการheader()โทรและแม้แต่การเปิดแท็ก PHP บน Linux วิธีที่ง่ายที่สุดคือเรียกใช้php -r '$a=imagecreate(400,200);const b=255;for($c=[b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b];$i<9;)imagefilledellipse($a,200,200,$r=420-$i*20,$r,imagecolorallocate($a,$c[$j=$i++*3],$c[$j+1],$c[$j+2]));imagepng($a);' | displayจาก command prompt และนับเป็น 227 ตัวอักษร (การใช้ PHP 5.6.11.)
จัดการข้อมูล


3

กำลังประมวลผล, 196 186 181 179 169 163 ไบต์

int d=400,i=0;size(d,d/2);background(-1);int[]c={-65536,-33024,-256,#00ff00,#0000ff,#4b0082,#8f00ff,-1};for(noStroke();i<8;ellipse(200,200,d,d),d-=20)fill(c[i++]);

rainbow

บันทึก 10 ไบต์ขอบคุณ Kritixi Lithos
... และอีก 6 ไบต์ขอบคุณ dzaima


2
สามารถโกนทิ้งอีกหนึ่งไบต์ได้โดยเปลี่ยนfor(int i=0;i<8;i++)เป็นfor(int i=0;i++<8;)หรือคล้ายกัน
59

ฉันไม่คิดว่าคุณสามารถใช้ตัวแปรขณะโทรsize()
Kritixi Lithos

@KritixiLithos คุณหมายถึงอะไร?
Flambino

เมื่อฉันเรียกขนาดด้วยตัวแปรเป็นพารามิเตอร์มันทำให้ฉันมีข้อผิดพลาด (ก่อนเรียกใช้) ซึ่งฉันไม่สามารถใช้ตัวแปรเพื่อกำหนดขนาดบนหน้าจอ
Kritixi Lithos

background(-1)สั้นกว่าหนึ่งไบต์background(255)และคุณสามารถเปลี่ยน255อาร์เรย์ได้cเพื่อ-1ที่จะบันทึกไบต์อีก
Kritixi Lithos

2

R, 184 170 ไบต์

การสร้างภาพที่มีขนาดพิกเซลคงที่กลายเป็นเรื่องยุ่งยากอย่างน่าประหลาดใจกับ R ซึ่งฟังก์ชั่นการวางแผนส่วนใหญ่มีไว้สำหรับนักสถิติ โดยเฉพาะอย่างยิ่ง R จะเว้นที่ว่างเพิ่มเติมสำหรับป้ายกำกับและแกนพิกัดเว้นแต่คุณจะกำหนดระยะขอบเป็นศูนย์โดยการโทรparอย่างชัดเจน

ในทางกลับกันบางสีที่ต้องการ (โดยเฉพาะสีแดง, สีเหลืองและสีน้ำเงิน) จะพบในจานสีเริ่มต้นและสามารถอ้างอิงได้ง่าย ๆ โดยดัชนีจำนวนเต็ม

png(,400,200)
par(mar=0*1:4)
plot(as.raster(outer(199:0,-199.5:200,function(y,x)c(rep("white",13),"#8F00FF","#4B0082",4,"green",7,"#FF7F00",2)[1+(x^2+y^2)^.5%%200/10])))

2

Forth Salon Haiku (184 bytes)

ฉันไม่สามารถตอบสนองข้อ จำกัด ด้านมิติด้วยรูปแบบนี้ แต่ฉันคิดว่ามันคุ้มค่าที่จะแบ่งปันต่อไป

: ^ 2 ** ;
: b 0.9 * dup x .5 - ^ y 2.01 / ^
+ sqrt dup rot > swap rot .045
+ < * * + ;
0 .56 .2 b .29 .25 b 1 .4 b
1 .45 b 1 .5 b 0 1 .35 b 1 .4 b
0.5 .45 b 0 1 .2 b .51 .25 b
1 .3 b

enter image description here


2

Excel VBA, 213 202 196 192 172 ไบต์

รหัส

ฟังก์ชั่นหน้าต่าง VBE แบบไม่ระบุชื่อทันทีที่ไม่ป้อนข้อมูลและส่งออกรุ้งเป็นภาพเวกเตอร์ไปยังวัตถุแผ่นงาน (1)

For i=0To 7:j=400-20*i:Set s=Sheet1.Shapes.AddShape(20,10*i,10*i,j,j):s.Fill.ForeColor.RGB=Array(255,32767,65535,65280,-31*4^8,8519755,&HE1008F,-1)(i):s.Line.Visible=0:Next

เวอร์ชันรูทีนย่อย

Sub a
For i=0To 7
j=400-20*i
set s=Sheet1.Shapes.AddShape(20,10*i,10*i,j,j)
s.Fill.ForeColor.RGB=Array(255,32767,65535,65280,-31*4^8,8519755,&HE1008F,-1)(i)
s.Line.Visible=0
Next
End Sub

-11 ไบต์สำหรับการลบการ.Adjustments(3)=3/80โทรและการเพิ่มส่วนโค้งที่ 8, สีขาว

-6 ไบต์สำหรับการใช้งาน -1เกิน&HFFFFFF

-3 ไบต์สำหรับการใช้งาน Sheet1เกินSheets(1)

-6 ไบต์สำหรับการแปลง withคำสั่งเป็นsetคำสั่ง

-14 ไบต์สำหรับการแปลงจาก Subเป็นฟังก์ชัน VBE แบบไม่ระบุชื่อ

เอาท์พุต

Pics or it didn't happen


1

DIV Games Studio (184 ไบต์)

ไม่ใช่สั้นที่สุด แต่ค่อนข้างง่าย ใช้จานสีเริ่มต้น DIV

PROGRAM r;
local
c[]=22,26,235,41,54,82,249,15,15;
BEGIN
set_mode(400200);
for(x=-80;x<80;x+=10)
y=399-x;
draw(5,c[abs(x)/10],15,0,x,x,y,y);
x+=70*(x<0);END
LOOP;FRAME;END
END

Rainbow in div games studio

คำอธิบาย

กำหนดการเริ่มโปรแกรม (ชื่อ "r" เพื่อประหยัดพื้นที่)

PROGRAM r;

การค้นหาจานสีตั้งค่า

local
c[]=22,26,235,41,54,82,249,15,15;

รหัสโปรแกรม BEGIN

BEGIN

ตั้งค่าโหมดวิดีโอเป็น 400,200

set_mode(400200);

x ห่วง (ตัวแปรที่กำหนดไว้ล่วงหน้า) จาก -80 (ซึ่ง bg hack) ถึง 80 (7 สี + สีขาวตรงกลาง)

for(x=-80;x<80;x+=10)

กำหนดข้อ จำกัด ของวงรี

y=399-x;

draw elipse - ในการทำซ้ำครั้งแรกจะเป็นการดึงวงกลมที่มีขนาดใหญ่กว่าหน้าจอเป็นสีขาวเต็ม (ดัชนี -8)

วาด (ประเภท (5 = วงรีที่เติม), สี, ความทึบ, x0, y0, x1, y1)

draw(5,c[abs(x)/10],15,0,x,x,y,y);

เมื่อแรกเสร็จแล้วชน x ถึงศูนย์เพื่อเริ่มวาดแถบสีแดง

x+=70*(x<0);

จบสำหรับวง

END

วงไม่มีที่สิ้นสุด, หน้าจอการวาดภาพ

LOOP;FRAME;END

สิ้นสุด (ตรงกับ BEGIN ที่ด้านบนของโปรแกรม)

END

1

Perl, 175 + 1 = 176 ไบต์

perl -MSVG -E '$z=SVG->new(width=>4e2,height=>2e2);@x=qw/#fff #8f00ff indigo #00f #0f0 #ff0 #ff7f00 red/;$z->circle(cx=>200,cy=>200,r=>200-10*$a++,style=>{fill=>pop@x})for 1..8;say$z->xmlify'

enter image description here


1

PHP, 190 ไบต์

imagefill($a=imagecreatetruecolor($r=400,200),0,0,$w=0xffffff);foreach([255<<16,0xff7f00,$w-255,65280,255,4915330,9371903,$w]as$i)imagefilledellipse($a,200,200,$r,20+$r-=20,$i);imagepng($a);

เรียกใช้เช่นนี้:

php -r 'imagefill($a=imagecreatetruecolor($r=400,200),0,0,$w=0xffffff);foreach([255<<16,0xff7f00,$w-255,65280,255,4915330,9371903,$w]as$i)imagefilledellipse($a,200,200,$r,20+$r-=20,$i);imagepng($a);' | display

Resulting image 1

นอกจากนี้ยังทำงานในทางทฤษฎีที่ 179 ไบต์ (แต่ภาพดูยุ่งเหยิง GD เลว)

php -r '$r=410;imagesetthickness($a=imagecreatetruecolor(400,200),10);foreach([255<<16,0xff7f00,0xffff00,65280,255,4915330,9371903]as$i)imagearc($a,200,200,$r-=20,$r,1,0,$i);imagepng($a);' | display

Resulting image 2

ยังไม่ใช่ภาพที่สมบูรณ์แบบ แต่ดีกว่าด้านบน (และ @ 166 ไบต์):

php -d error_reporting=30709 -r '$a=imagecreatetruecolor($r=400,200);foreach([255<<16,0xff7f00,0xffff00,65280,255,4915330,9371903]as$i)for(;++$$i<21;)imageellipse($a,200,200,$r,$r--,$i);imagepng($a);' | display

Resulting image 3

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.