生成特殊时期的图像


10

构造一个以以下形式输入的程序或函数

<width>, <height>, <color1>, <color2>

并产生输出,使得第一行在颜色的像素之间交替 <color1><color2>周期为<height>。对于随后的每一行,周期应为<height> - <row number>。请注意,<color1>总是始于行。

样本输出

输入120, 6, #000000, #FFFF00

样本输出

输入80, 50, #000000, #FFFF00

样本输出2

(为清晰起见,已对示例输出进行了缩放)

这是,因此以字节为单位的最短有效条目获胜。


那是分形吗?它有分形维数吗?
PyRulez

Answers:


6

JavaScript(ES6),177字节

g=
(w,h,f,b)=>`<svg${s=` width=${w} height=`+h}><rect${s} fill=${b} />`+[...Array(h)].map((_,i)=>`<line stroke=${f} stroke-dasharray=${h-i} x1=0 y1=${i} x2=${w} y2=${i} />`).join``
Width: <input id=w value=80 type=number min=1><br>Height: <input id=h value=50 type=number min=1><br>Foreground: <input id=f value=#000000><br>Background: <input id=b value=#FFFF00><br><input type=button value=Go! onclick=o.innerHTML=g(+w.value,+h.value,f.value,b.value)><div id=o>

输出HTML5兼容的SVG图像。


4

Excel VBA,129字节

匿名VBE立即窗口功能,可接收范围内的输入[A1:D1]并输出到范围内[A2].Resize([B1],[A1])

Cells.RowHeight=48:For Each r in[A2].Resize([B1],[A1]):r.Interior.Color=IIf(int((r.Column-1)/([B1]-R.Row+2))Mod 2,[D1],[C1]):Next

输出量

输入输出160, 90, 0xBDD7EE, 0xDDEBF7输出量


4

Tcl / Tk,143

147 150 151

proc P {w h b c} {set p [image c photo -w $w -h $h]
time {incr y
set x 0
time {$p p -t $x $y [expr {[incr x]/($h-$y+1)%2?$c:$b}]} $w} $h
set p}

通过将其放置在 canvas小部件上,写在文件上,可能在剪贴板上等来。

测试代码

set w 960
set h 540
pack [canvas .c -w $w -he $h -highlightt 0]
.c cr image 0 0 -image [P $w $h #00ffff #ffbf32] -anchor nw

在此处输入图片说明



3

C(gcc)155 143字节

将便携式PixMap(.ppm)打印到标准输出。

x,y,z;f(w,h,r,g,b,R,G,B){for(y=~0,printf("P3 %d %d 255",w,h);y++<~-h;)for(x=~0;x++<~-w;)z=(x/(h-y)%2),printf("\n%d %d %d ",z?R:r,z?G:g,z?B:b);}

在线尝试!

输出量

  • 输入: 80, 50, #ad00df, #f17e18

在此处输入图片说明 (图像已转换并调整大小。)


~0代替 写作有什么好处-1
sergiol 17/09/24

@sergiol看起来很酷。并且-从理论上讲-如果您需要一个仅包含1s 的变量,~0它将比更具可移植性-1
乔纳森·弗雷希

2
当我滚动过去时,此图像杀死了我的眼睛。+1
HyperNeutrino


1

Java 8,321 + 42 = 363字节

import java.awt.*;import java.awt.image.*;
(w,h,a,b)->{BufferedImage i=new BufferedImage(w,h,1);Graphics2D g=(Graphics2D)i.getGraphics();g.setColor(new Color(a));g.fillRect(0,0,w,h);g.setColor(new Color(b));for(int j=h;j>0;g.drawLine(0,h-j,w,h-j--))g.setStroke(new BasicStroke(1,0,0,1,new float[]{j},j));javax.imageio.ImageIO.write(i,"png",new java.io.File("a"));}

输出到名为PNG的PNG文件 a(无扩展名)。

用于运行lambda的周围代码:在线尝试!

不打高尔夫球

(w,h,a,b)->{
    BufferedImage i=new BufferedImage(w,h,1);
    Graphics2D g=(Graphics2D)i.getGraphics();
    g.setColor(new Color(a));
    g.fillRect(0,0,w,h);
    g.setColor(new Color(b));
    for(int j=h;j>0;g.drawLine(0,h-j,w,h-j--))
        g.setStroke(new BasicStroke(1,0,0,1,new float[]{j},j));
    javax.imageio.ImageIO.write(i,"png",new java.io.File("a"));
}

结果

输入:80, 50, 0xFF00FF, 0xFFFF00

示例输出


1

SOGL V0.12,83 个字节

..¹Cbe¹"εģνļ▲I-℮eīÆoHι⅛ļJd⁾)⁶f°┌²‘→e∫Ab∫Ƨ01a∙H∑bmWrcwιFHea-¹"S⁸▒Μ¬NrηA¤Y_⅓ļpPboā⁵‘→

在这里尝试!

SOGL是在Processing中制作的。所以我利用了它的优势-以JavaScript执行。如果SOGL有任何东西,很容易少很多字节(至少30个字节)为图形制作。

未压缩的字符串:

..¹Cbe¹"__processing0.hidden=0;cp.size(ŗ,ŗ)”→e∫Ab∫Ƨ01a∙H∑bmWrcwιFHea-¹"cp.stroke(ŗ);cp.point(ŗ,ŗ)”→

说明:

..¹C       save the first 2 inputs as an array on variable C
be¹        save next input - width - on B, next input - height - on E, and wrap both in an array
"__processing0.hidden=0;cp.size(ŗ,ŗ)”→   
           execute "__processing0.hidden=0;cp.size(ŗ,ŗ)" as JavaScript - show the canvas and set the size to the corresponding items in the array

e∫A        repeat height times, saving 1-indexed counter on A
  b∫       repeat width times, pushing 1-indexed counter
    Ƨ01    push "01"
    a∙     multiply vertically A times             - ["01", "01", "01",...]
    H      rotate anticlockwise                    - ["000...","111..."]
    ∑      join together                           - "000..111.."
    bm     mold to the length of width             - "00011100011100"
    W      get the counterth letter of that string - "1"
    r      convert to number                       - 1
    cw     get that item from the variable C
    ι      remove the array from the stack
    FH     push current loops counter minus 1
    ea-    push e-a - height-outerLoopsCounter
    ¹      wrap the 3 items in an array - [itemInC (color), counter-1 (x position), height-outerLoopsCounter (y position)]

    "cp.stroke(ŗ);cp.point(ŗ,ŗ)”→ 
           execute "cp.stroke(ŗ);cp.point(ŗ,ŗ)" as JavaScript, replacing ŗ with the corresponding item from the array

1

SmileBASIC,84字节

DEF C W,H,C,D
FOR J=1TO H
FOR I=0TO W-1N=1AND I/J
GPSET I,H-J,C*!N+D*N
NEXT
NEXT
END

的像素颜色(x,height-y)[color1,color2][x/y & 1]


0

Python 2中123个 101字节

w,h,c,C=input()
print'P3',w,h,255
for i in range(h):
 for j in range(w):print`[c,C][j/(h-i)%2]`[1:-1]

在线尝试!

按照Jonathan的答案输出.ppm来输出。


看起来类似于我的C答案... 如果更改颜色输入格式,则为105个字节(因为该问题未严格定义颜色格式)。
乔纳森·弗雷希

@JonathanFrech谢谢:)是的,当您寻找一种输出图像的方式时,我的灵感来自您的回答。
TF场

只是出于好奇;您使用哪个程序打开.ppm文件?
乔纳森·弗雷希

'%d '*3%比短'%d %d %d'%
乔纳森·弗雷希

@JonathanFrech 有效,或者我用过GIMP
TFeld

0

JavaScript(ES6)+ HTML5,138个字节

(w,h,a,b)=>{with(c.width=w,c.getContext`2d`)for(c.height=y=h;~--y;)for(x=w;~--x;)fillStyle=x/(h-y)%2<1?a:b,fillRect(x,y,1,1)}
<canvas id=c>

f=
(w,h,a,b)=>{with(c.width=w,c.getContext`2d`)for(c.height=y=h;~--y;)for(x=w;~--x;)fillStyle=x/(h-y)%2<1?a:b,fillRect(x,y,1,1)}
#c{display:block
<input id=w value=80>
<input id=h value=50>
<input id=a value=#000>
<input id=b value=#FF0>
<input value=go type=button onclick=f(w.value,h.value,a.value,b.value)>
<canvas id=c>

该功能通过在上进行操作而输出<canvas id=c>

从画布的右下角开始,嵌套for循环向左和向上迭代,并检查处x/(h-y)%2<1像素的条件x,y。如果条件是true,它将使用对该像素着色color1,否则color2

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.