Tampilkan Logo Peretas

56

Anda mungkin pernah mendengar tentang "Logo Peretas", juga disebut "Peretas Emblem". Ini terlihat seperti ini:

logo hacker

Ini adalah pola dari simulasi matematika yang disebut Game of Life. Glider adalah pola Hidup paling sederhana yang bergerak, dan yang paling mudah dikenali dari semua pola Kehidupan.

Tantangan

Tantangannya cukup sederhana: Menampilkan logo peretas. Ini didefinisikan sebagai:

  • Kisi 3x3 dengan batas, latar belakang putih, dan kisi abu-abu.
  • Lima titik hitam diatur dalam pola glider GoL.
  • Tidak ada lagi.

Aturan

  • Titik hitam harus mengisi 40% - 80% dari masing-masing kotak-kotak.
  • Anda akan menampilkan lambang dengan output grafis tetapi tanpa seni ASCII .
  • Output harus minimal 30x30 piksel .
  • Output hanya harus memiliki warna abu-abu, hitam dan putih .
  • Setiap kotak-kotak dalam kotak akan memiliki ukuran yang sama. Kotak akan menjadi persegi 3x3 reguler .
  • Anda tidak boleh menarik logo dari internet atau sistem file Anda.
  • Program Anda akan menampilkan logo di layar / jendela kosong. Jika itu berakhir, ia harus melakukannya secara normal.
  • Perhatikan bahwa "titik" tidak selalu berarti "lingkaran". "Titik" adalah bentuk geometris tunggal yang berpusat di tengah kotak-kotak dengan satu permukaan. Misalnya, sementara lingkaran atau persegi akan memenuhi syarat sebagai titik, dua segitiga atau kotak-kotak tidak akan.

Pemenang

Karena ini adalah , jawaban terpendek di setiap bahasa menang!

Harap sertakan tangkapan layar dari output program Anda dalam jawaban Anda.

MD XF
sumber
21
Saya tidak tahu ini disebut Logo Peretas. Saya telah menggunakannya sebagai avatar saya di beberapa situs, tebak itu membuat saya seorang Hacker.
Mark Thomas
15
@ MarkThomas itu atau GoL nerd xD
Stephen
3
@DavidConrad "hapus layar" berarti jika Anda menggunakan IDE / antarmuka yang memiliki grafis bawaan, Anda tidak dapat menampilkannya dengan teks yang ada di layar. Ya, Anda bisa menampilkannya di jendela.
MD XF
3
Apakah beberapa warna abu-abu (dan warna tidak terkait) diperbolehkan karena anti-aliasing?
Ian Miller
3
Apakah kita harus menampilkan output atau dapatkah kita mengembalikannya atau menyimpan ke file?
TheLethalCoder

Jawaban:

27

Mathematica, 62 byte

Grid[{{,a=██,},{,,a},{a,a,a}},Frame->All,FrameStyle->Gray]

masukkan deskripsi gambar di sini

Mathematica, 71 byte

Grid[{{,l=Graphics@Disk[],},{,,l},{l,l,l}},Frame->All,FrameStyle->Gray]


masukkan deskripsi gambar di sini

J42161217
sumber
2
Saya pikir Anda dapat menyimpan byte dengan menggunakan fungsi murni Graphics@Disk[]sebagai argumen.
CalculatorFeline
Jika Anda maksud Grid ini [{{, #,}, {,, #}, {#, #, #}}, Frame-> All, FrameStyle-> Grey] & @ Graphics @ Disk [] itu adalah 72 byte
J42161217
3
Varian 69 byte pada ini: Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]. ● adalah karakter unicode dua byte. Karena tidak harus benar-benar menjadi lingkaran, mungkin beberapa karakter ASCII dapat bekerja untuk memenuhi persyaratan 40% -80%.
Ian Miller
sebenarnya saya berhasil mencapai 62 byte yang memenuhi semua persyaratan
J42161217
Saya pikir Anda perlu Rasterizeatau serupa untuk memenuhi persyaratan graphical output but no ASCII artsebagai simbol masih dapat dipilih dalam kotak sebagai karakter Unicode.
Ian Miller
33

CSS + HTML, 56 + 84 = 140 byte 52 + 84 = 136 byte

Disimpan 4 byte dengan memasukkan saran dari komentar.

td{border:1px solid#888;line-height:.4;font-size:3em
<table cellspacing=0><tr><td><td><td><tr><td><td><td><tr><td><td><td>

Ini menggunakan karakter UTF-8 yang panjangnya 2 byte dan memanfaatkan keanggunan sintaks HTML.

Gurita
sumber
3
Tidak buruk; itu cukup pintar menggunakan !
MD XF
3
Sangat keren. Saya pikir Anda dapat menyimpan byte dengan line-height:.4;, dan yang lain dengan menghilangkan penutupan}
ETHproduksi
5
Tidak menggunakan • dihitung sebagai seni ASCII, yang bertentangan dengan aturan tantangan?
Hankrecords
2
@StephenS Kedengarannya seperti perbedaan yang sangat sia-sia, ditambah lagi saya tidak melihat arti melarang seni ASCII tetapi memungkinkan seni unicode. Adapun OP mengatakan itu pintar, komentar saya sebenarnya diarahkan ke OP, saya lupa memasukkan @.
Hankrecords
4
Satu-satunya jawaban Code Golf yang pernah saya mengerti, setidaknya saya percaya begitu.
Uwe Keim
25

GLSL (fragmen shader), 278 235 256 byte

precision highp float;void main(){vec2 a=gl_FragCoord.xy/20.-.2;ivec2 b=ivec2(a);a-=vec2(b)+.5;if(b.x>2||b.y>2)discard;gl_FragColor=a.x<-.5||a.y<-.5||a.x>.3||a.y>.3?vec4(.5,.5,.5,1.):length(a+.1)<.4&&(b.x+b.y-3)*b.y==0?vec4(0.,0.,0.,1.):vec4(1.,1.,1.,1.);}

masukkan deskripsi gambar di sini

Lihat dalam aksi: http://glslsandbox.com/e#40717.2

Frxstrem
sumber
1
Hmm ... apakah batasnya benar-benar grafik? Juga, apakah Anda yakin lingkaran hanya 80% dari kotak-kotak?
MD XF
12
Lingkaran yang menyentuh keempat sisi bujur sangkar mengisi proporsi π / 4 dari bujur sangkar, atau sekitar 78,5%.
Greg Martin
Saya mengurangi ukuran kode Anda menjadi 222 byte:precision highp float;void main(){vec2 a=gl_FragCoord.xy/20.-.2;ivec2 b=ivec2(a);a-=vec2(b)+.5;gl_FragColor=vec4(vec3(a.x<-.5||a.y<-.5||a.x>.3||a.y>.3?.5:length(a+.1)<.4&&(b.x+b.y-3)*b.y==0?.0:1.)*float(b.x<3&&b.y<3),1.);}
Gábor Fekete
21

Python 2 ,  169  140 byte

from turtle import*
up()
shape("square")
color("gray",[1]*3)
i=9
while i:
 i-=1;goto(20-i/3*20,20-i%3*20);stamp()
 if 302&2**i:dot(15,0,0,0)

Ukuran sebenarnya, 61 x 61, diplot dalam kanvas yang jauh lebih besar dari 300 x 400:

ukuran sebenarnya

Menampilkan kotak piksel:

versi grid piksel

Titik-titik menggunakan 177 piksel dalam kisaran 40% -80% apakah mempertimbangkan 19 dengan 19 isian putih (144,4-288,8) atau 21 dengan 21 termasuk kedua perbatasan (176,4-352,8).

Catatan: program mengakhiri dan menutup jendela kanvas segera setelah gambar selesai, untuk memungkinkan penutupan jendela manual menambahkan baris done().

turtleadalah paket Python yang dikembangkan untuk pemrograman grafis pengantar. Pena dimulai di x,y=0,0tengah kanvas berukuran 300 x 400 piksel (secara default), upmengangkat pena, gotomenggerakkan pena, shapemengatur bentuk pena ke bentuk "square"yang ditentukan ( adalah bentuk yang telah ditentukan sebelumnya dengan lebar piksel standar 21) ), colormengatur warna, di mana dua parameter mengatur stroke (dengan default lebar 1) dan mengisi; satu byte disimpan dengan menggunakan (r,g,b)opsi tuple untuk menggantikan "white"dengan [1,1,1]menggunakan daftar perkalian [1]*3. Akhirnya dotmenggambar sebuah titik dengan lebar yang diberikan dalam piksel dan warna. Nilai lebar default dot terlalu kecil untuk memenuhi syarat, seperti yang 9saya buat menjadi estetika dan kualifikasi 15. Warna titik bisa jadi"black"tetapi (r,g,b)tuple yang dibongkar 0,0,0lebih pendek dua byte.

Pena harus bergerak menjauh dari titik mana pun di ujung karena jika tidak, pena abu-abu menyembunyikan titik.

Grid dilalui menggunakan div ( /) dan mod ( %) dari imulai 8( idiinisialisasi ke 9tetapi dikurangi pada awal whileloop) dan bekerja ke 0, mengimbangi hasil 2,1,0untuk -1,0,1menggunakan (1-...)dan scaling masing-masing hingga ukuran grid menggunakan faktor 20 (perhatikan bahwa 20-i/3*20sebenarnya byte kurang dari 20*(1-i/3), sama berlaku untuk %). Ini menghasilkan urutan [kiri-bawah, tengah-kiri, atas-kiri, bawah-tengah, tengah-tengah, atas-tengah, kanan-bawah, kanan-tengah, kanan-atas], dan memerlukan hasDotevaluasi " " dari [1,0,0,1,0,1,1,1,0], yang 302begitu biner dapat diakses dengan memeriksa ith kekuatan dua komponen302dengan menggunakan bitwise-and 302&2**i,.

Jonathan Allan
sumber
Sangat baik pendekatan dan jauh lebih pendek daripada yang saya pikir akan mungkin menggunakan turtle.
Mast
14

Applesoft BASIC , 479 476 516 515 483 482 byte

-32 dengan menggunakan nama variabel yang tidak dapat dibaca: P
-1 karena Apple memutuskan untuk menjadi ajaib dan biarkan saya menggunakan GOTO implisit / tidak ada

Berikut ini adalah program saya sendiri (sangat beatable) untuk contoh dari output yang tidak menggunakan lingkaran:

1GR:POKE49234,0:COLOR=15:FORI=0TO39:VLIN0,47ATI:NEXT:COLOR=5:S=21:W=S:H=27:X=INT((40-W)/2):Y=INT((48-H)/2):D=INT(W/3):DX=D:C=Y+H:G=X+W:FORI=0TO3:VLINY,C ATX+I*D:NEXT:D=INT(H/3):FORI=0TO3:HLINX,G ATY+I*D:NEXT:YH=INT(D/2):Z=Y+H-YH:XH=INT(DX/2):COLOR=0:FORI=0TO2:B=Z:A=X+XH+I*DX:GOSUB5:NEXT:B=B-D:GOSUB5:B=B-D:A=A-DX:GOSUB5:K=PEEK(-16384):IFK<128THEN2:K=PEEK(-16368):TEXT:HOME:END 
5VLINB+2,B-3ATA:VLINB+2,B-3ATA-1:VLINB+2,B-3ATA+1:VLINB+2,B-3ATA+2:VLINB,B-1ATA-1:VLINB,B-1ATA+2:RETURN

Keluaran:

MD XF
sumber
1
Saya tidak yakin apakah ini valid, karena baris 1, lebih panjang dari 239 karakter, tidak mungkin dimasukkan dengan metode normal, setidaknya pada // e.
insert_name_here
1
@insert_name_here Anda harus menyimpannya ke file di disk.
MD XF
14

Kode mesin IA-32, 81 80 byte

Hexdump:

60 8b f9 b8 50 35 20 20 ab b8 32 35 36 20 ab ab
ab fe 4f fe 33 c9 66 49 51 8a c1 d4 55 50 8a c5
d4 55 5b b2 80 84 c0 74 1f 84 db 74 1b b2 ff 2c
10 3c 35 77 13 93 2c 10 3c 35 77 0c 8d 0c 58 8a
cd b0 e4 d2 e0 79 01 42 92 aa 59 e2 cb aa 61 c3

Ini adalah fastcallfungsi yang disebut doityang mengembalikan gambar dalam format PGM dalam buffer yang disediakan. Pemakaian:

char buf[256 * 256 + 256];
doit(buf);

FILE* f = fopen("k.pgm", "wb");
fwrite(buf, 1, sizeof buf, f);
fclose(f);

Keluaran:

logo peretas

Saya menggunakan 256x256 resolusi karena itu dingin itu mari saya membagi indeks pixel dalam ecxsecara otomatis ke koordinat ydi chdan xdi cl. Juga, format file PGM membutuhkan angka 255 di header gambar.

Kotak bagian dalam adalah 54x54 (41% dari sel berdasarkan area).

Kode sumber (dapat dikompilasi oleh Visual Studio):

    pushad;                 // save all registers
    mov edi, ecx;           // edi is now the pointer to output
    mov eax, '  5P';        // PGM file header
    stosd;                  // store it
    mov eax, ' 652';        // the number 256 and a space
    stosd;                  // store the width
    stosd;                  // store the height
    stosd;                  // store maximum brightness
    dec byte ptr [edi-2];   // fix maximum brightness to 255

    xor ecx, ecx;           // initialize the counter of pixels
    dec cx;                 // to 65535
myloop:
    push ecx;

    mov al, cl;             // al = cl = x coordinate in the image
    _emit 0xd4;             // divide by 85
    _emit 85;               // ah = x cell number, al = x coordinate in cell
    push eax;
    mov al, ch;             // al = ch = y coordinate in the image
    _emit 0xd4;             // divide by 85
    _emit 85;               // ah = y cell number, al = y coordinate in cell
    pop ebx;                // bh = x cell number, bl = x coordinate in cell

    mov dl, 0x80;           // gray pixel value
    test al, al             // is cell boundary (y)?
    je output1;
    test bl, bl;            // is cell boundary (x)?
    je output1;

    mov dl, 255;            // white pixel value
    sub al, 16;
    cmp al, 53;
    ja output1;             // if outside the inner square, output white
    xchg eax, ebx;          // exchange the registers to shorten following code
    sub al, 16;
    cmp al, 53;
    ja output1;             // if outside the inner square, output white

    lea ecx, [ebx * 2 + eax]; // cell index = y * 2 + x
    mov cl, ch;
    mov al, 0xe4;           // load the bitmap for the glider pattern
    shl al, cl;             // shift the needed but into SF
    jns output1;            // the bit was 0? - output white
    inc edx;                // the bit was 1? - change to black

output1:
    xchg eax, edx;
    stosb;                  // output the byte

    pop ecx;
    loop myloop;
    stosb;                  // output an additional gray pixel
    popad;
    ret;

Pola sel

0 1 0
0 0 1
1 1 1

dapat diwakili oleh bitmap "dioptimalkan" dari 7 bit.

Bit diindeks oleh ekspresi y * 2 + x, di mana (x,y)lokasi sel. Ekspresi ini memberikan indeks yang sama ke 2 pasang sel. Ini kebetulan kebetulan bahwa nilai bit di sana sama.

anatolyg
sumber
1
Ini keren, tapi saya 42*42/85/85hanya menghasilkan 24,4%.
Jonathan Allan
@ JonathanAllan: Bagian putih sel hanya 84x84, tapi ya, kotak 42x42 hanya seperempat dari kotak 84x84.
Nick Matteo
Saya sudah meminta klarifikasi (jika memang masuk ke area saya harap tidak terlalu sulit untuk memperbarui).
Jonathan Allan
Peraturannya ada di - daerahnya ...
Jonathan Allan
Saya memperbesar titik-titik hitam dari 42 menjadi 54. Ini minimum, menjadikannya 40% berdasarkan wilayah, dan mereka sudah mulai jelek ...
anatolyg
14

HTML & CSS, 155 byte

Ternyata HTML benar - benar memaafkan tentang kesalahan sintaksis.

1 byte disimpan berkat @Octopus · 1 byte disimpan berkat @Downgoat · 2 byte disimpan berkat @StephenS

2 byte disimpan berkat @Ryan · 3 byte disimpan berkat @styfle · 4 byte disimpan berkat @Ferrybig

13 byte disimpan berkat @SteveBennett

p{height:33px;width:33px;border-radius:50%;background:#000;margin:0
<table cellspacing=0 border=1><td><td><p><td><tr><td><td><td><p><tr><td><p><td><p><td><p

Uriel
sumber
2
Harap tunjukkan di browser mana (dan versi mana) yang berfungsi - tidak berfungsi di Opera 45.
Paŭlo Ebermann
2
Cuplikan tidak berfungsi untuk saya menggunakan Chrome 58.0.3029.110 (64-bit) pada Windows. Versi Chrome apa yang berfungsi?
Jonathan Allan
Ini tidak menampilkan lingkaran dengan Safari 10.1 di macOS Sierra (10.12.4).
R. Kap
titik-titik tidak ditampilkan dengan Chromium 55.0.2883.87 (64-bit).
Dylan Meeus
Tidak dapat melihat titik-titik di Chrome untuk Android (58.0.3029.83)
Spikatrix
11

R ( 130 119 113 byte)

plot(c(2,4,6,4,6),c(2,2,2,6,4),an=F,ax=F,xli=(l=c(1,7)),yli=l,xaxs="i",yaxs="i",pch=16,cex=19);grid(3,lt=1);box()

masukkan deskripsi gambar di sini

mschilli
sumber
Anda bisa menggunakan axes=Funtuk mengganti xaxt="n",yaxt="n". Jika Anda menggandakan semua nilai koordinat, Anda menghemat 4 byte net (tetapi tidak bisa menggunakan 1:3,2:3trik).
user2390246
@ user2390246: thx untuk saran. Saya tidak menemukan banyak waktu untuk bermain golf ini. Saya yakin ada peningkatan yang lebih mungkin. Saya harus menambahkan;box() sebagai axes=Fjuga menghilangkan frame. Juga, sebagai axesadalah plotparameter dan tidak diteruskan ke parmelalui ...sebagai xaxt/ yaxt, bahkan tidak perlu dibilang sepenuhnya.
mschilli
1
Anda dapat memotong 7 byte dengan (1) mengganti c(1,7)dengan variabel ( l=c(1,7)); (2) mengganti anndengan an; (3) mengganti[xy]li dengan [xy]li; dan (4) menghapus kedua, argumen berlebihan untuk grid: grid(3,lt=1). Bahkan, saya telah mengambil kebebasan mengedit ini dalam (sedang ditinjau).
Konrad Rudolph
1
@KonradRudolph Sepertinya relevan: codegolf.meta.stackexchange.com/questions/1615/…
Matt
@ Mat Hm. Tampaknya ini masuk akal jika menerapkan optimisasi yang berbeda secara mendasar, daripada hanya menerapkan peningkatan langsung. Cukup adil.
Konrad Rudolph
9

Python 2.7, 214 311 309 byte

from matplotlib.pyplot import*
f,x=subplots()
j=(0,0),(1,0),(2,0),(1,2),(2,1)
for i in j:x.add_artist(Circle((i),.4,color='k'))     
x.tick_params(labelbottom='off',labelleft='off')
for o in x.spines.values():o.set_edgecolor('gray')
for s in 'xy':exec"x.set_"+s+"ticks((.5,1.5,2.5));"+s+"lim(-.5,2.5);"
grid()

Ini adalah upaya pertama saya di sini di kode golf, jadi saya yakin ini bisa diperbaiki. Saya ingin tidak menetapkan batasan, tetapi tampaknya matplotlib tidak dapat mendeteksi bahwa saya merencanakan lingkaran di mana saya melakukannya. Tanpa pengaturan xlim () dan ylim () hanya menampilkan dua lingkaran bawah.

Keluaran:

Sunting

Sunting: Memperbaiki warna perbatasan dan menghapus angka centang. Saya harus mengatakan matplotlib sangat padat, dan tidak terlalu ramah dengan mengubah warna sumbu.

Dicukur 3 byte berkat @DJMcMayhem

Sunting: Lepaskan dua byte dengan mengatur kutu saya sebagai tuple di dalam fungsi set_ticks.

Joe Habel
sumber
Maaf, angka-angka pada grafik tidak diperbolehkan. Juga, apakah perbatasannya berwarna abu-abu?
MD XF
3
Selamat datang di situs ini! Ini jawaban pertama yang bagus. :)
DJMcMayhem
1
Beberapa golf minor yang saya lihat: 1) Anda dapat bergabung dengan baris 5 dan 6 untuk menghapus satu spasi dan baris baru (-2 byte) 2) jika urutan set xy_ticks dan xy_lim tidak masalah, Anda dapat melakukan sesuatu seperti for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);". (Saya belum mengujinya, jadi saya tidak positif)
DJMcMayhem
8

Bash + ImageMagick, 233 226 karakter

convert xc: +antialias -resize 31 -draw "stroke gray fill none ${r=rectangle} 0,0 10,30$r 20,0 30,30$r 0,0 30,10$r 0,20 30,30stroke #000 fill #000 ${c=circle} 15,5 15,8$c 25,15 25,18$c 5,25 5,28$c 15,25 15,28$c 25,25 25,28" x:

Output sampel:

Glider digambar dengan Bash dan ImageMagick

Bash + ImageMagick, 215 karakter

convert xc: -resize 31 -draw "stroke gray fill none ${r=rectangle} 0,0 10,30$r 20,0 30,30$r 0,0 30,10$r 0,20 30,30stroke #000 fill #000 ${c=circle} 15,5 15,8$c 25,15 25,18$c 5,25 5,28$c 15,25 15,28$c 25,25 25,28" x:

Pemilik pertanyaan belum menjawab pertanyaan anti-aliasing dan beberapa solusi lain juga memiliki nuansa abu-abu tambahan yang ditambahkan oleh anti-aliasing, jadi untuk saat ini yang lebih pendek ini terlihat juga dapat diterima.

Output sampel:

Glider digambar dengan Bash dan ImageMagick - dengan anti-aliasing

manatwork
sumber
8

Ruby, 144 166 164 148 144 bytes

require'ruby2d'
set background:'grey'
c=482;g=2,13,24;d=0
g.map{|y|g.map{|x|Square.new(x,y,9);Square.new(x+2,y+2,5,"black")if c[d]>0;d+=1}}
show

Keluaran:

keluaran

Sunting: Sekarang memiliki gridlines abu-abu.

Mark Thomas
sumber
3
Saya bisa melihat beberapa peluang bermain golf di sini. Sebagai permulaan, d=d+1memiliki bentuk yang lebih pendek ( d+=1) dan di ==1sini setara dengan >0. Juga pertimbangkan apa yang terjadi ketika Anda menetapkan c ke Fixnum bukan array :-)
RJHunter
1
@RJHunter Saya merindukan beberapa buah yang menggantung rendah! Dan saya memikirkan hal-hal seperti membuat bitfield dengan c, tetapi tidak bisa menemukan cara yang sebenarnya lebih pendek dalam implementasinya.
Mark Thomas
2
Mungkin secara mengejutkan, Ruby sebenarnya memiliki beberapa dukungan bitfield di dalamnya! Anda dapat mengakses integer dengan []seolah-olah array array (read-only, tapi tidak apa-apa di sini).
RJHunter
@RJHunter terima kasih! Yang harus saya lakukan adalah mengubah c ke nomor yang sesuai. Mengurangi sedikit.
Mark Thomas
Anda dapat mengubah g=[2,13,24]ke g=2,13,24dan mengganti eachdengan map.
Jordan
8

PNG, 105 100 byte

Gambar PNG    (yaitu file gambar ini)

Mempertimbangkan bahwa HTML dan bahasa non-pemrograman lainnya diperbolehkan , saya ingin tahu seberapa besar saya bisa bermain golf gambar yang dapat ditampilkan di browser, untuk dijadikan sebagai perbandingan dasar. Hasilnya dikompresi dengan alat open-source optipng ( -o7 -zm1-9 -strip all) dan pngwolf . Saya juga bereksperimen dengan zopflipng , tetapi hasilnya lebih besar. Alat kompresi sumber tertutup lainnya mungkin dapat mengurangi beberapa byte lagi.

Data gambar di base64:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAA
fCAAAAAA6xUnlAAAAK0lEQVR42mM4gB8wHPgPAwf+M0DAf4TYqDwp
4Ydp0qg8ofBDqMXKGpXHDwDDq0qBspApTgAAAABJRU5ErkJggg==

Sunting Saya membuat titik-titik menyentuh bagian atas dan bawah sel, untuk menyebabkan lebih banyak pengulangan dalam pola piksel dan dengan demikian meningkatkan rasio kompresi. Tapi jangan khawatir, satu titik hanya mengisi (7 * 9) / (9 * 9) ≈ 78% dari selnya.


PNG non-standar, 88 byte

Seperti yang ditunjukkan oleh @anatolyg , ada beberapa potensi golf dengan menghapus bongkahan IEND (12 byte). Secara teknis, IEND diperlukan oleh standar . Namun, setiap potongan PNG menyertakan informasi ukuran dan checksum sendiri. Karena itu tidak mutlak perlu memiliki penanda akhir. Dan memang, semua browser yang saya uji dapat menampilkan gambar tanpa masalah.

Sayangnya (atau untungnya), gambar non-standar ini ditolak oleh imgur, jadi saya tidak bisa mengunggahnya. Ini adalah pengkodean base64:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAA
fCAAAAAA6xUnlAAAAK0lEQVR42mM4gB8wHPgPAwf+M0DAf4TYqDwp
4Ydp0qg8ofBDqMXKGpXHDwDDq0qBspApTg==

Meyer
sumber
Saya tidak yakin apakah ini valid. PNGbukan bahasa pemrograman.
DJMcMayhem
4
Terima kasih MD XF. @DJMcMayhem Tidak juga HTML. Namun mengingat ukuran gambar yang kecil, saya mengirimkannya sebagai entri luar kotak yang menarik.
Meyer
4
Juga, selamat datang di PPCG, @Meyer! :)
Martin Ender
1
Anda dapat menghapus beberapa byte di akhir file dan masih memiliki gambar. Mungkin tergantung pada pemirsa; Saya membayangkan sebagian besar pemirsa tidak memerlukan mis. Bagian akhir harus ada.
anatolyg
7

Oktaf , 127 124 byte

Dihapus 3 byte berkat Luis. gridsudah cukup (bukan grid on).

spy([0,1,0;0,0,1;1,1,1],'.k',300),set(gca,'XTick',.5:4,'XTickLabel','','YTick',.5:4,'YTickLabel',''),axis(.5+[0,3,0,3]),grid

Output (setelah disimpan):

Perhatikan bahwa output menunjukkan garis kotak abu-abu di jendela plot. Mereka berubah menjadi hitam saat menyimpannya (untuk beberapa alasan).

masukkan deskripsi gambar di sini

Ya, itu panjang dan berantakan! Harus melalui banyak modifikasi untuk membuat ini mematuhi spesifikasi.

Penjelasan dan semoga golf datang ...

Stewie Griffin
sumber
Itu tidak terlihat terlalu ramai, tetapi karena OP melakukan jawaban dengan output yang sama, saya kira tidak apa-apa ..
L3viathan
2
Saya pikir rasio tinggi / lebar tergantung platform. Tambahkan 'square'untuk membuatnya persegi pada semua platform. spy([0,1,0;0,0,1;1,1,1],'.k',80),set(gca,'XTick',.5:4,'XTickLabel','','YTick',.5:4,'YTickLabel',''),axis(.5+[0,3,0,3],'square'),grid on.
Stewie Griffin
7

Memproses, 212 198 byte

background(-1);noFill();stroke(99);rect(0,0,99,99);rect(0,33,99,33);rect(33,0,33,99);fill(0);int f=25;ellipse(15,83,f,f);ellipse(50,83,f,f);ellipse(83,83,f,f);ellipse(83,50,f,f);ellipse(50,15,f,f);

Pada dasarnya, kami menggunakan Pemrosesan sederhana untuk menggambar Latar Belakang putih, lalu mengatur transparansi persegi panjang yang digunakan untuk kisi dan menggambar goresannya dalam warna abu-abu. Kami melanjutkan dengan mendefinisikan persegi panjang, mengatur nilai fill lagi untuk mengisi lingkaran hitam dan mendefinisikan lingkaran lima.

Voa!

masukkan deskripsi gambar di sini

Anda bisa menambahkan

strokeWidth(2); 

atau lebih untuk melihat warna pukulan lebih baik.

(Itu Golf-Code pertamaku, kuharap aku melakukan semuanya dengan benar.)

EDIT: Terima kasih kepada Kritixi Lithos! Menghapus baris baru, diubah menjadi int f = 25 dan digunakan -1 di latar belakang (float)

Zep
sumber
1
Golf pertama yang hebat, dan selamat datang di PPCG!
MD XF
1
Anda dapat menyimpan beberapa byte dengan menghapus baris baru, mengubah float f=25;ke int f=25;dan dengan menggunakan background(-1)alih-alihbackground(255);
Kritixi Lithos
6

Tikz, 193 175 170 byte

\documentclass[tikz]{standalone}\begin{document}\tikz{\def\a{)rectangle(}\def~{)circle(1)(}\draw(4,6\a2,0)(0,\a6,6)(0,2\a6,4);\fill(1,1~3,1~5,1~5,3~3,5~,)}\end{document}

Berikut ini hasilnya:

Keluaran

Wisaya Gandum
sumber
3
@ MDXF Itu memotong dekat tetapi karena ini adalah lingkaran dan kotak yang sempurna mereka membentuk π / 4 dari kotak yang hanya sekitar 79% dari kotak.
Wheat Wizard
Sial, lihat tantangannya dan punya ide yang sama persis;)
racer290
4

MATL , 74 69 68 64 62 byte

4:6B&f,.5+w]'k.'5Y08W5$XG7lZG1$3ZG1tZG4:"@th1Kh'k'3$XG1Mbw3$XG

Cobalah di MATL Online! (Butuh beberapa detik.)

Output dari juru bahasa online:

masukkan deskripsi gambar di sini

Luis Mendo
sumber
4

Memproses, 134 byte

Terinspirasi oleh @Zep, inilah Pemrosesan satu-liner saya (dan juga kode golf pertama saya):

stroke(127);for(int i=0;i<9;i++){int x=i%3*30;int y=i/3*30;fill(255);rect(x+5,y+5,30,30);if(i==1||i>4){fill(0);ellipse(x+20,y+20,23,23);}};

Terima kasih atas @Kritixi Lithos untuk tips briliannya untuk mencukur beberapa byte!

glider dalam Memproses

George Profenza
sumber
Harap sertakan garis Bahasa dan Skor .
Theraot
Selamat datang di PPCG dan jawaban pertama yang bagus! Seperti yang dinyatakan oleh Theraot, semua kiriman harus memiliki header yang berisi bahasa dan bytecount. Selain itu, Anda dapat mem-golf beberapa byte dengan mendeklarasikan semua variabel dalam for-loop, seperti for(int i=0,x,y;...sehingga Anda dapat menjatuhkan byte intdi badan loop. Selain itu, fill(255);bisa menjadi adilfill(-1);
Kritixi Lithos
Saya belum menguji ini, tapi saya pikir Anda bisa menghapus +20pengaturan sementara nilai-nilai xdan y, sehingga Anda dapat mengubah rectke rect(x+5,y+5,30,30);dan ellipseke ellipse(x+20,y+20,23,23);dan menyimpan dua byte.
Kritixi Lithos
4

LaTeX + Tikz, 155 byte

\documentclass[tikz]{standalone}\begin{document}\tikz{\draw(0,0)grid(3,3);\foreach\x/\y in{0/0,1/0,2/0,2/1,1/2}\fill(\x+.5,\y+.5)circle(.5);}\end{document}

hasil

TonioElGringo
sumber
1
Apakah itu 1/0pembagian?
wizzwizz4
Maaf, tapi tidak, ini adalah pemisah sederhana dalam pasangan xdan ykoordinat.
TonioElGringo
Anda harus dapat menyimpan beberapa byte dengan meningkatkan semuanya dengan 2, sehingga Anda .5menjadi adil 1.
Chris
@ Chris Grid builtin menghasilkan sel panjang unit secara default, dan dibutuhkan sekitar 8 byte lebih (menambahkan [step=2]) untuk menghasilkan grid yang lebih besar. Menyederhanakan koordinat untuk menggambar lingkaran tidak akan menghemat byte yang cukup. (Anda mendapatkan 157 byte jika melakukannya)
TonioElGringo
@TonioElGringo Ah, benar. Mengajar saya untuk berkomentar tanpa mengujinya terlebih dahulu;)
Chris
4

SmileBASIC, 125 byte

GCLS-1GCOLOR #GRAY
GBOX.,8,30,38GBOX 10,8,20,38GBOX.,18,30,28G.,1G 1,2G-1,3G.,3G 1,3DEF G X,Y
GPUTCHR X*10+12,Y*10,58081,.END

58081 (U + E2E1, yang ada di blok "Area Penggunaan Pribadi") adalah kode karakter untuk simbol lingkaran. Memasukkannya ke dalam string juga akan berhasil, tetapi karena dikodekan sebagai 3 byte di UTF-8, panjangnya akan sama (dan tidak ditampilkan dengan benar di sini).

penurunan harga mengerikan

12Me21
sumber
1
Selalu menyegarkan untuk melihat jawaban dasar !
Taylor Scott
3

C #, 333 byte

using System.Drawing;_=>{var b=new Bitmap(31,31);var g=Graphics.FromImage(b);g.FillRectangle(Brushes.White,0,0,31,31);for(int x=0,y;x<3;++x)for(y=0;y<3;++y){g.DrawRectangle(Pens.Gray,x*10,y*10,10,10);if(x==1&y<1|x>1&y==1|y>1)g.FillEllipse(Brushes.Black,x*10+1,y*10+1,8,8);}b.Save("t.png");System.Diagnostics.Process.Start("t.png");};

Versi Lengkap / Terformat:

using System.Drawing;
Action<int> a = _ =>
{
    var b = new Bitmap(31, 31);
    var g = Graphics.FromImage(b);

    g.FillRectangle(Brushes.White, 0, 0, 31, 31);

    for (int x = 0, y; x < 3; ++x)
        for (y = 0; y < 3; ++y)
        {
            g.DrawRectangle(Pens.Gray, x * 10, y * 10, 10, 10);
            if (x == 1 & y < 1 | x > 1 & y == 1 | y > 1)
                g.FillEllipse(Brushes.Black, x * 10 + 1, y * 10 + 1, 8, 8);
        }

    b.Save("t.png");
    System.Diagnostics.Process.Start("t.png");
};

Ide itu sederhana, kita membuat objek gambar dari gambar dan menggunakannya untuk membuat gambar menjadi putih semua. Kemudian lilitkan setiap persegi gambar menggambar persegi panjang pembatas. Jika itu adalah salah satu lokasi untuk sebuah titik, kami juga menggambarnya. Terakhir kita menyimpan gambar ke file dan membiarkan windows memutuskan bagaimana membukanya, dalam kasus saya itu terbuka dengan Windows Photo Viewer.

Menggunakan Processuntuk menunjukkan gambar dan menyimpan ke file jauh lebih pendek daripada membuat formulir windows atau aplikasi WPF karena semua kelas yang berbeda dan bulu ekstra yang diperlukan untuk membuatnya.

Keluaran:

Keluaran

TheLethalCoder
sumber
Saya tidak berpikir Anda harus menggunakan Process.Start, misalnya Titus menjawab hanya menampilkan gambar, tidak membukanya
Jeremy Thompson
@JeremyThompson aturan menyatakan Anda harus menampilkan gambar
TheLethalCoder
3

PHP, 221 + 2 byte

<?imagefill($i=imagecreatetruecolor(31,31),0,0,~0);function q($i,$x,$y,$f){imagerectangle($i,$x*=10,$y*=10,$x+10,$y+10,5e6);$f?:imagefilledellipse($i,$x+5,$y+5,8,8,0);}for($p=16;$p--;)q($i,$p&3,$p>>2,53>>$p&1);imagepng($i);

Simpan ke file; panggilan di browser. Jika peramban Anda menampilkan omong kosong,
masukkan header("Content-Type:image-png");sebelumnya imagepng($i);.

keluaranTitik-titik tidak bulat; itu karena proporsi yang kecil.

kerusakan

function q($i,$x,$y,$f){        # function to draw quadrant:
    imagerectangle($i,$x*=10,$y*=10,$x+10,$y+10,5e6);   # draw lines in 0x4c4b40
    $f?:imagefilledellipse($i,$x+5,$y+5,8,8,0);         # if bit not set, draw dot
}

imagefill($i=
    imagecreatetruecolor(31,31) # create image
    ,0,0,~0);                   # fill with 0xffffff (white)
for($p=16;$p--;)q($i,           # loop through positions, call function
    $p&3,                           # $x=lower two bits
    $p>>2,                          # $y=upper two bits
    53>>$p&1                        # $f=one bit from %0000 0000 0011 0101
);                                      # (reversed inverted bit mask for dots)
imagepng($i);                   # output image

Saya pikir itu 0x4c4b40memenuhi syarat sebagai abu-abu yang diperkirakan. Jika tidak, tambahkan empat byte.

Titus
sumber
3

R 313 236 byte

l=c(1,7)
bmp('r',400,400)
plot(x=c(4,6,2,4,6),c(6,4,2,2,2),cex=14,pch=19,xlim=l,ylim=l,xlab='',ylab='',xaxs='i',yaxs='i',axes=F)
a=function(s,...){axis(s,labels=F,tck=1, col="gray",lwd=9,...)}
a(1,xaxp=c(l,3))
a(2,yaxp=c(l,3))
dev.off()

Kode Revisi, sebagian besar berdasarkan komentar dari @ user2390246 menyimpan 77 byte. Sangat menghargai bantuannya.

Juga, ingin menambahkan info ke solusi R yang lebih pendek dengan @mschilli. Ini menunjukkan cara yang elegan untuk mengatasi masalah default grafis R.

Keluaran

Pergi ke nama file "r". Menghilangkan dan ekstensi menyelamatkan saya empat byte. Tapi kemudian saya harus mengedit ekstensi file kembali ke "bmp" untuk mendapatkannya untuk diunggah. Jadi mungkin saya seharusnya tidak mendapatkan kredit untuk empat byte itu.

Logo Peretas

Komentar

Saya berpikir dalam hati, "Grafik itu tidak lain adalah grafik sederhana dengan lima titik. Seharusnya masalah sederhana untuk diimplementasikan dalam bahasa dengan kemampuan grafik data yang kuat. Mari kita coba dalam R." Tapi kemudian saya harus menghabiskan pada urutan 80% dari byte hanya bekerja di sekitar standar grafis R.

Agak alat yang salah untuk pekerjaan itu ....

Saya tidak dapat menemukan cara yang kurang verbose untuk menjamin ukuran dan aspek rasio grafik daripada dengan memanggil konstruktor bmp dan kemudian dev.off (). Kombinasi tersebut menyumbang 25 byte. Jika sesi R Anda diatur dengan benar, Anda mungkin mendapatkan grafik yang terlihat lebih atau kurang benar tanpa menghabiskan byte itu, tetapi itu tidak dapat diandalkan atau konsisten.

CCB60
sumber
1
Beberapa saran: jangan mendefinisikan kerangka data Anda bsama sekali, cukup masukkan dua vektor yang tidak disebutkan namanya langsung ke dalam plotfungsi. Gunakan c(l,3)untuk xaxpdan yaxp. Anda bisa menggunakan Funtuk false, tidak perlu mendefinisikannya. Dan tentukan fungsi baru a(x,...)yang memanggil axis(x)tetapi memiliki nilai default untuk label, tck, dll, sehingga Anda tidak perlu menentukan semuanya dua kali.
user2390246
Anda juga bisa menggunakan axes=Fdaripada xaxt='n',yaxt='n'. Dan Anda lupa menggunakan .5ketika mendefinisikan lmeskipun Anda memang menggunakan trik itu nanti.
user2390246
1
Sebenarnya, bagaimana jika Anda menggandakan semua nilai koordinat untuk menyingkirkan semua sial .5itu?
user2390246
1
Jika Anda sudah melepas .bmpekstensi file, Anda mungkin cukup beri nama file tersebut r.
MD XF
@ user2390246 - Terima kasih banyak atas sarannya. Secara kumulatif disimpan pada urutan 70 byte. Ini adalah upaya pertama saya bermain golf di R, dan Anda melihat banyak kesalahan tyro yang seharusnya saya lihat. Lain kali aku akan tahu lebih baik.
CCB60
3

TI-BASIC, 218 140 137 byte

Catatan: jumlah byte ini sedikit meningkat. Program ini hanya menggunakan 85 token, tetapi disimpan dalam 137 byte. Juga, jika Anda menggunakan kalkulator non-warna, Anda dapat menyimpan 4 token lain karena Anda tidak harus menentukan warna (yang merupakan warna biru secara default), tetapi saya tidak tahu apakah layarnya cukup besar untuk tantangan ini karena saya tidak memilikinya.

prgmHACKER (138 byte, 86 token):

{0,1,2,1,2}→L1
{0,0,0,2,1}→L2
.3→R
For(I,0,5
L₁(I)+.5→A
L₂(I)+.5→B
For(N,0,R,dX
√(R²-N²
Line(A+N,B-Ans,A+N,B+Ans,BLACK
Line(A-N,B-Ans,A-N,B+Ans,BLACK
End
End

Untuk tampilan yang tepat, program ini mengharuskan Xmin = Ymin = 0, Xmax = Ymax = 3, Xscl = Yscl = 1. dX juga perlu diatur dengan benar, tetapi kalkulator melakukan itu untuk Anda ketika Anda mengatur variabel jendela lainnya. Saya tidak bisa melihat berapa banyak ruang yang digunakan variabel-variabel ini dalam RAM.

Selanjutnya, pengaturan format harus {RectGC, CoordOff, GridLine, GridColor: MEDGRAY, Axes: OFF, ExprOff, BorderColor: 1, Background: OFF} tetapi ini adalah nilai yang di-toggle dan tidak menggunakan ruang tambahan tergantung pada pengaturan.

latias1290
sumber
Untuk mengurangi daftar, Anda dapat mengekspresikan ini sebagai {0,1,2,1,2}dan {0,0,0,2,1}kemudian menambahkan 0.5ke setiap item.
wizzwizz4
Sudah mencobanya, tetapi itu tidak mengubah jumlah RAM yang digunakan oleh daftar. Namun, Anda memberi saya ide untuk menyingkirkan daftar dalam RAM dan mendefinisikannya ketika program berjalan, menghemat 78 byte dalam RAM.
latias1290
Pesanlah pada orang-orang golf! Ubah L1dan L2ke L₁dan L₂, karena Anda sudah menggunakannya. Saya pikir Anda dapat menghapus }, dan L₁(I)+.5→A=> .5+L₁(Idan L₂(I)+.5→B=> .5+L₂(I→B.
Zacharý
3

R, 119 114 111 byte

(Terima kasih kepada @JayCe karena telah menyelamatkan saya 3 byte)

Tidak lebih pendek dari solusi R lainnya , tetapi pendekatan yang sama sekali berbeda:

layout(matrix(c(1,9,2:8),3,,T))
par(mar=0*1:4)
for(i in 1:9){frame();if(i>4)points(.5,.5,,19,cex=29);box(fg=8)}

Menggunakan tata letak di mana 4 plot pertama adalah sel-sel kosong, dan 5 lainnya yang memiliki titik-titik di dalamnya.

Pesawat peluncur

plannapus
sumber
Dapatkah saya membuat lebih pendek daripada solusi lain menggunakan argumen posisi: di sini
JayCe
@JayCe memang, terima kasih!
plannapus
3

Excel VBA, 180 byte

Fungsi jendela langsung VBE anonim yang tidak mengambil input dan output ke objek lembar kerja default ( Sheet1).

Cells.RowHeight=48:Cells.Interior.Color=-1:[B2:D4].Borders.Color=7434613:For Each s In[{21,32,13,23,33}]:Sheet1.Shapes.AddShape(9,48*(s\10)+4,Mid(s,2)*48+4,40,40).ShapeStyle=8:Next

Versi yang dikomentari

Cells.RowHeight=48                      ''  Make the Cells square
Cells.Interior.Color=-1                 ''  Remove the default grid
[B2:D4].Borders.Color=7434613           ''  Create the 3x3 gray grid at range `B2:D4`
For Each s In [{21,32,13,23,33}]        ''  Assign and iterate over a list of where
                                        ''  to place the dots; This list is a range that 
                                        ''  is coerced into a numeric array

    Sheet1.Shapes.AddShape(         _   ''  Add a shape to the Sheet1 object
                9,                  _   ''  An Oval (msoShapeOval)
                48*(s\10)+4,        _   ''  At the calculated value from the left
                Mid(s,2)*48+4,      _   ''  At the calculated value from the top
                40,                 _   ''  that is 40 units wide
                40                  _   ''  and is 40 units tall
                ).ShapeStyle=8          ''  and is black filled with a black outline

Next                                    ''  repeat to end of list

Keluaran

Logo Peretas

-6 byte untuk menggunakan [{21,32,13,23,33}]lebih dariSplit("21 32 13 23 33")

-2 byte untuk menggunakan Mid(s,2)lebih dariRight(s,1)

-3 byte untuk menggunakan (s\10)lebih dariLeft(s,1)

Taylor Scott
sumber
2

Oktaf 107 94 103 byte

scatter([1:3,3,2],[1,1,1:3],1e5,zeros(5,3),'.');axis off;a=[1,7]/2;for i=.5:3.5;line(a,i);line(i,a);end

atau

plot([1:3,3,2],[1,1,1:3],'k.','markersize',250);axis off;a=[1,7]/2;for i=.5:3.5;line(a,i);line(i,a);end

kedua solusi adalah 103 byte.

Tasos Papastylianou
sumber
2
Saya percaya bahwa titik-titik itu harus hitam
TheLethalCoder
ah, menarik, matlab mengartikan skalar sebagai sebuah poin, bukan menyiarkannya. jadi alih-alih line([x1,x2],y)harus Anda lakukanline([x1,x2],[y,y])
Tasos Papastylianou
2

Apple Swift (iOS - CoreGraphics / QuartzCore) - 832 Bytes

Saya menggambar bentuk seluruhnya menggunakan Quartz untuk perangkat Apple iOS. Sayangnya ini bukan bahasa mindful ukuran khusus sehingga hasilnya cukup besar, tapi ini sekecil yang saya bisa.

UIGraphicsBeginImageContext(CGSize(width:60,height:60));let c=UIGraphicsGetCurrentContext()!;UIColor.lightGray.setStroke();c.addRect(CGRect(x:0,y:0,width:60,height:60));c.move(to: CGPoint(x:20,y:0));c.addLine(to: CGPoint(x:20,y:60));c.move(to: CGPoint(x:40,y:0));c.addLine(to: CGPoint(x:40,y:60));c.move(to: CGPoint(x:0,y:20));c.addLine(to: CGPoint(x:60,y:20));c.move(to: CGPoint(x:0,y:40));c.addLine(to: CGPoint(x:60, y:40));c.strokePath();UIColor.black.setFill();c.addEllipse(in:CGRect(x:22,y:2,width:16,height:16));c.addEllipse(in:CGRect(x:42,y:22,width:16,height:16));c.addEllipse(in:CGRect(x:2,y:42,width:16,height:16));c.addEllipse(in:CGRect(x:22,y:42,width:16,height:16));c.addEllipse(in:CGRect(x:42,y:42,width:16,height:16));c.fillPath();let i=UIGraphicsGetImageFromCurrentImageContext();sub.addSubview(UIImageView(image:i))

Versi yang lebih mudah dibaca untuk siapa saja yang tertarik:

    UIGraphicsBeginImageContext(CGSize(width: 60, height: 60))
    let c = UIGraphicsGetCurrentContext()!

    UIColor.lightGray.setStroke()
    c.addRect(CGRect(x: 0, y: 0, width: 60, height: 60))
    c.move(to: CGPoint(x: 20, y: 0))
    c.addLine(to: CGPoint(x: 20, y: 60))
    c.move(to: CGPoint(x: 40, y: 0))
    c.addLine(to: CGPoint(x: 40, y: 60))
    c.move(to: CGPoint(x: 0, y: 20))
    c.addLine(to: CGPoint(x: 60, y: 20))
    c.move(to: CGPoint(x: 0, y: 40))
    c.addLine(to: CGPoint(x: 60, y: 40))
    c.strokePath()

    UIColor.black.setFill()
    c.addEllipse(in: CGRect(x: 22, y: 2, width: 16, height: 16))
    c.addEllipse(in: CGRect(x: 42, y: 22, width: 16, height: 16))
    c.addEllipse(in: CGRect(x: 2, y: 42, width: 16, height: 16))
    c.addEllipse(in: CGRect(x: 22, y: 42, width: 16, height: 16))
    c.addEllipse(in: CGRect(x: 42, y: 42, width: 16, height: 16))
    c.fillPath()

    let i = UIGraphicsGetImageFromCurrentImageContext()
    sub.addSubview(UIImageView(image: i))

Ini adalah output yang dihasilkan di Simulator iOS: Keluaran

Jacob King
sumber
2

Ruby with Shoes, 118 karakter

Shoes.app{9.times{|i|
stroke gray
fill white
rect x=i%3*w=10,y=i/3*w,w,w
stroke fill black
oval x+2,y+2,7if 482[i]>0}}

Bit pengecekan yang dipinjam dari RJHunter 's komentar yang dibuat pada Mark Thomas ' s solusi Ruby .

Output sampel:

Glider digambar dengan Ruby dengan Sepatu

manatwork
sumber
2

SVG + HTML, 146 138 135 133 byte

<svg>
<path fill=none stroke=#ccc d=m.5.5h30v30h-30zh10v30h10v-30zv10h30v10h-30 />
<path d=m11,1h9v9m1,1h9v9m-29,1h9v9m1-9h9v9m1-9h9v9>

Berkat parser HTML yang lunak, xmlns="http://www.w3.org/2000/svg"deklarasi dapat dihilangkan, serta kutipan atribut dan tag penutup. Versi ini membahas beberapa masalah dari solusi HTML lainnya:

  • "Titik" dijamin untuk mengisi setidaknya 40% dari selnya (§1)
  • Itu tidak menggunakan grafis eksternal, mis. Font glyphs (§2, §6)
  • Kotak itu berbentuk bujur sangkar sempurna (§5)

Sunting Dicukur 8 byte dengan mengeksploitasi fakta bahwa subpath tidak perlu ditutup untuk diisi .

Sunting Menurut tata bahasa svg , tidak perlu memisahkan non-digit dengan koma ( .5,.5). Saya juga mengabaikan isian eksplisit, sehingga saya dapat mengubah arah undian dari satu baris dari negatif ke positif, menghemat tanda hubung. Dan terakhir, saya menyesuaikan penghitungan untuk tidak menyertakan baris baru, maaf untuk kesalahan pemula ini.

Sunting Belajar dari jawaban lain tentang codegolf, saya telah mengganti final 9 />dengan 9>. Ini berfungsi baik di semua browser yang diuji.

Meyer
sumber
2

Python 3 + PyGame, 238 Bytes

from pygame import*
d=display
s=d.set_mode([55]*2)
s.fill([255]*3)
f=lambda*a:draw.line(s,[128]*3,*a)
for x in[0,18,36,54]:
 f((x,0),(x,55));f((0,x),(55,x))
for x,y in zip([3,5,1,3,5],[1,3,5,5,5]):draw.circle(s,[0]*3,(x*9,y*9),7)
d.flip()

Konstanta yang tampaknya sewenang-wenang berasal dari saya mencoba membuat gambar sebesar mungkin tanpa mengorbankan byte.

Dengan karakter yang tidak dicetak, 229 Bytes

from pygame import*
d=display
s=d.set_mode([55]*2)
s.fill([255]*3)
f=lambda*a:draw.line(s,[128]*3,*a)
for x in b'\0␒$6':
 f((x,0),(x,55));f((0,x),(55,x))
for x,y in zip(b'␃␅␁␃␅',b'␁␃␅␅␅'):draw.circle(s,[0]*3,(x*9,y*9),7)
d.flip()

Saya mengganti daftar dengan byte literal, yang menyimpan banyak karakter, tetapi karakter yang tidak dicetak tidak dapat ditampilkan dengan benar di sini. Saya mengganti karakter non-cetak dengan ekuivalen grafisnya U + 2400-U + 2421 untuk keperluan tampilan.

tangkapan layar

Ryan McCampbell
sumber