Hiển thị Logo Hacker


57

Bạn có thể đã nghe nói về "Logo Hacker", còn được gọi là "Biểu tượng Hacker". Nó trông như thế này:

logo hacker

Đây là một mô hình từ một mô phỏng toán học được gọi là Trò chơi cuộc sống. Tàu lượn là mẫu Cuộc sống đơn giản nhất di chuyển và dễ nhận biết nhất trong tất cả các mẫu Cuộc sống.

Các thách thức

Thách thức khá đơn giản: Hiển thị logo của hacker. Điều này được định nghĩa là:

  • Lưới 3x3 có viền, nền trắng và đường lưới màu xám.
  • Năm chấm đen được sắp xếp theo mô hình tàu lượn GoL.
  • Không có gì khác.

Những quy định

  • Các chấm đen phải lấp đầy 40% - 80% các hộp lưới riêng lẻ của chúng.
  • Bạn sẽ hiển thị biểu tượng với đầu ra đồ họa nhưng không có nghệ thuật ASCII .
  • Đầu ra phải có ít nhất 30x30 pixel .
  • Đầu ra chỉ phải có các màu xám, đen và trắng .
  • Mỗi hộp lưới trong lưới sẽ có cùng kích thước. Lưới sẽ là một hình vuông 3x3 thông thường .
  • Bạn không thể lấy logo từ internet hoặc hệ thống tập tin của bạn.
  • Chương trình của bạn sẽ hiển thị logo trên màn hình / cửa sổ trống. Nếu nó chấm dứt nó phải làm như vậy bình thường.
  • Lưu ý rằng "dấu chấm" không nhất thiết có nghĩa là "vòng tròn". "Dấu chấm" là một hình dạng hình học duy nhất tập trung ở giữa hộp lưới có một mặt. Ví dụ: trong khi hình tròn hoặc hình vuông sẽ đủ điều kiện là một dấu chấm, hai hình tam giác hoặc hình bàn cờ sẽ không.

Người chiến thắng

Vì đây là , câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng!

Vui lòng bao gồm một ảnh chụp màn hình đầu ra của chương trình của bạn trong câu trả lời của bạn.


21
Tôi không biết cái này được gọi là Logo Hacker. Tôi đã sử dụng nó làm hình đại diện của mình trên một số trang web, đoán rằng điều đó làm cho tôi trở thành một Hacker.
Mark Thomas

15
@MarkThomas hoặc một GoL mọt sách xD
Stephen

3
@DavidConrad "xóa màn hình" nghĩa là nếu bạn đang sử dụng IDE / giao diện có đồ họa dựng sẵn, bạn không thể hiển thị nó với văn bản hiện có trên màn hình. Có, bạn có thể hiển thị nó trong một cửa sổ.
MD XF

3
Là nhiều sắc thái của màu xám (và các màu tắt liên quan) do khử răng cưa được phép?
Ian Miller

3
Chúng ta có phải hiển thị đầu ra hay chúng ta có thể trả lại hoặc lưu vào một tập tin?
TheLethalCoder

Câu trả lời:


27

Toán học, 62 byte

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

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

Toán học, 71 byte

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


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


2
Tôi nghĩ bạn có thể lưu byte bằng cách sử dụng một hàm thuần túy Graphics@Disk[]làm đối số.
Máy

Nếu bạn có nghĩa là Lưới này [{{, #,}, {,, #}, {#, #, #}}, Frame-> All, FrameStyle-> Grey] & @ Graphics @ Disk [] thì đó là 72 byte
J42161217

3
Một biến thể 69 byte về điều này : Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]. ● là một ký tự unicode hai byte. Vì nó không nhất thiết phải là một vòng tròn, có lẽ một số ký tự ASCII có thể hoạt động để đáp ứng yêu cầu 40% -80%.
Ian Miller

thực sự tôi đã làm cho nó tới 62 byte đáp ứng tất cả các yêu cầu
J42161217

Tôi nghĩ rằng bạn cần Rasterizehoặc tương tự để đáp ứng yêu cầu graphical output but no ASCII artvì các ký hiệu vẫn có thể được chọn trong lưới dưới dạng các ký tự Unicode.
Ian Miller

33

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

Đã lưu 4 byte bằng cách kết hợp các đề xuất từ ​​các bình luận.

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>

Điều này sử dụng ký tự UTF-8 dài 2 byte và tận dụng lợi thế của cú pháp HTML.


3
Không tệ; đó là cách sử dụng khá thông minh !
MD XF

3
Rất tuyệt. Tôi nghĩ rằng bạn có thể lưu một byte bằng line-height:.4;và một byte khác bằng cách bỏ qua việc đóng}
ETHproductions

5
Không sử dụng • được tính là nghệ thuật ASCII, trái với quy tắc thách thức?
Hankrecords

2
@StephenS Nghe có vẻ như một sự khác biệt thực sự vô ích, cộng với tôi không thấy ý nghĩa trong việc cấm nghệ thuật ASCII nhưng cho phép nghệ thuật unicode. Đối với OP nói rằng đó là thông minh, thực tế bình luận của tôi là hướng đến OP, tôi đã quên đưa vào @.
Hankrecords

4
Câu trả lời Code Golf duy nhất tôi từng hiểu, ít nhất là tôi tin như vậy.
Uwe Keim

25

GLSL (shader mảnh), 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.);}

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

Xem nó trong hành động: http://glslsandbox.com/e#40717.2


1
Hmm ... đường viền có đi khắp đồ họa không? Ngoài ra, bạn có chắc rằng các vòng tròn chỉ là 80% của các hộp lưới?
MD XF

12
Một vòng tròn chạm vào tất cả bốn cạnh của hình vuông bao quanh của nó sẽ lấp đầy tỷ lệ π / 4 của hình vuông, tương đương khoảng 78,5%.
Greg Martin

Tôi đã giảm kích thước mã của bạn xuống 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)

Kích thước thực tế, 61 x 61, được vẽ trong một khung lớn hơn 300 x 400:

Kích thước thực sự

Hiển thị lưới pixel:

phiên bản lưới pixel

Các chấm sử dụng 177 pixel trong phạm vi 40% -80% cho dù xem xét tỷ lệ lấp đầy trắng 19 x 19 (144,4-288,8) hay 21 đến 21 bao gồm cả hai viền (176,4-352,8).

Lưu ý: chương trình chấm dứt và đóng cửa sổ canvas ngay khi bản vẽ hoàn thành, để cho phép đóng cửa sổ thủ công nối thêm dòng done().

turtlelà một gói Python được phát triển để lập trình đồ họa giới thiệu. Bút bắt đầu ở x,y=0,0giữa khung vẽ 300 x 400 pixel (theo mặc định), upnhấc bút, gotodi chuyển bút, shapeđặt hình dạng của bút thành hình dạng được đặt tên ( "square"là hình dạng được xác định trước với chiều rộng pixel mặc định là 21 ), colorđặt màu, trong đó hai tham số đặt đột quỵ (với mặc định là chiều rộng là 1) và tô màu; một byte được lưu bằng cách sử dụng (r,g,b)tùy chọn tuple để thay thế "white"bằng [1,1,1]cách sử dụng phép nhân danh sách [1]*3. Cuối cùng dotvẽ một dấu chấm với chiều rộng cho trước bằng pixel và màu. Giá trị độ rộng mặc định của dấu chấm quá nhỏ để đủ điều kiện, 9vì vậy tôi đã làm cho nó trở nên thẩm mỹ và đủ điều kiện 15. Màu của chấm có thể là"black"nhưng giải nén (r,g,b)tuple của 0,0,0ngắn bởi hai byte.

Bút phải di chuyển ra khỏi bất kỳ dấu chấm nào ở cuối vì nếu không thì bút màu xám / trắng sẽ che dấu chấm đó.

Lưới được truyền tải bằng cách sử dụng div ( /) và mod ( %) ibắt đầu từ 8( iđược khởi tạo 9nhưng bị giảm ở đầu whilevòng lặp) và làm việc xuống 0, bù đắp kết quả của 2,1,0việc -1,0,1sử dụng (1-...)và chia tỷ lệ cho từng kích thước lưới bằng cách sử dụng hệ số 20 (lưu ý rằng 20-i/3*20thực tế là một byte nhỏ hơn 20*(1-i/3), tương tự như vậy %). Điều này tạo ra thứ tự [dưới cùng bên trái, giữa bên trái, trên cùng bên trái, dưới cùng giữa, giữa-giữa, trên-giữa, dưới bên phải, giữa phải, trên cùng bên phải] và yêu cầu hasDotđánh giá "" về [1,0,0,1,0,1,1,1,0], đó là 302trong nhị phân vì vậy có thể được truy cập bằng cách kiểm tra sức mạnh ithứ hai của hai thành phần302với việc sử dụng bitwise-và , 302&2**i.


Cách tiếp cận rất tốt và ngắn hơn nhiều so với tôi nghĩ sẽ có thể sử dụng turtle.
Cột

14

Applesoft BASIC , 479 476 516 515 483 482 byte

-32 bằng cách sử dụng tên biến không thể đọc được: P
-1 vì Apple quyết định là phép thuật và cho phép tôi sử dụng GOTO ẩn / không tồn tại

Đây là chương trình của riêng tôi (rất dễ đánh bại) cho một ví dụ về đầu ra không sử dụng vòng tròn:

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

Đầu ra:


1
Tôi không chắc điều này có hợp lệ hay không, vì dòng 1, dài hơn 239 ký tự, không thể nhập bằng các phương thức thông thường, ít nhất là trên // e.
insert_name_here

1
@insert_name_here Bạn phải lưu nó vào một tệp trên đĩa.
MD XF

14

Mã máy 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

Đây là một fastcallhàm được gọi là doittrả về hình ảnh ở định dạng PGM trong bộ đệm được cung cấp. Sử dụng:

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

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

Đầu ra:

logo của hacker

Tôi đã sử dụng độ phân giải 256x256 vì nó tuyệt vời cho phép tôi ecxtự động phân chia chỉ số của pixel thành tọa độ ytrong chxtrong cl. Ngoài ra, định dạng tệp PGM yêu cầu số 255 trong tiêu đề hình ảnh.

Các hình vuông bên trong là 54x54 (41% của tế bào theo khu vực).

Mã nguồn (có thể được biên dịch bởi 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;

Mẫu tế bào

0 1 0
0 0 1
1 1 1

có thể được biểu diễn bằng một bitmap "tối ưu hóa" gồm 7 bit.

Các bit được lập chỉ mục bởi biểu thức y * 2 + x, (x,y)vị trí của ô. Biểu thức này cho cùng một chỉ mục cho 2 cặp ô. Thật là một sự trùng hợp may mắn khi các giá trị bit ở đó giống nhau.


1
Điều này thật tuyệt, nhưng tôi 42*42/85/85chỉ kiếm được 24,4%.
Jonathan Allan

@Jonathan ALLan: Các phần màu trắng của ô chỉ có 84x84, nhưng vâng, một hộp 42x42 chỉ bằng một phần tư của hộp 84x84.
Nick Matteo

Tôi đã yêu cầu làm rõ (nếu nó đi đến khu vực tôi hy vọng nó không quá khó để cập nhật).
Jonathan Allan

Phán quyết nằm trong - đó là khu vực ...
Jonathan Allan

Tôi đã phóng to các chấm đen từ 42 lên 54. Đó là mức tối thiểu, khiến chúng chiếm 40% theo diện tích và chúng đã bắt đầu trở nên xấu xí ...
anatolyg

14

HTML & CSS, 155 byte

Hóa ra HTML thực sự tha thứ về lỗi cú pháp.

Lưu 1 byte nhờ @Octopus · Lưu 1 byte nhờ @Downgoat · 2 byte được lưu nhờ @StephenS

2 byte được lưu nhờ @Ryan · 3 byte được lưu nhờ @styfle · 4 byte được lưu nhờ @Ferrybig

13 byte được lưu nhờ @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


2
Vui lòng cho biết trình duyệt nào (và phiên bản nào) hoạt động - nó không hoạt động trong Opera 45.
Paŭlo Ebermann

2
Đoạn mã không hoạt động đối với tôi khi sử dụng Chrome 58.0.3029.110 (64-bit) trên Windows. Phiên bản Chrome nào hoạt động?
Jonathan Allan

Điều này không hiển thị các vòng tròn với Safari 10.1 trên macOS Sierra (10.12.4).
R. Kap

các chấm không được hiển thị với Chromium 55.0.2883.87 (64-bit).
Dylan Meeus

Không thể thấy các dấu chấm trên Chrome cho 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()

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


Bạn có thể sử dụng axes=Fđể thay thế xaxt="n",yaxt="n". Nếu bạn nhân đôi tất cả các giá trị tọa độ, bạn lưu 4 byte ròng (nhưng không thể sử dụng 1:3,2:3thủ thuật).
dùng2390246

@ user2390246: thx cho các đề xuất. Tôi đã không tìm thấy nhiều thời gian để chơi golf này. Tôi chắc chắn có nhiều cải tiến có thể. Tôi đã phải thêm ;box()như là axes=Floại bỏ khung. Ngoài ra, như axeslà một plottham số và không được truyền parqua ...như xaxt/ yaxt, nó thậm chí không cần phải được đánh vần hoàn toàn.
mschilli

1
Bạn có thể tắt 7 byte bằng cách (1) thay thế c(1,7)bằng một biến ( l=c(1,7)); (2) thay thế annbằng an; (3) thay thế [xy]libằng [xy]li; và (4) xóa đối số thứ hai, dự phòng thành grid: grid(3,lt=1). Trên thực tế, tôi đã tự do chỉnh sửa phần này trong (đang xem xét).
Konrad Rudolph

1
@KonradRudolph Có vẻ có liên quan: codegolf.meta.stackexchange.com/questions/1615/ợi
Matt

@Matt H'm. Có vẻ như điều này có ý nghĩa nếu nó áp dụng các tối ưu hóa cơ bản khác nhau, thay vì chỉ thực hiện các cải tiến đơn giản. Đủ công bằng.
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()

Đây là nỗ lực đầu tiên của tôi ở đây tại môn đánh gôn, vì vậy tôi chắc chắn điều này có thể được cải thiện. Tôi muốn không thiết lập các giới hạn, nhưng có vẻ như matplotlib không thể phát hiện ra rằng tôi đã vẽ các vòng tròn nơi tôi đã làm. Không đặt xlim () và ylim (), nó chỉ hiển thị hai vòng tròn phía dưới.

Đầu ra:

Biên tập

Chỉnh sửa: Đã sửa màu của đường viền và xóa số đánh dấu. Tôi phải nói matplotlib rất dày đặc, và không quá thân thiện với việc thay đổi màu trục.

Đã tắt 3 byte nhờ @DJMcMayhem

Chỉnh sửa: Loại bỏ hai byte bằng cách đặt các dấu tick của tôi dưới dạng một tuple bên trong các hàm set_ticks.


Xin lỗi, các số trên biểu đồ không được phép. Ngoài ra, là biên giới màu xám?
MD XF

3
Chào mừng đến với trang web! Đây là một câu trả lời đầu tiên tốt đẹp. :)
DJMcMayhem

1
Một số sân golf nhỏ tôi thấy: 1) Bạn có thể tham gia các dòng 5 và 6 để xóa một khoảng trắng và một dòng mới (-2 byte) 2) nếu thứ tự của bộ xy_ticks và xy_lim không thành vấn đề, bạn có thể làm gì đó như thế nào for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);". (Tôi chưa kiểm tra điều đó, vì vậy tôi không tích cực)
DJMcMayhem

8

Bash + ImageMagick, 233 226 ký tự

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:

Đầu ra mẫu:

Tàu lượn được vẽ bằng Bash và ImageMagick

Bash + ImageMagick, 215 ký tự

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:

Chủ sở hữu câu hỏi chưa trả lời câu hỏi khử răng cưa và một số giải pháp khác cũng có thêm màu xám được thêm vào bằng cách khử răng cưa, vì vậy bây giờ câu hỏi ngắn hơn này cũng có thể chấp nhận được.

Đầu ra mẫu:

Tàu lượn được vẽ bằng Bash và ImageMagick - với tính năng khử răng cưa


8

Ruby, 144 166 164 148 144 byte

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

Đầu ra:

đầu ra

Chỉnh sửa: Bây giờ có đường lưới màu xám.


3
Tôi có thể thấy một vài cơ hội chơi gôn ở đây. Đối với người mới bắt đầu, d=d+1có dạng ngắn hơn ( d+=1) và ==1ở đây tương đương với >0. Ngoài ra, hãy xem xét những gì xảy ra khi bạn đặt c thành Fixnum thay vì một mảng :-)
RJHunter

1
@RJHunter Tôi đã bỏ lỡ một số trái cây treo thấp! Và tôi đã nghĩ về những thứ như tạo ra một bitfield bằng c, nhưng không thể đưa ra một cách thực sự ngắn hơn khi thực hiện.
Đánh dấu Thomas

2
Có lẽ đáng ngạc nhiên, Ruby thực sự có một số hỗ trợ bitfield được tích hợp! Bạn có thể truy cập một số nguyên []như thể đó là một mảng bit (chỉ đọc, nhưng ở đây vẫn ổn).
RJHunter

@RJHunter cảm ơn! Tất cả tôi phải làm là thay đổi c thành số thích hợp. Giảm nó một chút.
Đánh dấu Thomas

Bạn có thể thay đổi g=[2,13,24]để g=2,13,24và thay thế eachvới map.
Jordan

8

PNG, 105 100 byte

Hình ảnh PNG    (tức là tệp hình ảnh này)

Xem xét rằng HTML và các ngôn ngữ không lập trình khác được cho phép , tôi tò mò muốn xem tôi có thể chơi một hình ảnh hiển thị trình duyệt đơn giản đến mức nào, để làm so sánh cơ bản. Kết quả được nén với các công cụ nguồn mở optipng ( -o7 -zm1-9 -strip all) và pngwolf . Tôi cũng đã thử nghiệm với zopflipng , nhưng kết quả lớn hơn. Các công cụ nén nguồn đóng khác có thể có thể loại bỏ thêm một vài byte.

Dữ liệu hình ảnh trong cơ sở64:

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

Chỉnh sửa Tôi đã làm cho các chấm chạm vào đỉnh và đáy của ô, để gây ra sự lặp lại nhiều hơn trong mẫu pixel và do đó cải thiện tỷ lệ nén. Nhưng đừng lo lắng, một dấu chấm vẫn chỉ lấp đầy (7 * 9) / (9 * 9) ≈ 78% tế bào của nó.


PNG không chuẩn, 88 byte

Như @anatolyg đã chỉ ra , có một số tiềm năng chơi gôn bằng cách loại bỏ đoạn IEND (12 byte). Về mặt kỹ thuật, IEND được yêu cầu theo tiêu chuẩn . Tuy nhiên, mỗi đoạn PNG bao gồm kích thước và thông tin tổng kiểm tra riêng. Do đó, không nhất thiết phải có một điểm đánh dấu kết thúc. Và thực tế, tất cả các trình duyệt tôi đã thử nghiệm có thể hiển thị hình ảnh mà không gặp vấn đề gì.

Thật không may (hoặc may mắn thay), hình ảnh không chuẩn này bị imgur từ chối, vì vậy tôi thực sự không thể tải nó lên. Đây là mã hóa base64:

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


Tôi không chắc điều này có hợp lệ không. PNGkhông phải là ngôn ngữ lập trình.
DJMcMayhem

4
Cảm ơn MD XF. @DJMcMayhem Không phải là HTML. Nhưng xem xét kích thước nhỏ của hình ảnh, tôi đã gửi nó như một mục bên ngoài thú vị.
Meyer


4
Ngoài ra, chào mừng bạn đến với PPCG, @Meyer! :)
Martin Ender

1
Bạn có thể xóa một vài byte ở cuối tệp và vẫn có hình ảnh. Có thể phụ thuộc vào người xem mặc dù; Tôi tưởng tượng hầu hết người xem không yêu cầu ví dụ như phần cuối phải có mặt.
anatolyg

7

Octave , 127 124 byte

Đã xóa 3 byte nhờ Luis. gridlà đủ (thay vì 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

Đầu ra (sau khi lưu):

Lưu ý rằng đầu ra hiển thị các đường lưới màu xám trong cửa sổ lô. Chúng chuyển sang màu đen khi lưu nó (vì một số lý do).

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

Vâng, đó là dài và lộn xộn! Phải trải qua rất nhiều sửa đổi để làm cho điều này tuân thủ các thông số kỹ thuật.

Giải thích và hy vọng một số môn đánh gôn sắp tới ...


Điều đó có vẻ không nghiêm trọng lắm, nhưng vì OP đã trả lời với kết quả tương tự, tôi đoán nó ổn ..
L3viathan

2
Tôi nghĩ tỷ lệ chiều cao / chiều rộng phụ thuộc vào nền tảng. Thêm vào 'square'để làm cho nó vuông trên tất cả các nền tảng. 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

Đang xử lý, 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);

Về cơ bản, chúng tôi đang sử dụng Xử lý đơn giản để vẽ Nền trắng, sau đó đặt độ trong suốt của hình chữ nhật được sử dụng cho lưới và vẽ các nét của chúng bằng màu xám. Chúng tôi tiếp tục bằng cách xác định hình chữ nhật, thiết lập lại giá trị điền để điền vào các vòng tròn màu đen và xác định các vòng tròn fives.

Võngà!

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

Bạn có thể thêm

strokeWidth(2); 

hoặc nhiều hơn để xem màu sắc của các nét tốt hơn.

(Đó là Code-Golf đầu tiên của tôi, tôi hy vọng tôi đã làm mọi thứ đúng.)

EDIT: Cảm ơn Kritixi Lithos! Đã xóa các dòng mới, thay đổi thành int f = 25 và được sử dụng -1 trong nền (float)


1
Golf đầu tiên tuyệt vời, và chào mừng bạn đến với PPCG!
MD XF

1
Bạn có thể lưu một số byte bằng cách xóa các dòng mới, thay đổi float f=25;thành int f=25;và bằng cách sử dụng background(-1)thay vìbackground(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}

Đây là đầu ra:

Đầu ra


3
@MDXF Nó cắt sát nhưng vì đây là những hình tròn và hình vuông hoàn hảo nên chúng chiếm tới 4/4 hình vuông, chỉ bằng khoảng 79% hình vuông.
Thuật sĩ lúa mì

Chết tiệt, nhìn vào thử thách và có cùng một ý tưởng;)
racer290

4

MATL , 74 69 68 64 62 byte

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

Hãy thử nó tại MATL Online! (Mất vài giây.)

Đầu ra từ trình thông dịch trực tuyến:

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


4

Đang xử lý, 134 byte

Lấy cảm hứng từ @Zep, đây là bộ xử lý một lớp (và cũng là môn đánh gôn đầu tiên của tôi):

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

Cảm ơn @Kritixi Lithos vì những lời khuyên tuyệt vời của anh ấy về việc cạo một vài byte!

tàu lượn trong chế biến


Vui lòng bao gồm một dòng Ngôn ngữ và Điểm .
Theraot

Chào mừng bạn đến với PPCG và câu trả lời đầu tiên tốt đẹp! Như đã nêu của Theraot, tất cả các bài nộp được yêu cầu phải có một tiêu đề có chứa ngôn ngữ và bytecount. Ngoài ra, bạn có thể đánh gôn một số byte bằng cách khai báo tất cả các biến trong vòng lặp for, như for(int i=0,x,y;...vậy để bạn có thể thả intvào phần thân của vòng lặp. Ngoài ra, fill(255);có thể trở thànhfill(-1);
Kritixi Lithos

Tôi chưa thử nghiệm điều này, nhưng tôi nghĩ bạn có thể bỏ qua +20trong khi đặt các giá trị của xy, để bạn có thể thay đổi rectthành rect(x+5,y+5,30,30);ellipsethành ellipse(x+20,y+20,23,23);và lưu hai 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}

kết quả


1
Đó là 1/0làm phân chia?
wizzwizz4

Xin lỗi, nhưng không, nó là một dấu phân cách đơn giản trong các cặp xytọa độ.
TonioElGringo

Bạn sẽ có thể lưu một vài byte bằng cách nhân rộng mọi thứ lên 2, để bạn .5trở nên công bằng 1.
Chris

@Chris Mặc định lưới dựng sẵn tạo các ô có độ dài đơn vị theo mặc định và phải mất thêm 8 byte (thêm [step=2]) để tạo lưới lớn hơn. Đơn giản hóa tọa độ cho bản vẽ vòng tròn sẽ không lưu đủ byte. (Bạn nhận được 157 byte nếu bạn làm điều đó)
TonioElGringo

@TonioElGringo À, đúng rồi. Dạy tôi nhận xét mà không cần kiểm tra trước;)
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, nằm trong khối "Khu vực sử dụng riêng") là mã ký tự cho biểu tượng vòng tròn. Đặt nó trong một chuỗi cũng sẽ hoạt động, nhưng vì nó được mã hóa thành 3 byte trong UTF-8, nên nó sẽ có cùng độ dài (và không hiển thị chính xác ở đây).

đánh dấu là khủng khiếp


1
Luôn luôn mới mẻ để xem câu trả lời cơ bản !
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");};

Phiên bản đầy đủ / được định dạng:

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

Ý tưởng rất đơn giản, chúng tôi tạo một đối tượng đồ họa từ hình ảnh và sử dụng nó để làm cho hình ảnh toàn màu trắng. Sau đó lặp qua từng ô vuông của hình vẽ hình chữ nhật giới hạn. Nếu đó là một trong những vị trí cho một dấu chấm, chúng ta cũng vẽ nó. Cuối cùng, chúng tôi lưu hình ảnh vào tập tin và để các cửa sổ quyết định cách mở nó, trong trường hợp của tôi, nó sẽ mở bằng Windows Photo Viewer.

Sử dụng một Processđể hiển thị hình ảnh và lưu vào tệp ngắn hơn rất nhiều so với việc tạo một biểu mẫu cửa sổ hoặc ứng dụng WPF vì tất cả các lớp khác nhau và thêm lông tơ cần thiết để tạo chúng.

Đầu ra:

Đầu ra


Tôi không nghĩ rằng bạn phải sử dụng Process.Start, ví dụ như Titus trả lời chỉ xuất hình ảnh, không mở nó
Jeremy Thompson

@JeremyThndry các quy tắc trạng thái bạn phải hiển thị hình ảnh
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);

Lưu vào tập tin; gọi trong trình duyệt. Nếu trình duyệt của bạn hiển thị vô nghĩa, hãy
chèn header("Content-Type:image-png");trước imagepng($i);.

đầu raCác chấm arent rất tròn; mà phạm vi do tỷ lệ nhỏ.

phá vỡ

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

Tôi nghĩ rằng 0x4c4b40đủ điều kiện là màu xám xấp xỉ. Nếu không, thêm bốn byte.


3

R 236 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()

Mã sửa đổi, chủ yếu dựa trên các nhận xét từ @ user2390246 đã lưu 77 byte. Rất nhiều đánh giá cao sự giúp đỡ.

Ngoài ra, muốn thêm một cuộc gọi vào giải pháp R ngắn hơn bởi @mschilli. Nó cho thấy một cách thanh lịch để giải quyết vấn đề mặc định đồ họa R.

Đầu ra

Đi đến một tên tập tin "r". Bỏ qua và mở rộng đã tiết kiệm cho tôi bốn byte. Nhưng sau đó tôi phải chỉnh sửa phần mở rộng tập tin trở lại thành "bmp" để tải nó lên. Vì vậy, có lẽ tôi không nên nhận tín dụng cho bốn byte đó.

Logo Hacker

Bình luận

Tôi tự nghĩ: "Đồ họa đó chẳng là gì ngoài một đồ thị đơn giản có năm dấu chấm. Nên là một vấn đề đơn giản để thực hiện bằng ngôn ngữ có khả năng đồ họa dữ liệu mạnh mẽ. Hãy thử nó trong R." Nhưng sau đó tôi đã phải chi tiêu cho 80% số byte chỉ hoạt động xung quanh các mặc định đồ họa của R.

Loại công cụ sai cho công việc ....

Tôi không thể tìm thấy một cách ít dài dòng hơn để đảm bảo kích thước và tỷ lệ khung hình của đồ họa hơn bằng cách gọi hàm tạo bmp và sau đó dev.off (). Sự kết hợp chiếm 25 byte. Nếu phiên R của bạn được thiết lập đúng, bạn có thể có được một đồ họa trông ít nhiều đúng mà không tốn các byte đó, nhưng nó không đáng tin cậy hoặc nhất quán.


1
Một vài gợi ý: hoàn toàn không xác định khung dữ liệu của bạn b, chỉ cần đặt hai vectơ không tên trực tiếp vào plothàm. Sử dụng c(l,3)cho xaxpyaxp. Bạn chỉ có thể sử dụng Fcho sai, không cần phải xác định nó. Và xác định một hàm mới a(x,...)gọi axis(x)nhưng có các giá trị mặc định cho nhãn, tck, v.v., do đó bạn không cần chỉ định tất cả hai lần.
dùng2390246

Bạn cũng có thể sử dụng axes=Fchứ không phải xaxt='n',yaxt='n'. Và bạn đã quên sử dụng .5khi xác định lmặc dù bạn đã sử dụng thủ thuật đó sau đó.
dùng2390246

1
Trên thực tế, điều gì sẽ xảy ra nếu bạn nhân đôi tất cả các giá trị tọa độ để loại bỏ .5hoàn toàn những thứ đáng tiếc đó?
dùng2390246

1
Nếu bạn đã gỡ bỏ .bmpphần mở rộng tập tin, bạn cũng có thể chỉ cần đặt tên cho tập tin r.
MD XF

@ user2390246 - Rất cám ơn những lời đề nghị. Lưu tích lũy theo thứ tự 70 byte. Đây là nỗ lực đầu tiên của tôi khi chơi golf ở R và bạn đã phát hiện ra rất nhiều lỗi của tyro mà tôi có lẽ nên thấy. Lần sau tôi sẽ biết rõ hơn.
CCB60

3

TI-BASIC, 218 140 137 byte

Lưu ý: số byte này là một bit tăng cao. Chương trình chỉ sử dụng 85 mã thông báo, nhưng được lưu trong 137 byte. Ngoài ra, nếu bạn đang sử dụng máy tính không màu, bạn có thể lưu thêm 4 mã thông báo vì bạn không phải chỉ định màu (mặc định là màu xanh), nhưng tôi không biết màn hình của chúng có đủ lớn không Thử thách này vì tôi không sở hữu.

prgmHACKER (138 byte, 86 mã thông báo):

{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

Để hiển thị đúng, chương trình này yêu cầu Xmin = Ymin = 0, Xmax = Ymax = 3, Xscl = Yscl = 1. dX cũng cần được đặt đúng, nhưng máy tính sẽ làm điều đó cho bạn khi bạn đặt bất kỳ biến cửa sổ nào khác. Tôi không thể thấy các biến này được sử dụng bao nhiêu dung lượng trong RAM.

Hơn nữa, các cài đặt định dạng phải là {RectGC, Tọa độ, GridLine, GridColor: MEDGRAY, Axes: OFF, Expr Offer, BorderColor: 1, Background: OFF} nhưng đây là các giá trị được bật và không tiêu tốn thêm dung lượng tùy thuộc vào cài đặt.


Để đánh xuống danh sách, bạn có thể diễn đạt những điều này {0,1,2,1,2}{0,0,0,2,1}sau đó thêm 0.5vào từng mục.
wizzwizz4

Đã thử điều đó, nhưng nó không thay đổi dung lượng RAM được sử dụng trong danh sách. Tuy nhiên, bạn đã cho tôi ý tưởng để loại bỏ các danh sách trong RAM và xác định chúng khi chương trình chạy, tiết kiệm 78 byte RAM.
latias1290

Đặt hàng trong những người chơi golf! Thay đổi L1L2để L₁L₂, vì bạn đã sử dụng chúng. Tôi nghĩ bạn có thể xóa }L₁(I)+.5→A=> .5+L₁(IL₂(I)+.5→B=> .5+L₂(I→B.
Zacharý

3

R, 119 114 111 byte

(Thans đến @JayCe vì đã tiết kiệm cho tôi 3 byte)

Không ngắn hơn giải pháp R khác , nhưng cách tiếp cận hoàn toàn khác:

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

Sử dụng một bố cục trong đó 4 ô đầu tiên là các ô trống và 5 ô khác là các ô có dấu chấm trong đó.

Tàu lượn


Tôi có thể thực hiện ngắn hơn giải pháp khác bằng cách sử dụng các đối số vị trí: tại đây
JayCe

@JayCe quả thật, cảm ơn!
plannapus

3

VBA Excel, 180 byte

Hàm cửa sổ tức thời VBE ẩn danh không nhận đầu vào và đầu ra cho đối tượng trang tính mặc định ( 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

Phiên bản đã bình luận

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

Đầu ra

Logo Hacker

-6 byte để sử dụng [{21,32,13,23,33}]hơnSplit("21 32 13 23 33")

-2 byte để sử dụng Mid(s,2)hơnRight(s,1)

-3 byte để sử dụng (s\10)hơnLeft(s,1)


2

Octave 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

hoặc là

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

cả hai giải pháp là 103 byte.


2
Tôi tin rằng các chấm phải có màu đen
TheLethalCoder

ah, thật thú vị, matlab diễn giải một vô hướng như một điểm, trái ngược với việc phát sóng nó. vì vậy thay vì line([x1,x2],y)bạn phải làmline([x1,x2],[y,y])
Tasos Papastylianou

2

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

Tôi đã vẽ hình dạng hoàn toàn bằng Quartz cho một thiết bị Apple iOS. Thật không may, đây không phải là một ngôn ngữ chánh niệm có kích thước đặc biệt nên kết quả khá lớn, nhưng nó nhỏ như tôi có thể có được.

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

Một phiên bản dễ đọc hơn cho bất cứ ai quan tâm:

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

Đây là đầu ra được tạo ra trong Trình mô phỏng iOS: Đầu ra



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>

Nhờ trình phân tích cú pháp HTML nhẹ nhàng, xmlns="http://www.w3.org/2000/svg"khai báo có thể được bỏ qua, cũng như các trích dẫn thuộc tính và thẻ đóng. Phiên bản này giải quyết một số vấn đề về các giải pháp HTML khác:

  • Một "dấu chấm" được đảm bảo lấp đầy ít nhất 40% ô của nó (§1)
  • Nó không sử dụng đồ họa bên ngoài, ví dụ glyphs phông chữ (§2, §6)
  • Lưới hoàn toàn vuông (§5)

Chỉnh sửa Đã tắt 8 byte bằng cách khai thác thực tế rằng các đường dẫn con không cần phải đóng để được điền .

Chỉnh sửa Theo ngữ pháp svg , không cần thiết phải tách các chữ số không có dấu phẩy ( .5,.5). Tôi cũng từ bỏ điền rõ ràng, để tôi có thể thay đổi hướng vẽ của một dòng từ tiêu cực sang tích cực, tiết kiệm một dấu gạch ngang. Và cuối cùng, tôi đã điều chỉnh số lượng để không bao gồm một dòng mới, xin lỗi vì sai lầm tân binh này.

Chỉnh sửa Học từ một câu trả lời khác trên codegolf, tôi đã thay thế trận chung kết 9 />bằng 9>. Điều này hoạt động tốt trong tất cả các trình duyệt được thử nghiệm.


2

Python 3 + PyGame, 238 byte

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

Các hằng số dường như tùy ý là từ tôi cố gắng làm cho hình ảnh càng lớn càng tốt mà không phải hy sinh byte.

Với các ký tự không in, 229 Byte

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

Tôi đã thay thế các danh sách bằng byte bằng chữ, giúp lưu một loạt các ký tự, nhưng các ký tự không in không thể được hiển thị đúng ở đây. Tôi đã thay thế các ký tự không in bằng các tương đương đồ họa của chúng U + 2400-U + 2421 cho mục đích hiển thị.

ảnh chụp màn hình

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.