Tantangannya sederhana: Gambar pelangi sesedikit mungkin byte
Spesifikasi untuk pelangi adalah sebagai berikut:
- Angka harus persis 400 piksel lebar dan 200 piksel tinggi (opsional 401x201 jika Anda ingin satu piksel tengah)
- Cincin merah harus menyentuh semua batas gambar (jari-jari luar = 200 piksel)
- Semua dering harus memiliki lebar yang sama (10 piksel)
- Cincin ungu akan memiliki jari-jari dalam 130 piksel
- Busur harus menjadi bagian atas dari lingkaran yang sempurna
- Latar belakang harus putih (transparan juga diterima)
- Angka tidak boleh memiliki batas, (pengecualian dibuat jika perbatasan tidak dapat ditekan)
- Fungsi pelangi bawaan tidak diizinkan!
Warna-warna berikut harus digunakan dalam pelangi:
Ini kode golf, jadi kode terpendek dalam byte menang!
Contoh:
code-golf
graphical-output
Stewie Griffin
sumber
sumber
Jawaban:
MATL ,
1079592878483 byteIni berfungsi dalam rilis saat ini (14.0.0) dari bahasa / kompiler.
EDIT (6 Juli 2017) : Anda dapat mencobanya di MATL Online! .
Untuk memeriksa apakah warnanya benar, hapus lima karakter terakhir (Anda perlu menunggu beberapa detik dan gulir ke bawah ke akhir output).
Penjelasan
Kode ini memiliki tiga langkah utama:
Langkah 1 : Hasilkan matriks 201x401 dengan angka dari
1
hingga8
. Pixel dengan nilai1
adalah latar belakang (putih), piksel dengan nilai2
, ...,8
mewakili setiap pita pelangi.Koordinat horisontal berkisar dari
-200
ke200
kiri ke kanan, dan koordinat vertikal berkisar dari0
ke200
bawah ke atas. Jadi asal (0,0) adalah pusat bawah, sudut kiri atas (-200,200), dll.Pita pelangi yang berbeda dihasilkan dengan menghitung jarak dari setiap piksel ke titik asal dan menghitungnya dalam langkah 10 piksel.
Langkah 2 : Hasilkan matriks 8x3 yang mendefinisikan colormap. Setiap baris adalah salah satu warna yang diperlukan (putih dan tujuh warna pelangi). Setiap nilai dari matriks 201x401 sebelumnya akan ditafsirkan sebagai indeks ke deretan colormap ini.
Kami menghasilkan matriks colormap menggunakan nilai antara 0 dan 1 untuk setiap komponen warna, dan kemudian mengalikannya dengan 255 dan membulatkan ke bawah. Dengan cara ini, sebagian besar nilai awalnya 0 dan 1, yang nantinya akan menjadi 0 dan 255. Nilai menengah dikodekan sebagai nilai antara 0 dan 1 dengan 2 atau 3 desimal, dipilih sehingga ketika dikalikan dan dibulatkan memberikan nilai yang diinginkan tepat.
Langkah 3 : Tampilkan gambar dengan colormap itu.
sumber
Piet , 838 kode, beberapa ribu piksel
Seseorang harus melakukannya:
Jika Anda menyimpan gambar ini, Anda dapat mencobanya secara online !
Program Piet sebenarnya hanya bagian atas ~ 125 piksel, yang saya buat menggunakan program Python yang saya tulis.
Mengedit ini setelah itu benar-benar melukai penglihatanku, aku akan tersandung berhari-hari!
Ini menampilkan gambar dalam format SVG, karena SVG benar-benar (menurut saya) adalah cara paling sederhana untuk melakukan ini. Tanpa malu-malu aku mencuri kode SVG Doorknob. Output:
baik, ini benar-benar:
Semoga berhasil mengalahkan jawaban ini, pengguna non-Esolang!
sumber
Pyth,
150149128 byteOutput dalam SVG:
Terima kasih kepada @MamaFunRoll untuk 16 byte dan @PatrickRoberts untuk 6 lebih!
sumber
</svg>
tag tanda terakhir .red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
untuk daftar warna dan mengambil tanda kutip tunggal dari semua nilai-nilai parameter yang tidak memiliki ruang di dalamnya (cx
,cy
,r
danfill
) tapi pastikan untuk meninggalkan ruang antara nilai mengisi dan/
sehingga warna tidak mendapatkan disalahartikan . Hapus juga</svg>
seperti yang disarankan di atas.red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
. Juga jika Anda mengganti spasi dengan koma diviewBox
Anda dapat menghapus tanda kutip tunggal untuk parameter itu juga.Minecraft 1.10 (hampir), 2677 karakter satu perintah, 868 blytes
Yah saya yakin memilih bahasa verbose.
Buat dunia Superflat baru, rekatkan itu ke dalam blok perintah Impuls, atur jarak render Anda cukup tinggi, dan jalankan. Hancurkan dudukan pelindung saat komputer Anda berhenti tertinggal.
Hasilnya adalah 400 blok dan tinggi 200 blok, seperti yang diminta.
Saya menggunakan satu generator perintah MrGarretto untuk mengemas semuanya, dan kemudian memodifikasi hasil itu sedikit untuk menghemat beberapa byte lagi. Inilah input untuk itu:
Itu total 15 1,9+ blok perintah, dan 838 byte, jadi 15 * 2 + 838 = 868 blytes .
Inilah bagian (hampir), itu kehilangan sudut dan tepi. Secara logis seharusnya tidak - Minecraft bug? Tepatnya 400x200 blok jika bukan karena itu. Tidak banyak yang bisa saya lakukan.
sumber
Mathematica
152144126 byteTerima kasih @CatsAreFluffy untuk mencukur 8 byte & @njpipeorgan untuk 18 lebih lanjut :)
sumber
#
vs#[[1]]
,#2
vs#[[2]]
, dan@@@
vs/@
.Thread
berfungsi sebagai gantiTranspose
.Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
menyimpan 18 byte lagi, tetapi idenya sama.vim,
165142139Ya, ini kikuk. Harus ada perbaikan yang bisa dilakukan.
Output sebagai SVG, seperti jawaban Pyth saya .
Terima kasih kepada @MyHamDJ karena telah mengurangi 3 byte!
sumber
kv3G:norm A'/><cr>
<circle cx...
string pada baris 2 pertama kali, alih-alih mengetik semua warna kemudian memasukkannya setelah itu.HTML + SVG + ES6, 169
sumber
height=200
dancx=200 cy=200 r=${--r}0
bukannyaviewBox='0 0 40 20'
. Itu akan menghemat 7 byte..replace
metode ini ...r-=1
dalam kode golf ...Ruby with Shoes, 155 byte
Output sampel:
sumber
JavaScript (ES6),
171158 byteKredit ke @ edc65 untuk ide untuk dikonversi
untuk
Ini mungkin terlihat lebih lama tetapi jumlah byte yang disimpan dalam mengompresi array ke sebuah string layak konversi. (Ini menghemat 13 byte dalam kasus ini)
Demo
sumber
HTML (162) + CSS (146)
HTML (224) + CSS (128)
sumber
SpecBAS -
318254 byteJika kita menggambar pelangi, maka sepertinya tempat yang bagus untuk menggunakan penerus ZX Spectrum BASIC.
Baris 2 mengatur palet untuk nilai RGB spesifik yang diperlukan (dan mungkin tidak membantu jumlah byte) karena warna Spectrum standar tidak cocok.
The
DRAW
perintah dapat mengambil parameter tambahan yang membuatnya berubah melalui sejumlahderajatradian antara x1, y1 dan x2, y2. Akhirnya ia menemukan celah di setengah lingkaran yang baru saja digambar dan banjir mengisi dengan warna saat ini.sumber
Tcl / Tk , 263 byte
Sayangnya, pertanyaan semacam ini selalu mendukung beberapa bahasa esoterik ... Yang mengatakan, Tcl / Tk benar-benar membuat operasi grafis semuanya: mudah, pendek, dan mudah dibaca .
Yang mengatakan, saya telah mengorbankan keterbacaan untuk mengerahkan opsi ke karakter sesedikit mungkin. Saya tidak membayangkan memecahkan daftar warna akan banyak membantu dibandingkan dengan kode untuk membukanya ...
Sebagai perbandingan, berikut ini kode yang belum dibuka (380 byte):
Itu
after
perintah sayangnya diperlukan karena tidak ada bergulir (dari kanvas koordinat asal) dapat dilakukan sebelum jendela dipetakan ke layar.Juga, kode berderak benar-benar menarik penuh pelangi (menggunakan lingkaran, bukan busur) dan hanya bergantung pada kliping jendela ...
Bagaimanapun, saya harap kalian semua menikmati. :HAI)
sumber
lmap
sebagai gantiforeach
mempersingkat.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; ungolfed tidakcreate arc
. Bisakah Anda jelaskan?LaTeX, 290 byte
Coba di sini .
Penjelasan
sumber
Java, 354 byte
Cukup gunakan
Graphics2D
kelas untuk menggambar 7 busur, dengan array untuk menyimpan warna. Saya yakin itu bisa diperbaiki lebih lanjut.Kode tidak dikunci:
sumber
0x0000ff
bisa saja0xff
atau bahkan adil255
, sama dengan0x00ff00
menjadi0xff00
.0xff0000
bisa255<<16
untuk menyimpan byte lain. Simpul Anda bisa menyimpan beberapa byte lagi. Anda dapat menyimpan satu byte lagi dengan menambahkan a,q
keint
deklarasi Anda . Anda harus membuatnyaint c[]=
bukannyaint[] c
jadiq
adalahint
dan bukanint[]
. Melakukan itu memungkinkan Anda menambahkan aq=390-v*20;
ke loop Anda. dan ganti390-v*20
dengan q. Ini banyak pekerjaan untuk satu byte, tetapi satu byte adalah byte, kan ?!drawOval
dan hanya membuat bagian atas gambar ... mungkin sedikit lebih mahal ...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 bytes )Bubblegum ,
139119 byteHexdump:
Sayangnya, ini lebih pendek dari jawaban Pyth saya . :(
Menghasilkan file SVG yang sama.
sumber
CSS,
244242240 byteSunting: Disimpan 2 byte dengan mengatasi bug di Chrome. Menyimpan 2 byte lebih lanjut berkat @TrangOul.
Catatan: snippet menggunakan
<div>
karena keterbatasan dari Stack Snippets.Tampilkan cuplikan kode
sumber
JavaScript
271251sumber
{ ... }
ke dalam bagian terakhir untuk, dipisahkan oleh,
. misfor(i=0;i<8;x.beginPath(),x.arg(...etc...))
. Anda mungkin juga dapat menggunakanslice
/splice
dari substr jika saya tidak salah. Mungkin juga lebih pendek untuk menggunakan <canvas>.innerHTML
. Atau bahkan HTML + JS jawaban dan berikan <canvas> dan idc
dan kemudian secara otomatis akan ditambahkan sebagai variabel global JSsubstr
memiliki kelebihan di sini karena parameter kedua adalah panjang, bukan offset. Sedangkan untuk bermain golf,document.body
sepertinya akan memberikan penghematan yang cukup besar.C,
220217213 byteOutputnya adalah PPM (jenis biner).
Sunting: Disimpan beberapa byte berkat @tucuxi.
Sunting 2: Menyusun ulang kode untuk menyimpan lebih banyak lagi.
sumber
i;s;t;main()
->s;t;main(i)
, dan yang lainnya dengan menempatkan bagian dari for loop body Anda di dalam for:;)code1,code2;
->;code2)code1;
(menyimpan koma!).Google Blockly , 48 blok, 75 byte
Klik gif di bawah ini untuk menavigasi ke solusi, di mana Anda bisa melihat lebih dekat cara kerjanya.
Adapun penjelasan, saya pikir gambar bernilai seribu kata, dan dengan demikian gif bernilai seribu gambar.
tautan ke gif yang bisa dibaca besar
Catatan: Saya tidak yakin bagaimana cara menghitung di Blockly, jadi saya menghitung setiap blok sebagai 1 byte, dan setiap variabel dengan cara biasa, sehingga
0
== 1 byte,530
== 3 byte,Arial
== 5 byte danbold
== 4 byte.Saya menghitung karakter khusus yang saya gunakan untuk memotong pelangi sebagai 2 byte. Silakan laporkan kesalahan atau saran dari jumlah byte dalam komentar
sumber
Postscript (87 byte)
Hex dump:
Keluaran:
sumber
HTML + CSS,
310307 byteSuper-duper markup tidak valid (mungkin atau mungkin tidak terlihat benar di browser Anda). Hanya ingin melihat apakah itu mungkin.
sumber
white
juga bisa disingkat) tentu saja - tidak tahu mengapa saya tidak melihat itu. Saya sudah mencobabgcolor
sebelum memposting, tapi sayangnya itu tidak lagi didukung (di sini di Chrome pula)PHP, 285 byte
Output:
sumber
header()
panggilan itu dan bahkan tag PHP pembuka. Di Linux yang paling sederhana adalah dijalankanphp -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
dari command prompt dan hitung sebagai 227 karakter. (Menggunakan PHP 5.6.11.)Bash + ImageMagick,
159125 karakterOutput sampel:
sumber
Memproses,
196186181179169163 byteDisimpan 10 byte berkat Kritixi Lithos
... dan 6 byte lainnya berkat dzaima
sumber
for(int i=0;i<8;i++)
menjadifor(int i=0;i++<8;)
atau serupasize()
background(-1)
adalah salah satu byte lebih pendek daribackground(255)
, dan Anda dapat mengubah255
dalam arrayc
untuk-1
menyimpan byte lainR,
184170 byteMembuat gambar dengan dimensi piksel tetap ternyata sangat rumit dengan R, yang fungsi plotnya sebagian besar ditujukan untuk ahli statistik. Secara khusus R meninggalkan ruang ekstra untuk label dan mengkoordinasikan sumbu kecuali jika Anda secara eksplisit menetapkan margin sebagai lebar nol dengan menelepon
par
.Di sisi lain beberapa warna yang diperlukan (khususnya merah, kuning dan biru) ditemukan dalam palet default, dan dapat dirujuk hanya dengan indeks integer.
sumber
Forth Salon Haiku (184 bytes)
Saya tidak dapat memenuhi batasan dimensi dengan format ini, tetapi saya pikir itu layak untuk dibagikan.
sumber
Excel VBA,
213202196192172 BytesKode
Fungsi jendela langsung VBE anonim yang tidak mengambil input dan mengeluarkan pelangi, sebagai gambar vektor, ke objek lembar (1)
Versi Subrutin
-11 byte untuk menghapus
.Adjustments(3)=3/80
panggilan dan menambahkan busur putih ke-8-6 byte untuk menggunakan
-1
lebih dari&HFFFFFF
-3 byte untuk menggunakan
Sheet1
lebih dariSheets(1)
-6 byte untuk mengubah
with
pernyataan keset
pernyataan-14 byte untuk mengkonversi dari
Sub
ke fungsi VBE anonimKeluaran
sumber
DIV Games Studio (184 bytes)
Bukan yang terpendek tapi cukup sederhana. Menggunakan palet default DIV
Penjelasan
Tentukan awal program (beri nama "r" untuk menghemat ruang)
setup lookup palette
BEGIN kode program
Atur mode video ke 400.200
loop x (variabel yang ditentukan sebelumnya) dari -80 (yang bg hack) ke 80 (7 warna + pusat putih)
mendefinisikan batasan elipse
draw elipse - pada iterasi pertama ini menggambar lingkaran yang lebih besar dari layar dalam warna putih penuh (indeks -8)
draw (type (5 = elipse filled), warna, opacity, x0, y0, x1, y1)
setelah pertama kali selesai, tekan x hingga nol untuk mulai menggambar pita merah
end untuk loop
loop tak terbatas, menggambar layar.
end (cocok BEGIN di atas program)
sumber
Perl, 175 + 1 = 176 byte
sumber
PHP, 190 byte
Jalankan seperti ini:
Juga bekerja dalam teori pada 179 byte (tetapi gambar terlihat agak berantakan, GD buruk):
Juga bukan gambar yang sempurna, tetapi jauh lebih baik daripada yang di atas (dan @ 166 byte):
sumber