무지개를 그립니다


25

도전은 간단합니다. 가능한 한 적은 바이트로 무지개를 그립니다.

무지개의 사양은 다음과 같습니다.

  • 그림의 너비는 정확히 400 픽셀, 높이는 200 픽셀이어야합니다 (단일 중앙 픽셀을 원할 경우 선택적으로 401x201).
  • 빨간색 링은 그림의 모든 경계에 닿아 야합니다 (외부 반경 = 200 픽셀).
  • 모든 링의 너비는 동일해야합니다 (10 픽셀).
    • 바이올렛 링의 내부 반경은 130 픽셀이어야합니다.
  • 활은 완벽한 원의 위쪽 절반이어야합니다
  • 배경은 흰색이어야합니다 (투명도 가능)
  • 그림에는 경계선이 없어야합니다 (경계를 억제 할 수없는 경우 제외)
  • 내장 무지개 만들기 기능은 허용되지 않습니다!

무지개에는 다음과 같은 색상이 사용됩니다.

무지개

이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

예:

무지개

관련되어 있지만 다릅니다!


26
내장 무지개 만들기 기능은 허용되지 않습니다. Mathematica에는 하나가 있다고 확신합니다
Luis Mendo

무지개가 얼마나 불완전 할 수 있습니까? 앤티 앨리어싱에서 찢어짐까지? 의 이미지를 고려 이 답변
aross

@aross : 샘플 무지개처럼 보일 것입니다 (정확하지 않은 계산으로 인해 일부 픽셀이 다를 수 있음). 두 개의 마지막 무지개가 너무 "지저분하다"고 첫 번째 무지개는 괜찮아 보입니다. 나는 완벽한 규칙을 가지고 있지 않으므로 최선의 판단을하십시오 :-)
Stewie Griffin

@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) 에서 작동합니다 .

편집 (2017 년 7 월 6 일) : MATL Online 에서 사용해 볼 수 있습니다 ! .

색상이 올바른지 확인하려면 마지막 5자를 제거하십시오 (몇 초 동안 기다렸다가 출력 끝으로 스크롤해야 함).

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

설명

코드에는 세 가지 주요 단계가 있습니다.

1 단계 :에서 1까지의 숫자로 201x401 행렬을 생성합니다 8. 값 1이있는 픽셀 은 배경 (흰색)이고 값 이있는 픽셀은 2..., 8무지개의 각 밴드를 나타냅니다.

가로 좌표의 범위 -200200왼쪽에서 오른쪽으로, 및 수직 좌표의 범위 0200아래쪽 상단. 따라서 원점 (0,0)은 중앙 하단, 왼쪽 상단은 (-200,200) 등입니다.

레인보우의 다른 대역은 각 픽셀에서 원점까지의 거리를 계산하고 10 픽셀 단위로 양자화함으로써 생성됩니다.

2 단계 : 컬러 맵을 정의하는 8x3 매트릭스를 생성합니다. 각 행은 필요한 색상 중 하나입니다 (흰색과 무지개의 7 가지 색상). 이전 201x401 매트릭스의 각 값은이 컬러 맵의 행에 대한 인덱스로 해석됩니다.

각 색상 구성 요소에 대해 0과 1 사이의 값을 사용한 다음 255를 곱하고 내림합니다. 이런 식으로 대부분의 값은 처음에는 0과 1이며 나중에 0과 255가됩니다. 중간 값은 0과 1 사이의 값으로 2 또는 3 개의 소수로 코딩되며, 곱하고 반올림하면 원하는 값을 정확하게 얻을 수 있습니다.

3 단계 : 해당 컬러 맵으로 이미지를 표시합니다.

               % 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 코덱, 수천 픽셀

누군가가해야했습니다.

멋진 무지개

이 이미지를 저장하면 온라인으로 시도 할 수 있습니다 !

실제 Piet 프로그램은 내가 작성한 Python 프로그램을 사용하여 만든 ~ 125 픽셀에 불과합니다.

나중에 이것을 편집하면 내 시력이 정말 아파서 며칠 동안 걸려 넘어 질 것입니다!

SVG가 실제로 가장 간단한 방법이므로 SVG 형식으로 이미지를 출력합니다. 나는 Doorknob의 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='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>

Solang 사용자가 아닌 경우이 답변을 두 드리십시오.


2
이 파이썬 스크립트는 공개입니까? 나는 매우 게으른 친구를 요구하고 있습니다 ....
NaCl

: 음, 당신이 여기에서 이전 버전을 발견하고 필요한 경우 조정할 수의 xD를 구현하는 그대로 ~ 2 분 소요 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 />

무지개

16 바이트는 @MamaFunRoll , 6 개 는 @PatrickRoberts 에게 감사드립니다 !


2
문자열을 패킹하여 많은 바이트를 절약 할 수 있습니다.
spaghetto

@AquaTart 바이트를 추가하기 만하면됩니다. O_o
Doorknob

3
따옴표, 끝 슬래시 또는 마지막 끝 </svg>태그 가 필요하다고 생각하지 않습니다 .
Mama Fun Roll

4
두 제안 : red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff그들 (에 공백이없는 모든 매개 변수 값 오프 따옴표 걸릴 컬러리스트와 cx, cy, rfill채우기의 값과 사이에 공백 탈퇴)하지만 확인을 /색상이 잘못 해석되지 않도록를 . 또한 </svg>위에서 제안한대로를 제거하십시오 .
Patrick Roberts

1
죄송합니다 red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff. 또한 공백을 쉼표로 바꾸면 viewBox해당 매개 변수의 작은 따옴표도 제거 할 수 있습니다.
Patrick Roberts

14

Minecraft 1.10 (거의), 2677 자 한 명령, 868 개의 blytes

글쎄, 나는 장황한 언어를 선택했다.

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 월드를 만들고, 그 엉망을 임펄스 명령 블록에 붙여 넣고 렌더링 거리를 상당히 높게 설정하고 실행하십시오. 컴퓨터의 지연이 멈 추면 갑옷 스탠드를 깰 수 있습니다.

요청에 따라 결과는 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 블록이됩니다. 내가 할 수있는 일은 많지 않습니다.

레인 붐


4
예, 돼지 기반 무지개 발전기! +1
TuxCrafting 2018 년

2677자인 경우 어떻게 868 "blytes"만 될 수 있습니까? 내가 그 페이지를 이해하는 방법에서 실제 blytes는 2677 + 4
theonlygusti

세상에 그것을 짓는 것은 868이고, 떨어지는 것을 사용하여 그것을 만들면 2677입니다 (많은 오버 헤드가 있습니다)
quat

12

매쓰 152 144 126 바이트

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

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

8 바이트를 줄인 @CatsAreFluffy에게 감사드립니다.


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
그냥 궁금해서 ... 이다 는 "무지개 내장은"이?
mbomb007

@ mbomb007 내가 아는 것은 아닙니다!
martin mar

8

VIM, 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>

예쉬, 이거 멍청 해 개선 할 수있는 것이 있습니다.

내 Pyth answer 와 같이 SVG로 출력합니다 .

3 바이트 를 줄인 @MyHamDJ 에게 감사 합니다!


당신이 당신의 마지막 전직 명령을 교체 할 경우 2 바이트 (또는 키)를 면도 할 수kv3G:norm A'/><cr>
DJMcMayhem

<circle cx...처음 2 번 줄에 문자열을 입력하면 모든 색상을 입력 한 다음 나중에 입력하는 대신 3을 더 줄일 수 있습니다 .
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방법으로 당신의 아이디어를 빌려 주었으면 좋겠다 ...
Patrick Roberts

@PatrickRoberts 물론 괜찮아요, 내가 당신을 빌 렸습니다
edc65

5
나는 확실히 r-=1코드 골프에서 볼 것으로 기대하지 않았다 ...
Neil

@ 닐 바! 최종 릴리스 이전에 일부 반복에서-= 10
이었음

7

신발이 담긴 루비, 155 바이트

Shoes.app(width:400,height:200){background'fff'
8.times{|i|stroke fill %w{f00 ff7f00 ff0 0f0 00f 4b0082 8f00ff fff}[i]
oval left:i*=10,top:i,radius:200-i}}

샘플 출력 :

신발과 루비에 의해 무지개


6

자바 스크립트 (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는 실제로 그래픽 작업을 쉽고, 짧고, 읽기 쉽게 만듭니다.

즉, 옵션을 가능한 한 적은 문자로 줄이려면 가독성을 희생했습니다. 색상 목록을 잘라내는 것이 코드를 풀 때 코드와 비교할 때 많은 도움이 될 것이라고 생각하지 않습니다 ...

비교를 위해 다음은 크런치되지 않은 코드 (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명령은 윈도우가 화면에 매핑하기 전에 (캔버스의 좌표 원점) 더 스크롤이 이루어지지 할 수 있기 때문에 불행히도 필요했다.

또한 위기에 처한 코드는 실제로 호 대신 원을 사용하여 전체 무지개를 그립니다. 창 자르기에만 의존합니다 ...

어쨌든, 나는 모두가 즐기기를 바랍니다. :영형)


단축 하는 lmap대신 사용할 수 있습니다 foreach.
sergiol

그리고 첫 번째 줄을 두 번째 줄 안에 넣을 수 있습니다.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
sergiol

코드의 두 버전간에 일관성이 없습니다. 골프는 create oval한다; ungolfed 않습니다 create arc. 설명해 주시겠습니까?
sergiol

의견 주셔서 감사합니다. ungolfed 버전은 구현의 정확성이 아니라 가독성을위한 것입니다. 그리고 아아, 나는 돌아가서 나의 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 링크에 감사드립니다.
Fatalize

4

자바, 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 개의 호를 그립니다. 나는 그것이 더 향상 될 수 있다고 확신합니다.

Ungolfed 코드 :

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, 같은과 0x00ff000xff00. 다른 바이트를 저장할 0xff0000수 있습니다 255<<16. 루프는 몇 바이트를 더 절약 할 수 있습니다. 선언에 a ,q를 추가하여 하나 이상의 바이트를 저장할 수 있습니다 int. 당신은 그것을 만들어야 할 것 int c[]=대신에 int[] c너무 q이다 int아닌 int[]. 그렇게하면 q=390-v*20;루프에 를 추가 할 수 있습니다 . 를 390-v*20q로 바꿉니다. 1 바이트에는 많은 작업이 필요하지만 바이트는 바이트입니다.
corsiKa

2
IOException 대신 Exception을 발생시켜 2 바이트를 더 절약 할 수 있습니다.
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 바이트 )
케빈 Cruijssen

4

풍선 껌 , 139 119 바이트

16 진 덤프 :

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%)}

편집 : Chrome의 버그를 해결하여 2 바이트를 절약했습니다. @TrangOul 덕분에 2 바이트를 더 절약했습니다.

참고 : 스 니펫은 <div>스택 스 니펫의 제한으로 인해 만기를 사용합니다 .


무지개 바깥 쪽의 배경이 빨간색으로 보입니다 (적어도 내 전화의 경우).
Stewie Griffin

@StewieGriffin Android 용 Firefox에서 제대로 작동합니다. (전화기의 기본 브라우저에서 스택 스 니펫을 활성화하는 방법을 알아낼 수 없었습니다.)
Neil

좋아, 조금 이상하다 :-) 나는 은하 s6 가장자리 btw에서 크롬 49.0.2623.91을 사용하고있다.
Stewie Griffin

@StewieGriffin Windows 용 Chrome에서도 깨진 것 같습니다.
Neil

@StewieGriffin OK 해결 방법이 있다고 생각하고 2 바이트도 절약합니다!
Neil

4

자바 스크립트 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 for 사이 { ... }의 마지막 for 섹션 으로 모든 것을 이동할 수 있습니다 ,. 예 for(i=0;i<8;x.beginPath(),x.arg(...etc...)). 내가 실수하지 않으면 slice/ / splicesubstr을 사용할 수도 있습니다 . <canvas>를 사용하여 만드는 것이 더 짧을 수도 있습니다 .innerHTML. 심지어 HTML + JS 응답 및주는 <캔버스>과의 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
for 루프 본문의 일부를 for : -> (쉼표로 저장) 에 배치 하여 i;s;t;main()-> s;t;main(i)와 다른 바이트를 면도 할 수 있습니다 . ;)code1,code2;;code2)code1;
tucuxi

4

구글 블록 , 48 블록, 75 바이트

아래 gif를 클릭하여 솔루션으로 이동하여 작동 방식을 자세히 살펴보십시오.
설명에 관해서는 이미지가 수천 단어의 가치가 있다고 생각하므로 gif는 수천 개의 이미지 가치가 있다고 생각합니다.

읽을 수있는 큰 gif 링크

참고 : Blockly에서 계산하는 방법을 잘 모르겠으므로 모든 블록을 1 바이트로 계산하고 모든 변수를 정기적으로 계산하여 0== 1 바이트, 530== 3 바이트, Arial== 5 바이트 및 bold== 4 바이트입니다.
무지개를 잘라내는 데 사용한 특수 문자를 2 바이트로 계산했습니다. 주석에 바이트 수의 실수 나 제안을보고하십시오


4

포스트 스크립트 (87 바이트)

육각 덤프 :

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                        ....}..

산출:

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


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}

슈퍼 듀퍼 유효하지 않은 마크 업 (브라우저에서 올바르게 표시되거나 표시되지 않을 수 있음) 그것이 가능한지 확인하고 싶었습니다.


노랑 대신 # FF0을 사용하여 2 바이트를자를 수 있습니다. 스타일 속성 대신 bgcolor 속성을 사용할 수도 있습니다.
curiousdannii

@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);?>

출력 :

무지개를 맛보다!


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명령 프롬프트에서 실행 하여 227 자로 계산하는 것입니다. (PHP 5.6.11 사용)
manatwork

3

Bash + ImageMagick, 159125

eval convert -size 401x201 xc: '-fill \#'{f00,ff7f00,ff0,0f0,00f,4b0082,8f00ff,fff}' -draw "circle 200,200 200,$[i++*10]"' x:

샘플 출력 :

배쉬 + ImageMagick에 의해 무지개


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++]);

무지개

Kritixi Lithos 덕분에 10 바이트 절약
및 dzaima 덕분에 6 바이트 절약


2
다음 과 같이 변경 하거나 비슷한 방식 for(int i=0;i<8;i++)으로 바이트를 더 for(int i=0;i++<8;)
줄일 수 있습니다.

전화를하면서 변수를 사용할 수 있다고 생각하지 않습니다.size()
Kritixi Lithos

@KritixiLithos 무슨 뜻인가요?
Flambino

내가 매개 변수로 변수의 크기를 호출 할 때, 내가 화면의 크기 설정 변수를 사용할 수 없습니다 (실행하기 전에) 나에게 오류를 제공
Kritixi LITHOS을

background(-1)는 한 바이트보다 짧은 바이트 background(255)이며 다른 바이트를 저장하기 위해 255in 배열 c을 변경할 수 있습니다.-1
Kritixi Lithos

2

R, 184170 바이트

고정 픽셀 크기의 이미지를 만드는 것은 R을 사용하여 놀랍도록 까다로운 것으로 나타났습니다. 특히를 호출하여 여백을 0 너비로 명시 적으로 설정하지 않는 한 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 바이트)

이 형식으로 치수 구속 조건을 만족시킬 수는 없지만 어쨌든 공유 할 가치가 있다고 생각했습니다.

: ^ 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

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


2

엑셀 VBA, 213 202 196 192 172 바이트

암호

입력을받지 않고 벡터 이미지로 무지개를 sheets (1) 객체에 출력하는 익명의 VBE 즉시 창 함수

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

.Adjustments(3)=3/80호출 을 제거 하고 8 번째 흰색 호를 추가하기 위한 -11 바이트

-1over 를 사용하기위한 -6 바이트&HFFFFFF

Sheet1over 를 사용하기위한 -3 바이트Sheets(1)

with명령문을 set명령문으로 변환 하기 위한 -6 바이트

Sub익명의 VBE 함수 로 변환 하기 위한 -14 바이트

산출

사진 또는 일어나지 않았다


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

div 게임 스튜디오의 레인보우

설명

프로그램 시작 정의 (공간을 절약하기 위해 "r")

PROGRAM r;

팔레트 검색 설정

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

BEGIN 프로그램 코드

BEGIN

비디오 모드를 400,200으로 설정

set_mode(400200);

루프 x (사전 정의 된 변수) -80 (bg 해킹)에서 80 (7 색 + 흰색 중앙)

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

타원 구속 조건 정의

y=399-x;

타원 그리기-첫 번째 반복에서 화면보다 큰 원을 전체 흰색으로 그립니다 (색인 -8).

draw (유형 (5 = 채워진 타원), 색상, 불투명도, x0, y0, x1, y1)

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

첫 번째 작업이 완료되면 x를 0까지 범프하여 빨간색 밴드 그리기를 시작합니다

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'

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


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

결과 이미지 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

결과 이미지 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

결과 이미지 3

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