Hasilkan kotak warna RGB

47

Ini! adalah kotak warna RGB ...

Kotak RGB dasar

Pada dasarnya ini adalah matriks 2 dimensi di mana:

  • Baris pertama, dan kolom pertama, berwarna merah.
  • Baris kedua, dan kolom kedua, berwarna hijau.
  • Baris ketiga, dan kolom ketiga, berwarna biru.

Berikut adalah warna yang dijelaskan secara grafis, menggunakan huruf R, G, dan B.

diagram baris dan kolom

Berikut cara kami menghitung warna setiap ruang pada kisi yang dihitung.

  • Merah + Merah = Merah (# FF0000)
  • Hijau + Hijau = Hijau (# 00FF00)
  • Biru + Biru = Biru (# 0000FF)
  • Merah + Hijau = Kuning (# FFFF00)
  • Merah + Biru = Ungu (# FF00FF)
  • Hijau + Biru = Teal (# 00FFFF)

Tantangan

  • Tulis kode untuk menghasilkan kotak warna RGB.
  • Ini kode golf, jadi cobalah melakukannya dalam jumlah byte terkecil.
  • Gunakan bahasa pemrograman apa pun atau bahasa markup untuk menghasilkan kisi Anda.
  • Hal yang saya pedulikan:
    • Hasilnya harus menampilkan grafik RGB grid dengan warna yang ditentukan.
  • Hal-hal yang tidak saya pedulikan:
    • Jika outputnya berupa gambar, HTML, SVG atau markup lainnya.
    • Ukuran atau bentuk blok warna.
    • Perbatasan, jarak dll antara atau di sekitar blok.
    • Jelas tidak perlu ada label yang memberi tahu Anda apa warna baris dan kolom seharusnya.
AJFaraday
sumber
2
Bisakah kita menampilkan objek mage asli ke bahasa kita, misalnya Bitmapobjek di C #?
Perwujudan Ketidaktahuan
1
@EmbodimentofIgnorance kedengarannya bagus untuk saya.
AJFaraday
11
Saya menunggu solusi di Piet
manassehkatz-Reinstate Monica
4
@manassehkatz Mungkinkah hard-coding data akan menjadi golf yang lebih baik daripada mengeksekusinya?
AJFaraday
3
Bukannya itu benar-benar penting, tetapi saya pribadi telah menggunakan cyan dan magenta alih-alih warna teal dan ungu (atau apa pun). Sejauh yang saya tahu, ini adalah istilah resmi yang digunakan dalam pencetakan atau model warna yang kurang menarik seperti CMYK .
Arnauld

Jawaban:

34

Bash, 44

  • 2 byte disimpan berkat @NahuelFouilleul
  • 2 byte disimpan berkat @manatwork
printf "${f=^[[3%dm.}$f$f
" 1 3 5 3 2 6 5 6 4

Di sini, blok adalah .karakter. ^[adalah karakter pelarian ASCII literal (0x1b).

enter image description here

Anda dapat membuat ulang skrip ini sebagai berikut:

base64 -d <<< cHJpbnRmICIke2Y9G1szJWRtLn0kZiRmCiIgMSAzIDUgMyAyIDYgNSA2IDQ= > rgbgrid.sh
Trauma Digital
sumber
11
apa apaan? tolong jelaskan :)
flawr
1
dapat menghemat 2 byte menggunakan ekspansi shellprintf ${f=\\e[3%dm.}$f$f\\n 1 3 5 3 2 6 5 6 4
Nahuel Fouilleul
1
Yang ini benar-benar mencerahkan hariku, terima kasih!
AJFaraday
4
printf \\e[3%dm. 1'memperluas \\e[31m.yang merupakan kode pelarian ANSI untuk merah dan seterusnya dan .merupakan karakter untuk dicetak.
Fredrik Pihl
3
Melanjutkan saran @ NahuelFouilleul, kutip dua kali: printf "${f=^[[3%dm.}$f$f␤" 1 3 5 3 2 6 5 6 4(Di mana ^[karakter pelarian literal = 1 byte dan line karakter baris baru literal = 1 byte.)
manatwork
26

Perakitan 8088, IBM PC DOS,  44  43 byte

Daftar:

BE 0122     MOV  SI, OFFSET CTBL    ; load color bar table into [SI]
        LOOP_COLOR: 
B9 0001     MOV  CX, 1              ; display 1 char and clear CH (changed by INT 10H:3)
AC          LODSB                   ; load next color byte 
8A D8       MOV  BL, AL             ; move new color to BL
3C 10       CMP  AL, 010H           ; if this is third color in row: SF=0, CF=0 
                                    ; else if last color: SF=1, CF=0
                                    ; else continue on same row: CF=1
B8 09DB     MOV  AX, 09DBH          ; AH=9 (write char with attr), AL=0DBH (a block char) 
CD 10       INT  10H                ; call PC BIOS, display color block
B4 03       MOV  AH, 3              ; get cursor position function
CD 10       INT  10H                ; call PC BIOS, get cursor
72 04       JC   NEXT_COL           ; if not last in row, move to next column 
78 09       JS   EXIT               ; if last color, exit 
B2 FF       MOV  DL, -1             ; otherwise move to first column and next row 
        NEXT_COL:
42          INC  DX                 ; move to next column (and/or row)
B4 02       MOV  AH, 2              ; set cursor position function 
CD 10       INT  10H                ; call PC BIOS, set cursor position
EB E2       JMP  LOOP_COLOR         ; loop to next color byte 
        EXIT:
C3          RET                     ; return to DOS
CTBL    DB  0CH, 0EH, 1DH, 0EH, 0AH, 1BH, 0DH, 0BH, 91H ; color table

Ini menggunakan INT 10Hlayanan video IBM PC BIOS untuk menulis kotak warna ke layar. Sayangnya satu-satunya cara untuk menulis atribut warna tertentu memerlukan juga menulis kode untuk menempatkan kursor di lokasi yang benar berikutnya, jadi ada banyak kode tambahan untuk itu.

Inilah output yang berjalan pada IBM PC CGA (dalam mode teks 40x25 untuk membuatnya lebih besar).

enter image description here

Unduh dan uji RGBGRID.COM untuk DOS.

640KB
sumber
1
Akankah ini bekerja dalam dos, prib tidak tetapi akan keren jika itu terjadi.
kerajinan Marshal
@ marshalcraft Ya, sebenarnya ini hanya akan bekerja di DOS, atau menggunakan emulator DOS seperti DOSBox, pcjs.org, dll. Saya telah menambahkan tautan untuk mengunduh yang dapat dieksekusi sehingga Anda dapat mencobanya.
640KB
Windows hadir dengan emulator dos terbatas, mungkin sekarang disebut command prompt, yang mungkin seharusnya saya katakan, akan lebih keren jika bekerja dengan cmd atau PowerShell haha.
kerajinan Marshal
1
@ marshalcraft Anda benar, namun karena ini untuk DOS, ini dapat dieksekusi 16-bit, dan jika Anda memiliki versi Windows 32-bit, ia seharusnya benar-benar berjalan karena memiliki lingkungan runtime 16-bit. Namun edisi Windows 64-bit tidak akan berjalan karena hanya memiliki runtime 32-bit.
640KB
1
Ya Tuhan, ini jawaban yang keren
Samy Bencherif
18

80386 kode mesin, IBM PC DOS, 38 byte

hex:

B0 13 CD 10 68 00 A0 1F 66 C7 06 00 00 28 2C 24
00 66 C7 06 40 01 2C 30 34 00 66 C7 06 80 02 24
34 20 00 CD 16 C3

ASM:

mov al,13h
int 10h ; initialize vga 13h mode (320x200x256 colors)
push 0a000h
pop ds ; push video buffer address to ds
mov dword ptr ds:0, 242c28h ; print 3 pixels
mov dword ptr ds:320, 34302ch ; print 3 pixels
mov dword ptr ds:640, 203424h ; print 3 pixels
int 16h ; wait for any keypress
ret ; exit to os

skala hasil dari dosbox:

enter image description here

Iłya Bursov
sumber
Catatan yang mov al, 13hsalah kecuali dijamin oleh DOSBox untuk memiliki ah = 0di titik masuk program.
Margaret Bloom
@MargaretBloom ax adalah 0 pada awal aplikasi com dalam ms dos
Iłya Bursov
Terima kasih Iłya, itu bagus untuk diketahui!
Margaret Bloom
18

Excel VBA (Jendela Segera), 80 byte

For i=1To 9:Cells(i Mod 3+1,(i+1)/3).Interior.ColorIndex=Mid(673486857,i,1):Next

Excel VBA (Fungsi), 96 byte

Sub g()
For i=1To 9
Cells(i Mod 3+1,(i+1)/3).Interior.ColorIndex=Mid(673486857,i,1)
Next
End Sub

Bukan alat yang mengerikan untuk pekerjaan itu ... Saya menghargai kenyataan bahwa Excel sudah menunjukkan kisi sehingga masalah pengaturan warna latar belakang.

Excel Colour Grid

Kredit ke @Neil untuk menyarankan saya menggunakan ColorIndexalih-alih Colormengarah ke penghematan 43 byte.

-21 bytes terima kasih kepada @Keeta

-16 byte terima kasih kepada @Chronocidal untuk menyarankan "Jendela Segera"

-2 byte terima kasih kepada @i_saw_drones

Banyak perubahan dari kiriman asli saya :)

dana
sumber
1
Anda mungkin bisa melakukannya dengan lebih baik ColorIndexkarena itu adalah angka dari 3 hingga 8 di sini, yang dapat Anda enkode dalam string atau sesuatu.
Neil
@ Neil - Memang :) Saya bisa mendapatkannya sedikit lebih pendek menggunakan itu. Terima kasih atas tipnya.
dana
Saya tidak melihat apa pun yang menghentikan Anda mengubah ini menjadi Sub F () dan Sub Akhir untuk penghematan lebih banyak.
Keeta
1
Jangan membuatnya menjadi fungsi, dan jalankan ini di Jendela Segera untuk menjatuhkan 21 byte:for i=1 To 3:for j=1 To 3:Cells(i,j).Interior.ColorIndex=Mid("367408005",i*j,1):next j,i
Chronocidal
1
Anda juga dapat menghapus tanda kutip dari string, VBA akan memaksa nomor tersebut menjadi string secara otomatis.
i_saw_drones
16

GFA Basic 2.02 (Atari ST), 48 byte

Daftar yang diedit secara manual dalam format .LST. Termasuk banyak karakter yang tidak dapat dicetak, yang kodenya ditampilkan di dalam tanda kurung.

?"[ESC]c[SOH] [ESC]c[ETX] [ESC]c[ENQ] "[CR]
?"[ESC]c[ETX] [ESC]c[STX] [ESC]c[ACK] "[CR]
?"[ESC]c[ENQ] [ESC]c[ACK] [ESC]c[EOT] "[CR]

Sistem operasi Atari ST mendefinisikan perintah VT52 yang diperluas yang digunakan di sini.

Keluaran

Outputnya adalah blok 24×24 piksel (9 karakter spasi 8×8 piksel).

output

tangkapan layar dari Steem SSE

Arnauld
sumber
1 untuk membuat saya semua nostalgia untuk ST tua saya yang dapat dipercaya.
Wossname
16

SVG, 210 182 byte

<svg><path d="h3v3h-3" fill=#f0f/><path d="h2v2h-2" fill=#ff0/><path d="m1 1h2v2h-2" fill=#0ff/><line x2=1 stroke=red/><path d="m1 1h1v1h-1" fill=#0f0/><path d="m2 2h1v1" fill=#00f/>

Karena ukuran atau bentuk blok warna tidak masalah, beberapa byte dapat di-golf dengan tata letak yang sedikit aneh ini:

svg layout

Hohmannfan
sumber
Saya sangat menyukai kecerdikan solusi ini.
AJFaraday
16

HTML + CSS, 121 120 byte

Sepotong HTML terburuk yang pernah saya tulis. Satu byte simpan berkat @Gust van de Wal

b{color:#ff0}a{color:cyan}i{color:lime}u{color:blue
<pre><body bgcolor=#f0f text=red><b>█
█<i><a>█
 █<u>

HTML + CSS, 114 byte (semi valid)

Saya menempatkan ini sebagai semi-valid karena biru tidak persis biru # 0000FF dan juga mengandalkan tidak mengklik tautan.

Terima kasih kepada @Lynn untuk idenya

b{color:#ff0}i{color:lime}c{color:cyan
<pre><body bgcolor=#f0f text=red><b>█
█<i><c>█
 █<a href=x>

IQuick 143
sumber
3
Anda dapat menghilangkan braket penutupan terakhir di CSS. Juga, pekerjaan luar biasa (dan memuakkan)!
Gust van de Wal
3
Anda dapat mengubah nama tag untuk menghindari CSS standar format, misalnya <w>, <x>, <y>, dan <z>.
darrylyeo
1
<a href=x>█akan berwarna biru secara default, menghemat beberapa byte dari CSS :)
Lynn
15

ditaa , 118 byte

/----+----+----\
|cF00|cFF0|cF0F|
+----+----+----+
|cFF0|c0F0|c0FF|
+----+----+----+
|cF0F|c0FF|c00F|
\----+----+----/

Ini adalah opsi keluaran menggunakan -E:

enter image description here

adl
sumber
13

R, 89 50 48 byte

Versi terbaru:

image(matrix(c(6,4,5,2:4,1,2),3),col=rainbow(6))

Tidak cukup elemen dalam vektor untuk mengisi matriks 3x3, sehingga membungkus dan menggunakan kembali elemen pertama.

Versi lama:

image(matrix(c(6,4,5,2:4,1,2,6),3),col=rainbow(6))

image(matrix(c(3,5,6,2,4,5,1:3),3),col=c('red','yellow','magenta','green','cyan','blue'))

enter image description here

anjama
sumber
3
Selamat datang di PPCG!
Perwujudan Ketidaktahuan
1
wow itu Rainbow Six !
Yong Quan
@alephalpha Yikes, aku tidak percaya aku melewatkan itu. Saya pergi ke depan dan memperbaiki versi tertua dan jumlah karakter
anjama
12

Excel-VBA, 89 73 72 70 byte

Sunting: Anda dapat menggunakan jendela langsung dan membuang Sub/ End Subuntuk menyimpan 16 byte:

For i=1To 9:[A:C].Cells(i).Interior.ColorIndex=Mid(367648785,i,1):Next

Jawaban asli:

Sub a()
For i=1To 9
[A1:C3].Cells(i).Interior.ColorIndex=Mid(367648785,i,1)
Next
End Sub

Ini diilhami oleh saran Neil tentang jawaban ini , dan ini adalah pengiriman pertama saya!

Hasil:

Result Grid

-2 byte : Penghapusan nomor baris sel - terima kasih kepada Taylor Scott !

i_saw_drones
sumber
3
Selamat datang di PPCG!
Johan du Toit
1
Terima kasih! Semoga saya akan belajar beberapa trik dari para master :)
i_saw_drones
For i=1To 9:[A:C].Cells(i).Interior.ColorIndex=Mid(367648785,i,1):Nextuntuk 70
Taylor Scott
11

Perl 6 (dan mungkin serupa untuk banyak bahasa) (31 byte)

{'ÿ   ÿÿÿ ÿ ÿÿ  ÿ ÿÿÿ ÿ ÿÿ  ÿ'}   # replace spaces with ASCII 00
                                  # which I can't seem to enter

Ini menghasilkan file TIFF tanpa kepala, yang digunakan untuk dihasilkan oleh Photoshop dengan ekstensi file .raw dan dianggap persegi kecuali ditentukan lain pada saat pembukaan. Bermain-main dengan kedalaman warna (jika diizinkan) dapat mengurangi ini lebih jauh.

pengguna0721090601
sumber
11

ffplay (ffmpeg), 93 byte

ffplay -f rawvideo -s 3x3 -pix_fmt rgb24 "data:/;base64,/wAA//8A/wD///8AAP8AAP///wD/AP//AAD/"

Lama :

ffplay -f lavfi -i testsrc=s=3x3,geq=r=255*not(X*Y):g=255*not((X-1)*(Y-1)):b=255*not((X-2)*(Y-2))
Gyan
sumber
10

TEX(MathJax), 122bytes

Golf'd:

$\def\c#1{\color{#1}{\rule{5em}{5em}}}\c{red}\c{yellow}\c{fuchsia}\\\c{yellow}\c{lime}\c{aqua}\\\c{fuchsia}\c{aqua}\c{blue}$

Ungolf'd:

$$
\def\coloredBox#1{\color{#1}{\rule{5em}{5em}}}
\coloredBox{red}
\coloredBox{yellow}
\coloredBox{fuchsia} \\
\coloredBox{yellow}
\coloredBox{lime}
\coloredBox{aqua}    \\
\coloredBox{fuchsia}
\coloredBox{aqua}
\coloredBox{blue}
$$

Edits:

  1. Thanks to @flawr for pointing out how to fix the colors!

  2. Could shave off 14bytes by replacing \rule{5em}{5em} with , which'd look like

    , but just doesn't look quite the same.

  3. Could probably shave off a few more bytes by finding color names that acceptably resemble the intended colors.

  4. Just to show what a decently TEX'd version of this would look like:

    RedGreenBlueRedGreenBlue.

Nat
sumber
1
I think your colors are not correct. But apart from that I'd upvote your post if only for the title:)
flawr
@flawr Yeah, they look different than the ones in the question statement, but I figured that if that's how TEX renders those colors by the names given in the question statement, hopefully it'll be close enough. =P
Nat
1
It seems mathjax uses the css color names. So you could replace purple with fuchsia and teal with aqua and green with lime then things would be correct I think.
flawr
Just to note it: The above could be golf'd a bit more by removing some {}'s. But that'd violate too many clean coding principles for my sanity. =P
Nat
5
Just note that the PPCG community was never famous for its sanity. If anything probably for the lack thereof.
flawr
10

Lua + LÖVE/Love2D, 186 183 bytes

t={[0>1]=0,[0<1]=1}l=love g=l.graphics function l.draw()for i=1,3 do for j=1,3 do g.setColor(t[i<2 or j<2],t[i==2 or j==2],t[i>2 or j>2])g.rectangle('fill',j*10,i*10,10,10)end end end

Try it online!

enter image description here

My first code golf entry!

Sheepolution
sumber
1
Welcome to Code Golf! Nice work!
AJFaraday
1
I think you could use expressions in your truth table: t={[0>1]=0,[0<1]=1}.
manatwork
1
@manatwork Smart!
Sheepolution
another löver, nice to see you here
Lycea
10

MATL, 44 23 21 20 19 bytes

A direct port of my Octave answer with the suggestions from @ExpiredData and @LuisMendo.

126973007Bo7B3*e0YG

try it online

flawr
sumber
9

Octave/MATLAB, 57 56 40 bytes

-17 byte thanks to @ExpiredData! Check out their even golfier solution!

image(reshape(de2bi(126973007),[3,3,3]))

Try it online!

flawr
sumber
1
Does just image work instead of imshow? Don't have a Matlab license any more and I'm on phone so can't test it
Expired Data
2
@ExpiredData Thanks a lot, that works indeed!
flawr
2
You can probably do this too Try it online!
Expired Data
1
@ExpiredData ---Very nice trick, thanks a lot! :)--- why don't you post this as an own answer?
flawr
3
Ok I will do that
Expired Data
9

Factorio Blueprint String, 705 bytes

I admit, I'm just pushing the limits of what counts as a solution.

0eNrdWNGOqyAQ/ReedeNo0daH/ZHNTYOW7ZJFNAi91zT99wua7ZpdaaT1pb40oQ6HOecwA3pGBde0kUwolJ8RK2vRovztjFp2FITb/1TXUJQjpmiFAiRIZUdtzYkMGyIoR5cAMXGg/1AOlz8BokIxxegA0w+6vdBVQaUJuAKQstSV5kTV0qA2dWvm1MKuZ3FecIA6lIf4BV8uwS+YeDKPXzBhPKAkUxjJPAy4AbG5QljZFBEqLOuqYGKa1Vc6YAQzE5Ss+b6gH+TETLQJeWdcUemQ/8Sk0oSPHOgjQkkPqMfT1kEYWzEsI2hpc2gtFtgfO2NkDTMjbIKnCOLv1SrCechJ1UzwSm7zKpksNVN78+xwnffOZKv2s2kS0akPJo4D10FslEd2UDVE9oLn6NU+1i01S/HaKqmkpvNl2DhkSGfJEK1Eha1DhWyWCmvZCzuHCtu7aj5asuQ7ynn99/GqT0f07BjAwXnnx3kohEW7XMPE5+OEs5+EUwdhiL4T0IVh3LNzHlMwfUoB+LTPeK19A2LPkoGbety1f46SUvH4BoLExTHxOCKe3mmIXTJ43ogGp5MlnS47soTR+GeryFyUscex+PzOu65IkPr0OrzW2wFkHn0Ar3c3eN6S4pt63NUH7GvtAn3AafTOo+yf3+jhbDcv9/1XgHz00SBAJ+NNn3uWRJDiDcDWXIf+Aya7oEk=

Produced output when placed in-game (low graphics settings used):

enter image description here

To prove that it is a valid solution you need to sample this grid of pixels which do match the specification exactly:

enter image description here

The rest of the image is classified as a border or a spacing which, as said in the question, doesn't matter.

IQuick 143
sumber
8

HTML/CSS, 278 141 137 bytes

r{color:red}y{color:#ff0}m{color:#f0f}g{color:#0f0}c{color:#0ff}l{color:#00f
<pre><r><y><m><y><g><c><m><c><l>

-137 bytes thanks to commenters, most notably @data
-4 bytes thanks to @Einacio

Uses Unicode (U+2588) for the "blocks", and uses CSS classes/inline style to color them.

I think the <font> tags could be golfed more, however changing them to a shorter tag such as <a> breaks the color attribute

Skidsdev
sumber
1
Leave out </td>, the browser is smart enough to automatically add this closing tag
Ferrybig
3
If using deprecated elements, you can also specify the background color of a cell using <td bgcolor=#f00>
Ferrybig
2
Maybe a noob question, but can't you avoid using the table and just print the █ and go to a new line with <br>?
frarugi87
1
@frarugi87 yes - 235 total: <span style="color:red">█<span class=a>█<span class=b>█<br><span class=a>█<span style="color:#0f0">█<span class=c>█<br><span class=b>█<span class=c>█<span style="color:#00f">█
ASCII-only
1
@ASCII-only b{color:#ff0}u{color:#f0f}i{color:#0ff} <pre><font color=red>█<b>█<u>█ <b>█<font color=lime>█<i>█ <u>█<i>█<font color=blue>█
data
7

JavaScript, 108 102 bytes

console.log(`%c█%c█%c█
`.repeat(3),...[...`320251014`].map(c=>`color:#`+`f0ff00f0`.substr(c,3)))

No snippet because this only works in a real browser console and not the snippet's console. Edit: Thanks to @AJFaraday for the screenshot. Explanation: Browsers allow the first parameter of console.log to include substitutions. The %c substitution takes a parameter and applies it as (sanitised) CSS. Each block is therefore coloured using the appropriate substring of f0ff00f0 interpreted as a three-hex-digit colour code.

Example of code execution

Neil
sumber
1
I don't get how this works?
marshal craft
1
@marshalcraft %c is used to create a format string, the arguments being CSS styles for the text after it
ASCII-only
1
So this is basically like dos versions but with chrome browser?
marshal craft
1
Just curious but how did you go about finding the shortest possible chain of fs/0s to use?
Marie
2
@Marie I started by noting that ff0ff contains all the mixed colours and 00f00 contains all the pure colours. If you concatenate them you get duplicate positions for ff0 and f00 so you can then remove the first and last characters. I then wrote a short script to check all 7-character strings to ensure that 8 was optimal.
Neil
7

HTML (GIF), 108 bytes

It's the battle of the web-based image formats! (Any TIF or JPG contenders out there?)

Answer by @A C.

<img src=data:image/gif;base64,R0lGODdhAwADAMIGAAAA//8AAP8A/wD/AAD/////AAAAAAAAACwAAAAAAwADAAADBhglNSQEJAA7>


HTML (BMP), 116 115 bytes

Answer by @ASCII-only.

<img src=data:image/bmp;base64,Qk0+AAAAQVNDTxoAAAAMAAAAAwADAAEAGAD/AP///wD/AAAAAAAA//8A/wD//wAAAAAAAP8A////AP8AAAA>


HTML (WebP), 116 bytes

Answer by @Hohmannfan.

<img src=data:image/webp;base64,UklGRjYAAABXRUJQVlA4TCoAAAAvAoAAAC8gEEjaH3qN+RcQFPk/2vwHH0QCg0I2kuDYvghLcAoX0f/4Hgc>


HTML (PNG), 151 136 135 bytes

-15 bytes thanks to @Hohmannfan.

<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAIAAADZSiLoAAAAFElEQVR4AWP4z8Dw/z8DEIIodB4A4D0O8pOGuTgAAAAASUVORK5CYII>


Also, see my CSS and SVG answers.

darrylyeo
sumber
3
Good idea but.. It seems to me that a 89 bytes file for a 9 pixel image is a bit too much. Maybe manually writing a BMP header can golf this down. If I'm not wrong, the bare minimum header is 26 bytes, plus 12 of actual data (3 rows of 4 pixels) can trim the image down to 38 bytes, which in base64 means 51 or 52 characters rather than 119
frarugi87
2
118: <img src="data:image/bmp;base64,Qk0+AAAAQVNDTxoAAAAMAAAAAwADAAEAGAD/AP///wD/AAAAAAAA//8A/wD//wAAAAAAAP8A////AP8AAAA=">. 14 byte file header, 12 byte application header, 9 of actual data per row (+3 to pad to multiple of 4), yeah
ASCII-only
2
I haven't counted, but I suspect that <img src="data:image/gif;base64,R0lGODdhAwADAMIGAAAA//8AAP8A/wD/AAD/////AAAAAAAAACwAAAAAAwADAAADBhglNSQEJAA7"> is shorter
A C
2
Here's a png file that's 15 bytes smaller when base64 encoded: iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAIAAADZSiLoAAAAFElEQVR4AWP4z8Dw/z8DEIIodB4A4D0O8pOGuTgAAAAASUVORK5CYII=
Hohmannfan
2
To continue the format battle, here's a lossless WebP solution. I can't cut it down anymore without violating the spec, so it narrowly beaten by BMP at 116 bytes. <img src=data:image/webp;base64,UklGRjYAAABXRUJQVlA4TCoAAAAvAoAAAC8gEEjaH3qN+RcQFPk/2vwHH0QCg0I2kuDYvghLcAoX0f/4Hgc>
Hohmannfan
6

dc (on xterm), 64 bytes

Fi16[AP]sF36dD6r31 101dD6rD1[1CP61P[38;5;]Pn[mX]Pz3%0=Fz0<M]dsMx

You'll just get a bunch of wacky escape codes instead of colors, but you can still try it online!

By my understanding, the 16 basic ANSI colors are free to be interpreted however the terminal wants. On the other hand, the 216 colors in the xterm color cube have explicit RGB values. I am using these codes and printing a grid of Xs:

buncha colorful 'x's

First we set the input radix to base 15 with Fi. This costs two bytes, but gives back three, so... a net gain of a byte (and a big ol' loss in readability). Next we're trying to get our color values onto the stack. In decimal, this would be 21 51 201 51 46 226 201 226 196, but we're in wacky mode so it's going to be 16 36 D6 36 31 101 D6 101 D1. We eliminate one of the spaces by slotting in a macro we need to define at some point, [AP]sF (which simply prints a line feed). We can shrink 36 D6 36 and 101 D6 101 by placing the first value on the stack, duplicating it, placing the second, and then swapping (36dD6r, 101dD6r).

Macro M handles the printing and whatnot. 1CP prints the escape character. Brackets are used to delimit strings, and as far as I know are not escapable, so we need to print the bracket with an ASCII value as well, 61P. [38;5;]P is the 'set foreground color from the numbered list' code. n prints the value from the top of the stack w/o a newline, popping it. [mX]P ends the code and prints an 'X'. z3%0=F checks the stack depth mod 3, running our line feed macro F when necessary. z0<M keeps M running as long as there's stuff on the stack. dsMx to run.

Note that if you run this in dc in an xterm, it'll leave your foreground color blue. 1CP61P74P (input shown in the screenshot) should reset this.

brhfl
sumber
6

Blockly turtle, 45 blocks

Try it online!

How about we play a little game of finding the most ridiculous tool for the job?

Output:

The glorious output of this glorious piece of crappy programming

The program (as a screenshot for additional heresy):

The program as a screenshot for additional heresy

Note: The grayed out blocks are also counted towards the metric.

IQuick 143
sumber
1
I’d love that to be a standard PCG challenge! Instead it happens organically on some code golf puzzles
AJFaraday
5

Node.js, 79 bytes

require('fs').writeFile(a='P',a+[...'3331100110101110010011101011001'].join` `)

Produces a file named "P" in the PPM format containing the color grid.

Mwr247
sumber
5

TI-Basic, x bytes (will score when I can)

Note: content filter is blocking me from looking up the token sizes for each of these commands. If anyone wants to score for me, go for it.

TextColor(11
Text(0,0,"0"
TextColor(19
Text(0,2,"0"
Text(2,0,"0"
TextColor(13
Text(4,0,"0"
Text(0,4,"0"
TextColor(14
Text(2,2,"0"
TextColor(18
Text(2,4,"0"
Text(4,2,"0"
TextColor(17
Text(4,4,"0"

This look really bad on my little calculator screen. But hey, shape doesn't matter :^)

Golf output:

enter image description here

Modified for 8x larger output:

enter image description here



TI-BASIC, x bytes

Using Pxl-On instead of Text:

Pxl-On(0,0,11
Pxl-On(0,1,19
Pxl-On(0,2,13
Pxl-On(1,0,19
Pxl-On(1,1,14
Pxl-On(1,2,18
Pxl-On(2,0,13
Pxl-On(2,1,18
Pxl-On(2,2,17

Output:

enter image description here

Blown up ~11x:

enter image description here

Benjamin Urquhart
sumber
It's 180 characters, excluding line breaks. I'm not sure how/if line breaks are counted in code golf.
Nat
4
Yes, but TI-BASIC is a tokenized language - for example, the interpreter sees TextColor as 2 bytes, not 9 as you would expect @Nat
Benjamin Urquhart
4

C++, SFML, 177 bytes

#include<SFML/Graphics.hpp>
int d[]={255,65535,0xFF00FF,65535,65280,0xFFFF00,0xFF00FF,0xFFFF00,0xFF0000};void f(){sf::Image g;g.create(3,3,(sf::Uint8*)d);g.saveToFile("a.jpg");}

Uses sf::Image::create(int,int,unsigned char*) method to create an image with rgb values in it

HatsuPointerKun
sumber
You can shave off one byte by writing 0xFF0000 as 255<<16.
Broxzier
1
Taking it a bit further, you can save 13 bytes by defining the R/G/B colour values in variables before the array: int b=255<<16,g=65280,r=255,d[]={r,g|r,b|r,g|r,g,b|g,b|r,b|g,b};
Broxzier
4

C#, 248 204 198 bytes

class P{static void Main(){for(int i=0;i<12;i++){foreach(dynamic n in Enum.GetValues(typeof(ConsoleColor)))if((""+n)[0]=="RYMRYGCRMCBR"[i])Console.BackgroundColor=n;Console.Write(i%4<3?" ":"\n");}}}

Output:
enter image description here

Johan du Toit
sumber
4

BASIC C64, 106 bytes

0 POKE53281,0
1 DATA144,28,158,156,144,13,158,30,159,144,13,156,159,31,144
2 READA:PRINTCHR$(A)+"o";:GOTO2

enter image description here

Johan du Toit
sumber
3

Wolfram Language (Mathematica), 72 bytes

Grid@Partition[RGBColor/@Unitize[Total/@Tuples[IdentityMatrix@3,{2}]],3]

enter image description here

J42161217
sumber