挑战很简单:以尽可能少的字节绘制彩虹
彩虹的规格如下:
- 该图形必须恰好为400像素宽和200像素高(如果要单个中心像素,则可以选择401x201)
- 红色环应触摸图形的所有边界(外部半径= 200像素)
- 所有环应具有相同的宽度(10像素)
- 紫罗兰色环的内半径应为130像素
- 弓应该是完美圆的上半部分
- 背景应为白色(也可以使用透明)
- 该图不应有边框(如果无法压制边框,则为例外)
- 不允许使用内置的彩虹制作功能!
彩虹中将使用以下颜色:
这是代码高尔夫,所以最短的代码以字节为单位获胜!
例:
挑战很简单:以尽可能少的字节绘制彩虹
彩虹的规格如下:
彩虹中将使用以下颜色:
这是代码高尔夫,所以最短的代码以字节为单位获胜!
例:
Answers:
-200:200 0:200!PYyq10/k12-t8<*t0>*Q7B.561FTh.295Oh.51h4BPFTF6Bl.5hOh4B8$v255*k5M/YG
这在语言/编译器的当前版本(14.0.0)中有效。
编辑(2017年7月6日):您可以在MATL Online上尝试!。
要检查颜色是否正确,请删除最后五个字符(您需要等待几秒钟,然后向下滚动到输出的末尾)。
该代码包含三个主要步骤:
第1步:生成一个数字从1
到的201x401矩阵8
。具有值的像素1
是背景(白色),具有值2
...的像素8
代表彩虹的每个波段。
卧式坐标范围从-200
到200
左到右,纵坐标的范围从0
以200
自下而上。因此原点(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
有人必须这样做:
如果保存此图像,则可以在线尝试!
实际的Piet程序只是顶部的〜125像素,这是我使用编写的Python程序创建的。
之后再编辑此内容确实会损害我的视野,我将绊倒好几天!
这将以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>
非Esolang用户,祝您好运!
"<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 个字节!
</svg>
标记。
red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
对于颜色列表,并采取单引号关闭所有的参数值没有空格它们(cx
,cy
,r
和fill
),但一定要离开填充值和之间的空间/
,因此颜色不会被曲解。也请</svg>
按照上述建议删除。
red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
。另外,如果您在中用逗号替换空格,则viewBox
也可以删除该参数的单引号。
好吧,我肯定选择了一种冗长的语言。
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块。我无能为力。
Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
感谢@CatsAreFluffy削减了8个字节,而@njpipeorgan又削减了18个:)
#
VS #[[1]]
,#2
VS #[[2]]
,和@@@
VS /@
。
Thread
可以代替Transpose
。
Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
保存另外18个字节,但是想法是一样的。
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个字节!
kv3G:norm A'/><cr>
<circle cx...
是第一次在第2行输入字符串,也可以再减去3 ,而不是先键入所有颜色,然后再输入。
<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个字节。
.replace
方法借用您的想法...
r-=1
在代码高尔夫中看到……
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)}`
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>
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>
如果我们正在画彩虹,那似乎是使用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之间的弧度。最后,它在刚刚绘制的半圆中找到一个间隙,并用当前颜色填充。
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
缩短。
pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; 空洞的create arc
。你能解释一下吗?
\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}
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"));
}
0x0000ff
可能只是0xff
甚至只是255
,同样有0x00ff00
作为0xff00
。0xff0000
可能是255<<16
保存另一个字节。您的循环可能是节省更多字节。您可以通过,q
在int
声明中添加a 来节省一个字节。你必须让它int c[]=
代替int[] c
所以q
是一个int
,而不是一个int[]
。这样可以将a添加q=390-v*20;
到循环中。并用390-v*20
q 代替 一个字节需要很多工作,但是一个字节就是一个字节,对吧?
drawOval
并仅渲染图像的上半部分……虽然可能会贵一些……
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字节)
十六进制转储:
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文件。
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 。
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());
{ ... }
最后一个内部,以分隔,
。例如for(i=0;i<8;x.beginPath(),x.arg(...etc...))
。如果我没记错的话,您也可以使用slice
/ splice
of substr。使<canvas>使用也可能更短.innerHTML
。甚至是HTML + JS答案,并提供<canvas>和id,c
然后应将其自动添加为JS全局变量
substr
在这里的优势在于它的第二个参数是长度,而不是偏移量。至于打高尔夫球,document.body
似乎可以节省很多钱。
#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:重新排列的代码以节省更多。
i;s;t;main()
-> 剃除一个字节s;t;main(i)
,然后通过将for循环主体的一部分放入for:;)code1,code2;
-> ;code2)code1;
(保存一个逗号!)来剃除一个字节。
单击下面的gif导航到解决方案,您可以在其中仔细查看其工作方式。
至于说明,我认为一个图像值得一千个单词,因此一个gif值得一千个图像。
注意:我不确定如何以块为单位进行计数,因此我将每个块计为1字节,每个变量都按常规方式计数,因此0
== 1字节,530
== 3字节,Arial
== 5字节和bold
== 4字节。
我算出用来切断彩虹的特殊字符为2个字节。请在评论中报告字节计数的任何错误或建议
十六进制转储:
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 ....}..
输出:
<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无效标记(在您的浏览器中看起来可能正确或错误)。只是想看看是否有可能。
white
也可以缩短)-不知道为什么我没有看到。我确实bgcolor
在发布之前尝试过,但是很遗憾,它不再受支持(无论如何,在Chrome中)
<?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);?>
输出:
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。)
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个字节
for(int i=0;i<8;i++)
为for(int i=0;i++<8;)
或类似的方式来减少一个字节
size()
background(-1)
是一个字节短于background(255)
,你可以改变255
的阵列c
来-1
拯救另一个字节
使用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])))
不需要输入的匿名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字节用于使用Sheet1
经Sheets(1)
-6个字节,用于将with
语句转换为set
语句
-14个字节,用于从转换Sub
为匿名VBE函数
不是最短的,但很简单。使用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
定义程序开始(命名为“ 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
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
理论上也可以以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
也不是完美的图像,但是比上面的图像(和@ 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