Hasilkan gambar periode khusus


10

Buat program atau fungsi yang mengambil input dalam bentuk

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

dan menghasilkan output sedemikian rupa sehingga baris pertama bergantian antara piksel warna <color1>dan <color2>dengan periode <height>. Untuk setiap baris yang mengikuti, periode akan menjadi <height> - <row number>. Perhatikan bahwa <color1>selalu dimulai baris.

Output Sampel

Masukan 120, 6, #000000, #FFFF00:

Output Sampel

Masukan 80, 50, #000000, #FFFF00:

Keluaran Sampel 2

(Output sampel telah diskalakan untuk kejelasan)

Ini adalah , sehingga entri terpendek yang valid dalam byte menang.


Apakah itu fraktal? Apakah ia memiliki dimensi fraktal?
PyRulez

Jawaban:


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>

Menghasilkan gambar SVG yang kompatibel dengan HTML5.


4

Excel VBA, 129 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari jangkauan [A1:D1]dan keluaran ke jangkauan[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

Keluaran

Output untuk input 160, 90, 0xBDD7EE, 0xDDEBF7: Keluaran


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}

Mengembalikan gambar yang dapat diuji, dengan meletakkannya di canvaswidget, menulis pada file, mungkin di clipboard, dll.

Kode untuk pengujian

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

masukkan deskripsi gambar di sini


3

Mathematica, 52 byte

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

Input sampel:

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

3

C (gcc) , 155 143 byte

Mencetak Portable PixMap (.ppm) ke stdout.

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

Cobalah online!

Keluaran

  • Memasukkan: 80, 50, #ad00df, #f17e18

masukkan deskripsi gambar di sini (Gambar dikonversi dan diubah ukurannya.)


Apa keuntungan dari menulis, ~0bukan -1?
sergiol

@sergiol Terlihat lebih keren. Dan - secara teoritis - jika Anda memerlukan variabel yang hanya berisi 1s, ~0akan lebih portabel daripada -1.
Jonathan Frech

2
gambar ini membunuh mataku ketika aku menggulir melewatinya. +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"));}

Keluaran ke file PNG bernama a(tidak ada ekstensi).

Kode sekitar yang digunakan untuk menjalankan lambda: Coba online!

Tidak disatukan

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

Hasil

Input: 80, 50, 0xFF00FF, 0xFFFF00.

contoh output


1

SOGL V0.12 , 83 byte

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

Coba Di Sini!

SOGL dibuat dalam Memproses .. Jadi saya mengambil keuntungan dari itu menggunakan - eksekusi sebagai JavaScript. Bisa dengan mudah banyak byte lebih sedikit (setidaknya 30) jika SOGL memiliki sesuatu yang dibuat untuk grafis.

String tidak terkompresi:

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

Penjelasan:

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

Warna piksel at (x,height-y)adalah[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]

Cobalah online!

Mencetak .ppm ke keluaran seperti pada jawaban Jonathan .


Tampak mirip dengan jawaban C saya ... 105 byte jika Anda mengubah format input warna Anda (karena pertanyaannya tidak secara tegas mendefinisikan format warna).
Jonathan Frech

@ JonathanFrech Terima kasih :) Ya, saya terinspirasi oleh jawaban Anda ketika mencari cara untuk menampilkan gambar.
TFeld

Hanya karena penasaran; program mana yang Anda gunakan untuk membuka file .ppm Anda?
Jonathan Frech

'%d '*3%lebih pendek dari '%d %d %d'%.
Jonathan Frech

@ JonathanFrech Ini berfungsi, atau saya telah menggunakan 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>

Fungsi menghasilkan dengan mengoperasikan pada <canvas id=c>.

Mulai dari kanan bawah kanvas, forloop bersarang berulang ke kiri dan ke atas, dan memeriksa kondisi x/(h-y)%2<1untuk pixel di x,y. Jika kondisinya true, itu warna pixel dengan color1, yang lain color2.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.