画彩虹


25

挑战很简单:以尽可能少的字节绘制彩虹

彩虹的规格如下:

  • 该图形必须恰好为400像素宽和200像素高(如果要单个中心像素,则可以选择401x201)
  • 红色环应触摸图形的所有边界(外部半径= 200像素)
  • 所有环应具有相同的宽度(10像素)
    • 紫罗兰色环的内半径应为130像素
  • 弓应该是完美圆的上半部分
  • 背景应为白色(也可以使用透明)
  • 该图不应有边框(如果无法压制边框,则为例外)
  • 不允许使用内置的彩虹制作功能!

彩虹中将使用以下颜色:

rainbow

这是代码高尔夫,所以最短的代码以字节为单位获胜!

例:

Rainbow

相关,但不同!


26
内置彩虹使得函数不允许我敢肯定有数学一个
路易斯Mendo

彩虹有多不完美?从不抗锯齿到流泪?考虑一下此答案中
穿越

@aross:它看起来应该像彩虹样本(由于计算不准确,某些像素可能会有所不同)。最后两条彩虹太“混乱”,而第一个看起来还不错。我没有完美的规则,因此请运用最佳判断力:-)
Stewie Griffin

@StewieGriffin我问的原因是因为显然PHP图形是相当多的错误,而该解决方案在理论上是正确的。那么,第二个是,第三个是抗锯齿(也不能很好地工作)
aross

不允许使用矢量图形吗?编辑:没关系-我看到已经有一个TikZ答案,所以我认为是。
朱利安·沃尔夫

Answers:


15

MATL107 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上尝试

要检查颜色是否正确,请删除最后五个字符(您需要等待几秒钟,然后向下滚动到输出的末尾)。

enter image description here

说明

该代码包含三个主要步骤:

第1步:生成一个数字从1到的201x401矩阵8。具有值的像素1是背景(白色),具有值2...的像素8代表彩虹的每个波段。

卧式坐标范围从-200200左到右,纵坐标的范围从0200自下而上。因此原点(0,0)是底部中心,左上角是(-200,200),依此类推。

通过计算从每个像素到原点的距离并以10个像素为步长进行量化,可以生成彩虹的不同波段。

第2步:生成一个8x3矩阵,定义颜色图。每行是必要的颜色之一(白色和彩虹的七种颜色)。前一个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 codels,几千个像素

有人必须这样做:

An awesome rainbow

如果保存此图像,则可以在线尝试

实际的Piet程序只是顶部的〜125像素,这是我使用编写的Python程序创建的。

之后再编辑此内容确实会损害我的视野,我将绊倒好几天!

这将以SVG格式输出图像,因为SVG确实是(在我看来)最简单的方法。我无耻地偷了Doorknob的SVG代码。输出:

correct output

好吧,这确实是:

<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

嗯,实施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 />

rainbow

感谢@MamaFunRoll提供16个字节,而@PatrickRoberts提供6 个字节!


2
通过打包字符串,您可能会节省很多字节。
意大利面条

@AquaTart所有要做的就是添加字节。O_o
门把手

3
我认为您不需要任何引号,斜杠或最后一个</svg>标记。
Mama Fun Roll'3

4
两个建议:red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff对于颜色列表,并采取单引号关闭所有的参数值没有空格它们(cxcyrfill),但一定要离开填充值和之间的空间/,因此颜色不会被曲解。也请</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世界,将混乱的内容粘贴到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
是的,基于猪的彩虹生成器!+1
TuxCrafting,2016年

如果是2677个字符,怎么可能只有868个“ blytes”?据我了解,该页面的实际blytes应该是2677 + 4
theonlygusti

这是868,如果你建立了世界,2677,如果您使用fallingsand创建它(里面有很多的开销)

12

数学152 144 126字节

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

enter image description here

感谢@CatsAreFluffy削减了8个字节,而@njpipeorgan又削减了18个:)


3
使用#VS #[[1]]#2VS #[[2]],和@@@VS /@
CalculatorFeline

1
另外,也Thread可以代替Transpose
LegionMammal978 '16

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 '16

@ mbomb007不是我知道的!
马丁

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>

是的,这很笨拙。必须进行改进。

输出为SVG,就像我的Pyth答案一样

感谢@MyHamDJ削减了3个字节!


如果您将最后一个ex命令替换为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=200cx=200 cy=200 r=${--r}0代替viewBox='0 0 40 20'。那应该节省7个字节。
帕特里克·罗伯茨

我希望我可以用这种.replace方法借用您的想法...
Patrick Roberts

@PatrickRoberts当然可以,我借用了你们的一些
edc65

5
我当然没想到会r-=1在代码高尔夫中看到……
Neil

@Neil bah!在最终版本发布之前,它在某些迭代中是-= 10
edc65

7

Ruby with Shoes,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}}

样本输出:

rainbow by Ruby with Shoes


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值(并且可能无助于字节计数),因为标准Spectrum色不匹配。

DRAW命令可以采取一个额外的参数,这使得它转过若干 X1,Y1和X2,Y2之间的弧度。最后,它在刚刚绘制的半圆中找到一个间隙,并用当前颜色填充。

enter image description here


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}

las,这种问题总是偏爱某些深奥的语言...也就是说,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不幸的是,该命令是必需的,因为在将窗口映射到屏幕之前无法进行滚动(画布的坐标原点)。

而且,紧缩的代码实际上绘制了一条完整的彩虹(使用圆形而不是圆弧),并且仅依赖于窗口裁剪...

无论如何,我希望大家都喜欢。:O)


您可以使用lmap而不是foreach缩短。
sergiol

您可以将第一行放入第二行中,例如:pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
sergiol

您的代码的两个版本之间没有一致性。打高尔夫球create oval; 空洞的create arc。你能解释一下吗?
sergiol

感谢您的评论。非公开版本用于可读性,而不是实现的准确性。而且,a,我不会回过头来修复我所有的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作为0xff000xff0000可能是255<<16保存另一个字节。您的循环可能是节省更多字节。您可以通过,qint声明中添加a 来节省一个字节。你必须让它int c[]=代替int[] c所以q是一个int,而不是一个int[]。这样可以将a添加q=390-v*20;到循环中。并用390-v*20q 代替 一个字节需要很多工作,但是一个字节就是一个字节,对吧?
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字节
凯文·克鲁伊森

4

泡泡糖139字节

十六进制转储:

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>由于堆栈片段的限制,该片段使用a 。


看起来彩虹外面的背景是红色的(至少在我的手机上)。
Stewie Griffin

@StewieGriffin在适用于Android的Firefox中对我适用。(我不知道如何在手机的默认浏览器中启用堆栈片段。)
Neil

好的,有点奇怪:-)我在银河s6边缘顺便说一句使用了铬49.0.2623.91。
Stewie Griffin

@StewieGriffin看起来在Windows版Chrome中也已损坏。
尼尔

@StewieGriffin OK,我想我有一个解决方法,它也节省了两个字节!
尼尔

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'3

您可以将for之间的所有内容移动到for的{ ... }最后一个内部,以分隔,。例如for(i=0;i<8;x.beginPath(),x.arg(...etc...))。如果我没记错的话,您也可以使用slice/ spliceof substr。使<canvas>使用也可能更短.innerHTML。甚至是HTML + JS答案,并提供<canvas>和id,c然后应将其自动添加为JS全局变量
Downgoat 16-3-12

@Downgoat substr在这里的优势在于它的第二个参数是长度,而不是偏移量。至于打高尔夫球,document.body似乎可以节省很多钱。
尼尔

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),然后通过将for循环主体的一部分放入for:;)code1,code2;-> ;code2)code1;(保存一个逗号!)来剃除一个字节。
tucuxi

4

Google Blockly,48块,75字节

单击下面的gif导航到解决方案,您可以在其中仔细查看其工作方式。
至于说明,我认为一个图像值得一千个单词,因此一个gif值得一千个图像。

链接到大可读的gif

注意:我不确定如何以块为单位进行计数,因此我将每个块计为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                        ....}..

输出:

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}

超级duper无效标记(在您的浏览器中看起来可能正确或错误)。只是想看看是否有可能。


您可以使用#FF0而不是黄色来削减两个字节。您也许也可以使用bgcolor属性而不是style属性。
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);?>

输出:

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从命令提示符运行,并将其计为227个字符。(使用PHP 5.6.11。)
manatwork'Mar 14'16

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:

样本输出:

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

rainbow

多亏了Kritixi Lithos,节省了10个字节...多亏了dzaima,节省
了6个字节


2
可以通过更改for(int i=0;i<8;i++)for(int i=0;i++<8;)或类似的方式来减少一个字节
quat

我认为您不能在调用时使用变量size()
Kritixi Lithos

@KritixiLithos是什么意思?
Flambino '16

当我用变量作为参数调用size时,它给我一个错误(运行前),我无法使用变量在屏幕上设置尺寸
Kritixi Lithos

background(-1)是一个字节短于background(255),你可以改变255的阵列c-1拯救另一个字节
Kritixi LITHOS

2

R,184170字节

使用R制作具有固定像素尺寸的图像非常困难,因为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

第四沙龙Hai句(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

enter image description here


2

Excel VBA中,213 202 196 192 172个字节

不需要输入的匿名VBE立即窗口函数,将彩虹作为矢量图像输出到sheets(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字节用于使用Sheet1Sheets(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

将视频模式设置为400,200

set_mode(400200);

循环x(预定义变量)从-80(bg hack)到80(7种颜色+白色中心)

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

定义椭圆约束

y=399-x;

绘制椭圆-第一次迭代时,绘制一个比屏幕大的全白圆圈(索引-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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.