显示黑客徽标


57

您可能听说过“ Hacker徽标”,也称为“ Hacker标志”。看起来像这样:

黑客徽标

这是来自称为生命游戏的数学模拟的一种模式。滑翔机是移动最简单的生活模式,也是所有生活模式中最容易识别的。

挑战

挑战非常简单:显示黑客徽标。定义为:

  • 具有边框,白色背景和灰色网格线的3x3网格。
  • 以GoL滑翔机模式排列的五个黑点。
  • 没有其他的。

规则

  • 黑点必须填写40% - 80%的其个人网箱。
  • 您将使用图形输出显示标志,但不显示ASCII文字
  • 输出必须至少为30x30像素
  • 输出只能具有灰色,黑色和白色
  • 网格中的每个网格框都将具有相同的大小。网格将是规则的3x3正方形
  • 您不得从互联网或文件系统中提取徽标。
  • 您的程序将在空白屏幕/窗口上显示徽标。如果终止,则必须正常进行。
  • 注意,“点”不一定表示“圆圈”。“点”是居中于具有一个表面的网格框中间的单个几何形状。例如,一个圆形或正方形将被视为一个点,而两个三角形或一个棋盘将不被视为一个点。

赢家

因为这是,所以每种语言中最短的答案将获胜!

请在答案中包括程序输出的屏幕截图。


21
我不知道这叫黑客徽标。我在某些网站上将其用作头像,想必这使我成为黑客。
马克·托马斯

15
@MarkThomas that or GoL nerd xD
Stephen的

3
@DavidConrad“清除屏幕”表示如果您使用的是具有内置图形的IDE /界面,则无法在屏幕上与现有文本一起显示它。是的,您可以在一个窗口中显示它。
MD XF

3
是否允许由于抗锯齿而使用多种灰色阴影(以及相关的异色)?
伊恩·米勒

3
我们必须显示输出,还是可以将其返回或保存到文件中?
TheLethalCoder

Answers:


27

Mathematica,62个字节

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

在此处输入图片说明

Mathematica,71个字节

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


在此处输入图片说明


2
我认为您可以通过将纯函数Graphics@Disk[]用作参数来节省字节。
CalculatorFeline

如果您是说此网格[{{,#,},{,,#},{#,#,#}},帧->全部,帧样式->灰色]&@ Graphics @ Disk [],则为72个字节
J42161217

3
一个69字节的变体:Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]。●是一个两字节的unicode字符。由于不一定严格要求是圆圈,因此某些ASCII字符可以满足40%-80%的要求。
伊恩·米勒

实际上我达到了满足所有要求的62个字节
J42161217,2015年

我认为您需要Rasterize满足或类似的要求,graphical output but no ASCII art因为符号仍然可以在网格中作为Unicode字符进行选择。
伊恩·米勒

33

CSS + HTML,56 + 84 = 140字节 52 + 84 = 136字节

通过合并注释中的建议节省了4个字节。

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>

它使用2字节长的UTF-8字符,并利用HTML语法的优美性。


3
不错; 使用起来非常聪明
MD XF

3
很酷。我认为您可以使用来节省一个字节line-height:.4;,而省略结尾可以节省另一个费用}
ETHproductions's

5
•是否不将•视为违反挑战规则的ASCII艺术?
Hankrecords

2
@StephenS听起来确实是徒劳的区别,再加上我不认为禁止ASCII艺术,而是允许使用Unicode艺术。至于OP说它很聪明,我的评论实际上是针对OP的,我忘了输入@。
Hankrecords

4
我唯一的代码高尔夫答案永远理解,至少我这么认为。
Uwe Keim

25

GLSL(片段着色器), 278 235 256字节

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

在此处输入图片说明

实际操作中查看它:http : //glslsandbox.com/e#40717.2


1
嗯...边框是否一直围绕图形?另外,您确定圆圈仅是网格框的80%吗?
MD XF

12
接触其包围的正方形的所有四个边的圆占正方形的π/ 4的比例,约占78.5%。
格雷格·马丁

我减少了代码的大小,以222个字节: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.);}
的Gabor菲克特

21

Python 2中 169  140个字节

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)

实际尺寸61 x 61,绘制在300 x 400的更大画布中:

真实大小

显示像素网格:

像素网格版本

无论考虑使用19 x 19的白色填充(144.4-288.8)还是使用21 x 21的两个边框(176.4-352.8),这些点都使用40%-80%范围内的177个像素。

注意:绘图完成后,程序将终止并关闭画布窗口,以允许手动关闭窗口添加该行done()

turtle是为介绍性图形编程开发的Python软件包。笔从x,y=0,0300 x 400像素的画布(默认情况下)的中间开始,up抬起笔,goto移动笔,将笔shape的形状设置为命名的形状("square"是预定义的形状,默认像素宽度为21 ),color设置颜色,其中两个参数设置笔触(默认宽度为1)并填充;使用(r,g,b)tuple选项保存一个字节"white",然后[1,1,1]使用列表乘法替换一个字节[1]*3。最后dot绘制一个具有给定宽度的点(以像素和颜色为单位)。点的默认宽度值太小而无法合格,9因此我将其设为美观且合格15。点的颜色可能是"black"但是的未打包(r,g,b)元组0,0,0短了两个字节。

笔的末端必须远离任何点,否则灰/白笔会隐藏该点。

使用div(/)和mod(%i始于8i初始化为,9但在while循环开始时递减)并遍历到,遍历网格,向下使用02,1,0将的-1,0,1使用结果偏移并使用(1-...)缩放至网格大小20一个因素(注意,20-i/3*20实际上是小于一个字节20*(1-i/3),这同样适用于%)。这样会产生顺序[左下,左中,左上,左下,中右,中右,上中,右下,右中,右上],并且需要对进行“ hasDot”评估[1,0,0,1,0,1,1,1,0],它是302二进制的,因此可以通过检查两个分量的ith次幂来访问302使用按位-和302&2**i


很好的方法,比我想象的要短得多turtle
桅杆

14

Applesoft BASIC479个 476 516 515 483 482字节

-32通过使用不可读的变量名:P
-1,因为Apple决定使用魔术,让我使用隐式/不存在的GOTO

这是我自己的(非常不错的)程序,用于不使用圆圈的输出示例:

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

输出:


1
我不确定这是否有效,因为第1行(长度超过239个字符)无法通过常规方法(至少在// e上)输入。
insert_name_here

1
@insert_name_here您必须将其保存到磁盘上的文件中。
MD XF

14

IA-32机器代码,81 80字节

十六进制转储:

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

这个fastcall函数称为doitPGM格式,在提供的缓冲区中返回图像。用法:

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

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

输出:

黑客的徽标

我使用256x256分辨率,因为它很酷,它使我可以将像素的索引ecx自动分成yin chxin的坐标cl。同样,PGM文件格式要求图像标题中的数字为255。

内部正方形为54x54(按面积计为单元的41%)。

源代码(可以由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;

单元格模式

0 1 0
0 0 1
1 1 1

可以用7位的“优化”位图表示。

这些位由表达式索引y * 2 + x,其中(x,y)单元格的位置。此表达式为2对单元格赋予相同的索引。幸运的巧合是那里的位值相同。


1
这很酷,但我42*42/85/85只赚24.4%。
乔纳森·艾伦,

@JonathanAllan:单元格的白色部分只有84x84,但是是的,一个42x42的盒子只占84x84盒子的四分之一。
尼克·马特奥

我已要求进行澄清(如果确实需要,我希望它不太难更新)。
乔纳森·艾伦,

裁决在-它的范围...
Jonathan Allan

我将黑点从42扩大到54。这是最小的点,使其面积占40%,而且它们已经开始变得丑陋了……
anatolyg

14

HTML&CSS,155个字节

事实证明,HTML 确实可以宽恕语法错误。

@Octopus 节省了1个字节 · @Downgoat 节省了1个字节 · @StephenS节省了2个字节

@Ryan节省2字节 · @styfle 节省3字节 · @Ferrybig节省4字节

@SteveBennett节省了13个字节

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
请指出在哪种浏览器(和哪个版本)上可以使用–在Opera 45中不能使用。
PaŭloEbermann

2
在Windows上使用Chrome 58.0.3029.110(64位)时,该代码段对我不起作用。它可以在哪个Chrome版本上运行?
Jonathan Allan

这不会在macOS Sierra(10.12.4)上显示带有Safari 10.1的圆圈。
R. Kap

Chromium 55.0.2883.87(64位)也不会显示点。
Dylan Meeus

在Android版Chrome上也无法看到这些点(58.0.3029.83)
Spikatrix

11

R(130个 119 113字节)

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

在此处输入图片说明


您可以使用axes=F替换xaxt="n",yaxt="n"。如果将所有坐标值加倍,则会节省4个净字节(但不能使用1:3,2:3技巧)。
user2390246'6

@ user2390246:建议。我没有太多时间打高尔夫球了。我相信还有更多可能的改进。我必须添加,;box()因为axes=F也删除了框架。此外,作为axes一个plot参数,而不是转嫁到par通过...xaxt/ yaxt,它甚至不需要被完全阐明。
mschilli

1
您可以通过(1)替换c(1,7)为变量(l=c(1,7))来减少7个字节;(2)替换annan;(3)替换[xy]li[xy]li;(4)删除以下第二个冗余参数gridgrid(3,lt=1)。实际上,我已经在(正在审查中)对此进行了编辑。
康拉德·鲁道夫


@Matt Hm。如果它应用根本不同的优化,而不是仅仅实施直接的改进,这似乎是有道理的。很公平。
康拉德·鲁道夫

9

Python 2.7版,214个 311 309字节

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

这是我在代码高尔夫方面的首次尝试,因此,我相信可以对此进行改进。我本来想不建立限制,但是看来matplotlib无法检测到我在哪里画了圈。没有设置xlim()和ylim(),它仅显示底部的两个圆圈。

输出:

编辑

编辑:修复了边框的颜色并删除了刻度号。我必须说matplotlib的用词非常密集,并且对更改轴的颜色不太友好。

@DJMcMayhem减少了3个字节

编辑:通过将我的刻度设置为set_ticks函数中的元组来取消两个字节。


抱歉,图表上的数字是不允许的。另外,边框是灰色的吗?
MD XF

3
欢迎光临本站!这是一个不错的第一答案。:)
DJMcMayhem

1
我看到一些小型高尔夫球场:1)您可以将5和6行合并以删除一个空格和换行符(-2字节)2)如果设置xy_ticks和xy_lim的顺序无关紧要,则可以执行类似的操作for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);"。(尽管我没有对此进行测试,所以我并不乐观)
DJMcMayhem

8

Bash + ImageMagick,233226个字符

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:

样本输出:

用Bash和ImageMagick绘制的滑翔机

Bash + ImageMagick,215个字符

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:

问题拥有者尚未回答抗锯齿问题,而其他一些解决方案也通过抗锯齿添加了其他灰色阴影,因此目前看来,这种较短的别名也是可以接受的。

样本输出:

使用Bash和ImageMagick绘制的滑翔机-具有抗锯齿


8

红宝石,144个 166 164 148 144字节

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

输出:

输出

编辑:现在具有灰色网格线。


3
我可以在这里看到一些打高尔夫球的机会。对于初学者而言,d=d+1其格式较短(d+=1),==1在此等效于>0。还请考虑将c设置为Fixnum而不是数组时会发生什么:-)
RJHunter

1
@RJHunter我错过了一些低挂的水果!我想到了用c创建位域之类的东西,但是无法提出一种实际上更短的实现方式。
马克·托马斯

2
也许令人惊讶的是,Ruby实际上内置了一些位域支持!您可以访问整数,[]就好像它是一个位数组(只读,但是在这里可以)。
RJHunter

@RJHunter谢谢!我要做的就是将c更改为适当的数字。减少了很多。
马克·托马斯

您可以更改g=[2,13,24]g=2,13,24并替换eachmap
乔丹

8

PNG,105100字节

PNG图像    (即此图像文件)

考虑到允许使用 HTML和其他非编程语言,我很想知道我可以打多少个普通的浏览器可显示图像,作为基线比较。使用开源工具optipng-o7 -zm1-9 -strip all)和pngwolf压缩结果。我还尝试了zopflipng,但结果更大。其他封闭源压缩工具可能还可以节省几个字节。

base64中的图像数据:

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

编辑我使点接触单元的顶部和底部,以使像素图案具有更大的重复性,从而提高了压缩率。但请放心,一个点仍仅填充其单元格的(7 * 9)/(9 * 9)≈78%。


非标准PNG,88字节

@anatolyg所指出的,通过删除IEND块(12个字节),存在一些打高尔夫球的潜力。从技术上讲,标准要求 IEND 。但是,每个PNG块都包含其自己的大小和校验和信息。因此,不一定绝对要有结束标记。实际上,我测试过的所有浏览器都可以毫无问题地显示图像。

不幸的是(或幸运的是)此非标准图像被imgur拒绝,因此我实际上无法上传它。这是base64编码:

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


我不确定这是否有效。PNG不是一种编程语言。
DJMcMayhem

4
谢谢MD XF。@DJMcMayhem也不是HTML。但是考虑到图像的小尺寸,我将其作为有趣的现成条目提交。
Meyer


4
另外,欢迎使用PPCG @Meyer!:)
Martin Ender

1
您可以在文件末尾删除几个字节,然后保留图像。但是可能取决于观看者;我想大多数观众都不需要像这样的末端块。
anatolyg

7

八度127 124字节

由于路易斯,删除了3个字节。grid就足够了(而不是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

输出(保存后):

请注意,输出在绘图窗口中显示灰色网格线。保存时它们会变黑(出于某种原因)。

在此处输入图片说明

好吧,那很长很乱!必须经过大量修改才能使其符合规格。

解释一下,希望打高尔夫球...


这看起来似乎不是很方形,但是由于OP给出了类似输出的答案,所以我认为很好
。– L3viathan

2
我认为高/宽比取决于平台。添加'square'使其在所有平台上均显示为正方形。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's

7

处理中,212个 198字节

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

基本上,我们使用简单的处理来绘制白色背景,然后设置用于网格的矩形的透明度并以灰色绘制其笔触。我们继续定义矩形,再次设置填充值以将圆填充为黑色并定义5个圆。

瞧!

在此处输入图片说明

您可以添加

strokeWidth(2); 

或更多以更好地查看笔触的颜色。

(这是我的第一个Code-Golf,我希望一切都做对了。)

编辑:感谢Kritixi Lithos!删除换行符,将其更改为int f = 25并在background(float)中使用-1


1
伟大的第一场高尔夫,欢迎来到PPCG!
MD XF

1
您可以通过删除新行,改变了节省一些字节float f=25;int f=25;,并通过使用background(-1)替代background(255);
Kritixi LITHOS

6

Tikz,193个 175 170字节

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

这是输出:

输出量


3
@MDXF它切得很近,但是由于它们是完美的圆形和正方形,它们构成正方形的π/ 4,大约是正方形的79%。
小麦巫师

该死的,看着挑战,并有完全相同的想法;)
racer290


4

处理中,134字节

受到@Zep的启发,这是我的“加工单线”(也是我的第一个代码高尔夫球):

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

感谢@Kritixi Lithos提出的关于节省几个字节的精巧技巧!

加工中的滑翔机



欢迎使用PPCG,并且是一个不错的第一答案!如Theraot所述,所有提交都必须具有包含语言和字节数的标头。同样,您可以通过声明for循环中的所有变量来获取一些字节,例如for(int i=0,x,y;...这样,您就可以将intin放入循环体中。此外,fill(255);可以成为公正fill(-1);
Kritixi Lithos

我尚未对此进行测试,但我认为您可以+20在设置xand 的值时放下while y,以便可以更改rectto rect(x+5,y+5,30,30);和the ellipseto ellipse(x+20,y+20,23,23);并保存两个字节。
Kritixi Lithos

4

LaTeX + Tikz,155个字节

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

结果


1
那是1/0分裂吗?
wizzwizz4

抱歉,但不是,它是一对xy坐标中的简单分隔符。
TonioElGringo

通过将所有内容按比例放大2,您应该能够节省一些字节,从而使您.5的行为变得公正1
克里斯(Chris)

@Chris默认情况下,内置网格会生成单位长度的单元,[step=2]要生成更大的网格,它大约需要8个字节(添加)。简化圆图的坐标不会节省足够的字节。(如果您这样做,则将获得157个字节)
TonioElGringo

@TonioElGringo啊,是的。教我先发表评论而不先对其进行测试;)
克里斯(Chris

4

SmileBASIC,125个字节

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,在“专用区域”中)是圆形符号的字符代码。将其放在字符串中也可以,但是由于它在UTF-8中编码为3个字节,因此长度相同(此处未正确显示)。

降价太糟糕了


1
看到基本答案总是令人耳目一新!
泰勒·斯科特

3

C#,333字节

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

完整/格式化版本:

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

想法很简单,我们从图像创建一个图形对象,并使用该对象使图像变为全白色。然后在绘制边界矩形的图像的每个正方形上循环。如果它是一个点的位置之一,我们也将其绘制出来。最后,我们将图像保存到文件中,然后由Windows决定如何打开它,在本例中,它是使用Windows Photo Viewer打开的。

使用a Process显示图像并将其保存到文件比创建Windows窗体或WPF应用要短得多,这是因为创建它们需要使用所有不同的类和额外的绒毛。

输出:

输出量


我认为您不必使用Process.Start,例如Titus答案仅输出图像,而不打开图像
Jeremy Thompson

@JeremyThompson规则指出您必须显示图像
TheLethalCoder

3

PHP,221 + 2字节

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

保存到文件;在浏览器中调用。如果您的浏览器显示乱码,请
header("Content-Type:image-png");之前插入imagepng($i);

输出点不是很圆;那是由于比例很小。

分解

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

我认为这0x4c4b40相当于近似灰色。如果不是,则添加四个字节。


3

R 313236字节

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

修改后的代码主要基于@ user2390246的注释,节省了77个字节。非常感谢您的帮助。

另外,要通过@mschilli向较短的R解决方案添加标注。它显示了一种解决R图形默认问题的好方法。

输出量

转到文件名“ r”。省略和扩展节省了我四个字节。但是后来我不得不将文件扩展名重新编辑为“ bmp”,以使其上传。因此,也许我不应该为这四个字节而功劳。

黑客徽标

评论

我对自己想:“该图形不过是一个带有五个点的简单图形。以具有强大数据图形功能的语言来实现应该是一件简单的事情。让我们在R中进行尝试。” 但是后来我不得不花大约80%的字节来处理R的图形默认值。

Kinda工作的错误工具。

与调用bmp构造函数然后调用dev.off()相比,我无法找到一种更简单的方法来保证图形的大小和长宽比。组合占25个字节。如果您正确地设置了R会话,则可能会得到一个看起来或多或少正确的图形,而无需花费这些字节,但这是不可靠或不一致的。


1
一些建议:根本不定义数据框架b,只需将两个未命名的向量直接放入plot函数中即可。使用c(l,3)xaxpyaxp。您可以只使用Ffalse,而无需对其进行定义。并定义一个新函数a(x,...),该函数调用axis(x)但具有标签,tck等的默认值,因此您无需将它们全部指定两次。
user2390246'6

您也可以使用axes=F而不是xaxt='n',yaxt='n'。而且您忘记了.5在定义l时使用的技巧,尽管以后确实使用过该技巧。
user2390246'6

1
实际上,如果将所有坐标值加倍以.5完全消除那些讨厌的东西怎么办?
user2390246'6

1
如果您已经要删除.bmp文件扩展名,则最好将其命名为r
MD XF

@ user2390246-非常感谢您的建议。累计保存约70个字节。这是我在R中打高尔夫球的第一次尝试,您可能发现了很多tyro的错误,我可能应该已经发现了。下次我会知道的。
CCB60

3

TI-BASIC,218个 140 137字节

注意:此字节计数有点过高。该程序仅使用85个令牌,但已保存为137个字节。另外,如果您使用的是非彩色计算器,则可以保存另外4个标记,因为您不必指定颜色(默认情况下为蓝色),但是我不知道它们的屏幕是否足够大这个挑战,因为我没有一个。

prgmHACKER(138字节,86个令牌):

{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

为了正确显示,该程序要求Xmin = Ymin = 0,Xmax = Ymax = 3,Xscl = Yscl =1。dX也需要正确设置,但是当您设置任何其他窗口变量时,计算器会为您执行此操作。我看不到这些变量在RAM中使用了多少空间。

此外,格式设置应为{RectGC,CoordOff,GridLine,GridColor:MEDGRAY,Axes:OFF,ExprOff,BorderColor:1,Background:OFF},但这些值是已切换值,根据设置不会占用任何额外空间。


要浏览列表,您可以将它们表示为{0,1,2,1,2}{0,0,0,2,1}然后添加0.5到每个项目中。
wizzwizz4

进行了尝试,但是并没有改变列表使用的RAM数量。但是,您给我的想法是摆脱RAM中的列表,并在程序运行时对其进行定义,从而在RAM中节省78个字节。
latias1290

订购高尔夫人士!将L1and 更改L2L₁and L₂,因为您已经使用它们了。我认为您可以删除}L₁(I)+.5→A=> .5+L₁(IL₂(I)+.5→B=> .5+L₂(I→B
扎卡里

3

R,119个 114 111字节

(感谢@JayCe为我节省了3个字节)

不短于其他R解决方案,而是一种完全不同的方法:

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

使用一种布局,其中前四个图是空单元格,其他五个图是其中的点。

滑翔机


:使用位置参数可我比其他解决方案更短这里
JayCe

的确,@ JayCe,谢谢!
普纳纳普斯

3

Excel VBA,180字节

匿名的VBE立即窗口函数,不输入任何内容并输出到默认工作表对象(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

评论版本

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

输出量

黑客徽标

用于使用-6字节[{21,32,13,23,33}]以上Split("21 32 13 23 33")

用于使用-2字节Mid(s,2)以上Right(s,1)

用于使用-3字节(s\10)以上Left(s,1)


2

八度107 94103字节

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

要么

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

两种解决方案均为103字节。


2
我相信这些点必须是黑色的
TheLethalCoder

嗯,有趣的是,matlab将标量解释为一个点,而不是广播它。所以不是line([x1,x2],y)您要做line([x1,x2],[y,y])
Tasos Papastylianou

2

Apple Swift(iOS-CoreGraphics / QuartzCore)-832字节

我为Apple iOS设备完全使用Quartz绘制了形状。不幸的是,这不是一门特别注意大小的语言,因此结果相当大,但是我所能得到的却很小。

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

感兴趣的人可以阅读的版本:

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

这是iOS模拟器中产生的输出: 输出量



2

SVG + HTML,146个 138 135 133字节的

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

由于宽大的HTML解析器,xmlns="http://www.w3.org/2000/svg"可以省略声明以及属性引号和结束标记。此版本解决了其他HTML解决方案的一些问题:

  • 保证“点”填充其单元格的至少40%(第1节)
  • 它不使用外部图形,例如字形(§2,§6)
  • 网格是完美的正方形(第5节)

Edit(编辑)通过利用一个事实,即子路径并不需要关闭中要为了刮了8个字节填充

编辑根据svg语法,没有必要用逗号(.5,.5)分隔非数字。我还放弃了显式填充,以便可以将一条线的绘制方向从负更改为正,从而节省了破折号。最后,我将计数调整为不包含尾随换行符,对于这个菜鸟错误,我们深表歉意。

编辑从学习另一种答案上codegolf,我已经取代了最终9 />9>。在所有经过测试的浏览器中都可以正常工作。


2

Python 3 + PyGame,238字节

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

我看似随意的常量试图在不牺牲字节的情况下使图像尽可能大。

带有非打印字符,229字节

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

我用字节文字替换了列表,这节省了很多字符,但是非打印字符在此处无法正确显示。为了显示目的,我用图形等效的U + 2400-U + 2421代替了非打印字符。

屏幕截图

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.