Tạo hình ảnh thời kỳ đặc biệt


10

Xây dựng chương trình hoặc chức năng nhận đầu vào dưới dạng

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

và tạo ra một đầu ra sao cho hàng đầu tiên xen kẽ giữa các pixel màu <color1><color2>với một khoảng thời gian <height>. Đối với mỗi hàng tiếp theo, thời gian sẽ là <height> - <row number>. Lưu ý rằng <color1>luôn luôn bắt đầu hàng.

Đầu ra mẫu

Đầu vào 120, 6, #000000, #FFFF00:

Đầu ra mẫu

Đầu vào 80, 50, #000000, #FFFF00:

Kết quả mẫu 2

(Sản lượng mẫu đã được thu nhỏ cho rõ ràng)

Đây là , vì vậy mục nhập hợp lệ ngắn nhất tính bằng byte sẽ thắng.


Đó có phải là một fractal? Liệu nó có một kích thước fractal?
PyRulez

Câu trả lời:


6

JavaScript (ES6), 177 byte

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>

Xuất ra hình ảnh SVG tương thích HTML5.


4

VBA Excel, 129 byte

Hàm cửa sổ tức thời VBE ẩn danh nhận đầu vào từ phạm vi [A1:D1]và đầu ra cho phạm vi[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

Đầu ra

Đầu ra cho đầu vào 160, 90, 0xBDD7EE, 0xDDEBF7: Đầu ra


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}

Trả về hình ảnh có thể được kiểm tra, bằng cách đặt nó vào một canvaswidget, viết trên một tệp, có thể nằm trong bảng tạm, v.v.

Mã kiểm tra

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

nhập mô tả hình ảnh ở đây


3

Toán học, 52 byte

Image@Table[If[Mod[j,2i]>i,#4,#3],{i,-#2,-1},{j,#}]&

Đầu vào mẫu:

Image@Table[If[Mod[j,2i]>i,#4,#3],{i,-#2,-1},{j,#}]&[120,6,Black,Yellow]

3

C (gcc) , 155 143 byte

In PixMap di động (.ppm) sang thiết bị xuất chuẩn.

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

Hãy thử trực tuyến!

Đầu ra

  • Đầu vào: 80, 50, #ad00df, #f17e18

nhập mô tả hình ảnh ở đây (Hình ảnh được chuyển đổi và thay đổi kích thước.)


Lợi thế của văn bản ~0thay vì là -1gì?
sergiol

@sergiol Trông nó ngầu hơn. Và - về mặt lý thuyết - nếu bạn cần một biến chỉ chứa 1s, ~0sẽ dễ mang theo hơn -1.
Jonathan Frech

2
hình ảnh này đã giết chết mắt tôi khi tôi lướt qua nó. +1
HyperNeutrino


1

Java 8, 321 + 42 = 363 byte

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"));}

Xuất ra một tệp PNG có tên a(không có phần mở rộng).

Mã xung quanh được sử dụng để chạy lambda: Hãy thử trực tuyến!

Ung dung

(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"));
}

Kết quả

Đầu vào : 80, 50, 0xFF00FF, 0xFFFF00.

đầu ra ví dụ


1

SOGL V0.12 , 83 byte

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

Hãy thử nó ở đây!

SOGL được tạo ra trong Xử lý .. Vì vậy, tôi đã tận dụng lợi thế đó bằng cách sử dụng - thực thi như JavaScript. Có thể dễ dàng có nhiều byte ít hơn (ít nhất là 30) nếu SOGL có bất cứ thứ gì được làm cho đồ họa.

Chuỗi không nén:

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

Giải trình:

..¹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 byte

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

Màu của một pixel tại (x,height-y)[color1,color2][x/y & 1]


0

Python 2 , 123 101 byte

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]

Hãy thử trực tuyến!

In .ppm thành đầu ra như trong câu trả lời của Jonathan .


Trông tương tự như câu trả lời C của tôi ... 105 byte nếu bạn thay đổi định dạng nhập màu của mình (vì câu hỏi không xác định chặt chẽ định dạng màu).
Jonathan Frech

@JonathanFrech Cảm ơn :) Vâng, tôi đã lấy cảm hứng từ câu trả lời của bạn khi tìm cách để xuất hình ảnh.
TFeld

Chỉ vì tò mò; bạn sử dụng chương trình nào để mở tệp .ppm?
Jonathan Frech

'%d '*3%ngắn hơn '%d %d %d'%.
Jonathan Frech

@JonathanFrech Điều này hoạt động hoặc tôi đã sử dụng GIMP
TFeld

0

JavaScript (ES6) + HTML5, 138 byte

(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>

Các chức năng đầu ra bằng cách hoạt động trên <canvas id=c>.

Bắt đầu từ dưới cùng bên phải của khung vẽ, forvòng lặp lồng nhau lặp sang trái và lên và kiểm tra điều kiện x/(h-y)%2<1cho pixel tại x,y. Nếu điều kiện là true, nó tô màu pixel đó color1, khác color2.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.