ハッカーのロゴを表示する


57

「ハッカーエンブレム」とも呼ばれる「ハッカーロゴ」を聞いたことがあるかもしれません。次のようになります。

ハッカーのロゴ

これは、Game of Lifeと呼ばれる数学的シミュレーションのパターンです。グライダーは、移動する最も単純なライフパターンであり、すべてのライフパターンの中で最も瞬時に認識できます。

挑戦

課題は非常に簡単です。ハッカーのロゴを表示します。これは次のように定義されます:

  • 境界線、白い背景、灰色のグリッド線がある3x3グリッド。
  • GoLグライダーパターンに配置された5つの黒いドット。
  • 他に何もありません。

ルール

  • 黒いドットが記入しなければならない40% - 80% 、個々のグリッドボックスのを。
  • エンブレムをグラフィック出力で表示しますが、ASCIIアートは表示しません
  • 出力は少なくとも30x30ピクセルでなければなりません。
  • 出力の色は、グレー、黒、白のみでなければなりません。
  • グリッド内の各グリッドボックスは同じサイズになります。グリッドは、通常の3x3の正方形になります。
  • インターネットまたはファイルシステムからロゴを取得することはできません。
  • プログラムは、空の画面/ウィンドウにロゴを表示します。終了する場合は、正常に終了する必要があります。
  • 「ドット」は必ずしも「円」を意味しないことに注意してください。「ドット」は、グリッドボックスの中央を中心とする1つの幾何学的図形で、1つの表面があります。たとえば、円または正方形はドットとして適格ですが、2つの三角形またはチェッカーボードは適格ではありません。

勝者

これはであるため、各言語の最短回答が勝ちます!

回答にプログラムの出力のスクリーンショットを含めてください。


21
これがハッカーのロゴと呼ばれるとは思いもしませんでした。私はいくつかのサイトで私のアバターとしてそれを使用しました、それが私をハッカーにしていると思います。
マークトーマス

15
@MarkThomas thatまたはGoLオタクxD
スティーブン

3
@DavidConrad "画面をクリアする"とは、組み込みのグラフィックスを備えたIDE /インターフェイスを使用している場合、既存のテキストを画面に表示できないことを意味します。はい、ウィンドウに表示できます。
MD XF

3
アンチエイリアシングによるグレーの複数のシェード(および関連するオフカラー)は許可されていますか?
イアンミラー

3
出力を表示する必要がありますか、それを返すかファイルに保存できますか?
TheLethalCoder

回答:


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

このGrid [{{、#、}、{,,#}、{#、#、#}​​}、Frame-> All、FrameStyle-> Gray]&@ Graphics @ Disk []の場合、72バイトです
J42161217

3
これに関する69バイトのバリアントRasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]。●は2バイトのUnicode文字です。厳密に円である必要はないので、おそらく40%-80%の要件を満たすためにASCII文字が機能する可能性があります。
イアンミラー

実際、すべての要件を満たす62バイトになりました
-J42161217

シンボルはまだUnicode文字としてグリッドで選択可能であるRasterizeため、要件を満たすために必要または類似していると思いますgraphical output but no ASCII art
イアンミラー

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

5
使用していない•ASCIIアートとしてカウントされますが、これはチャレンジルールに反していますか?
ハンクレコード

2
@StephenS本当に無益な区別のように聞こえますが、加えて、ASCIIアートを禁止するのではなく、ユニコードアートを許可する意味はありません。OPが巧妙だと言っているように、私のコメントは実際にはOPに向けられていたので、@を入れるのを忘れていました。
ハンクレコード

4
理解した唯一のコードゴルフの答えは、少なくともそう信じています。
ウーヴェ・ケイム

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辺すべてに触れる円は、正方形の割合π/ 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.);}
GáborFekete

21

パイソン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)

300 x 400の非常に大きなキャンバス内にプロットされた実際のサイズ、61 x 61:

実寸

ピクセルグリッドの表示:

ピクセルグリッドバージョン

19 x 19の白い塗りつぶし(144.4-288.8)または両方の境界を含む21 x 21(176.4-352.8)を考慮しても、ドットは40%-80%の範囲内で177ピクセルを使用します。

注:プログラムは、描画が終了するとすぐにキャンバスウィンドウを閉じて閉じますdone()。手動でウィンドウを閉じるには、行を追加します。

turtleは、グラフィカルプログラミング入門用に開発されたPythonパッケージです。ペンx,y=0,0は、300 x 400ピクセルのキャンバス(デフォルト)の中央で開始しup、ペンを持ち上げ、ペンをgoto移動し、ペンshapeの形状を名前付きの形状に"square"設定します(デフォルトのピクセル幅が21の事前定義された形状です) )、color色を設定します。2つのパラメーターはストローク(デフォルトでは幅1)と塗りつぶしを設定します。リスト乗算を使用(r,g,b)して置き換えるタプルオプションを使用して、バイトが保存されます。最後に、ピクセルと色で指定された幅のドットを描画します。ドットのデフォルトの幅の値は小さすぎて適格ではないため、美的で適格なものにしました。ドットの色は"white"[1,1,1][1]*3dot915"black"しかし、のアンパックされた(r,g,b)タプルは0,0,02バイト短くなります。

ペンは最後にあるドットから離れる必要があります。そうしないと、グレー/白のペンがドットを非表示にします。

グリッドは、DIV(使用してトラバースされる/)およびMOD(%の)iから始まる8iに初期化される9が、の冒頭にデクリメントwhileループ)およびまでの作業0の結果をオフセット2,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バイナリであるため、iの2つのコンポーネントのth乗を調べることでアクセスできます。302ビット単位のANDを使用し302&2**iます。


非常に良いアプローチと私が使用可能であると思ったよりずっと短いturtle
マスト

14

Applesoft BASIC479 476 516 515 483 482バイト

-32読み取り不可能な変数名を使用することにより:P
-1

これは、円を使用しない出力の例のための、私自身の(非常に勝てる)プログラムです。

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バイト

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

これは、指定されたバッファにPGM形式で画像を返すfastcallと呼ばれる関数doitです。使用法:

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

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

出力:

ハッカーのロゴ

256x256の解像度を使用したのは、ピクセルのインデックスをin とinの座標に自動的に分割できるのでクールだからです。また、PGMファイル形式では、画像ヘッダーに255という数値が必要です。ecxychxcl

内側の正方形は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ボックスの1/4です。
ニックマッテオ

私は明確化を求めました(もしそれが地域に行くなら、更新するのがそれほど難しくないことを望みます)
ジョナサンアラン

判決はである-それは地域...だ
ジョナサン・アラン

黒い点を42から54に拡大しました。これは最小で、面積で40%になり、すでにandい状態になり始めています
...-アナトリグ

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
記入してくださいどのブラウザ上で動作する(そしてどのバージョン) -それはオペラ45では動作しません
サンパウロEbermann

2
WindowsでChrome 58.0.3029.110(64ビット)を使用している場合、スニペットは機能しません。どのChromeバージョンで動作しますか?
ジョナサンアラン

これは、macOS Sierra(10.12.4)上のSafari 10.1の円を表示しません。
R.キャップ

Chromium 55.0.2883.87(64ビット)でもドットは表示されません。
ディランミース

Chrome for Androidでもドットが表示されない(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"。すべての座標値を2倍にすると、4ネットバイト節約できます(ただし、この1:3,2:3トリックは使用できません)。
user2390246

@ user2390246:提案のためのthx。これをゴルフする時間はあまりありませんでした。私は、より多くの可能な改善があると確信しています。フレームも削除するので、追加する必要;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)grid:への2番目の冗長な引数を削除しますgrid(3,lt=1)。実際、私はこれを編集する自由を取りました(レビュー中)。
コンラッドルドルフ

1
@KonradRudolph関連するようです:codegolf.meta.stackexchange.com/questions/1615/…-
マット

@Matt Hm。単純な改善を単に実装するのではなく、根本的に異なる最適化を適用する場合、これは理にかなっているようです。けっこうだ。
コンラッドルドルフ

9

パイソン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()を設定しないと、下の2つの円のみが表示されます。

出力:

編集

編集:境界線の色を修正し、目盛り番号を削除しました。matplotlibは非常に緻密に表現されており、軸の色の変更にあまりフレンドリーではないと言わなければなりません。

@DJMcMayhemのおかげで3バイト削られました

編集:set_ticks関数内でタプルとして私のティックを設定することにより、2バイトをオフにします。


申し訳ありませんが、グラフ上の数字は使用できません。また、境界線は灰色ですか?
MD XF

3
サイトへようこそ!これはいい最初の答えです。:)
DJMcMayhem

1
私が見るいくつかのマイナーなgolfs:1)あなたは1つのスペースや改行を削除するためにライン5と6に参加できます(-2バイト)セットxy_ticksとxy_limの順番は関係ない場合2)、あなたのような何かを行うことができますfor s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);"。(しかし、私はそれをテストしていないので、私はポジティブではありません)
DJMcMayhem

8

Bash + ImageMagick、233 226文字

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ではありません。しかし、画像のサイズが小さいことを考慮して、私はそれを興味深い外部エントリとして提出しました。
マイヤー


4
また、PPCG、@ Meyerへようこそ!:)
マーティンエンダー

1
ファイルの最後の数バイトを削除しても、イメージを保持できます。ただし、視聴者に依存する場合があります。ほとんどの視聴者は、エンドチャンクの存在を必要としないと思います。
アナトリグ

7

オクターブ127 124バイト

Luisのおかげで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が同様の出力で答えを出したので、私はそれがうまくいくと思います。
L3via17年

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
スティーヴィーグリフィン

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に変更し、バックグラウンド(フロート)で-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に、数バイトを削る際の素晴らしいヒントをありがとう!

処理中のグライダー


言語とスコアの行を含めてください。
-Theraot

PPCGへようこそ。Theraotが述べているように、すべての提出には、言語とバイトカウントを含むヘッダーが必要です。また、ループの本体にfor(int i=0,x,y;...ドロップできるように、forループですべての変数を宣言することにより、いくつかのバイトをゴルフすることができintます。さらに、fill(255);ちょうどになることができますfill(-1);
Kritixi Lithos

私はこれをテストしていませんが、私はあなたがドロップすることができると思う+20の設定値をしばらくxしてy、あなたが変更できるように、rectrect(x+5,y+5,30,30);ellipseellipse(x+20,y+20,23,23);と2つのバイトを保存します。
クリティキシリソス

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組み込みのグリッドは、デフォルトで単位長のセル[step=2]を生成します。より大きなグリッドを生成するには、約8バイトを追加(追加)します。円の描画の座標を単純化すると、十分なバイトが節約されません。(それを行うと157バイトを取得します)
-TonioElGringo

@TonioElGringoああ、本当。最初にテストせずにコメントするように教えます;)
クリス

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( "Private Use Area"ブロックにある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");
};

アイデアは簡単です。画像からグラフィックスオブジェクトを作成し、それを使用して画像をすべて白にします。次に、境界矩形を描く画像の各正方形をループします。ドットの位置の1つである場合、それも描画します。最後に、画像をファイルに保存し、Windowsに画像の開き方を決定させます。私の場合は、Windows Photo Viewerで開きます。

を使用しProcessて画像を表示し、ファイルに保存することは、WindowsフォームやWPFアプリを作成するよりもはるかに短くなります。これは、すべての異なるクラスと、作成に必要な余分な毛羽のためです。

出力:

出力


私はあなたがタイタスの答えは、単に画像を出力する例えばProcess.Startを使用する必要はないと思う、それを開いていません
ジェレミー・トンプソン

@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近似グレーとしての資格があると思います。そうでない場合は、4バイトを追加します。


3

R 313 236バイト

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」に移動します。省略して拡張すると、4バイト節約できました。しかし、その後、ファイル拡張子を編集して、「bmp」に戻してアップロードする必要がありました。そのため、これらの4バイトのクレジットを取得しないでください。

ハッカーのロゴ

解説

「そのグラフィックは、5つのドットを持つ単純なグラフにすぎません。堅牢なデータグラフィック機能を備えた言語で実装するのは簡単なことです。Rで試してみましょう。」しかし、その後、Rのグラフィックデフォルトを回避するために、バイトの80%程度を費やす必要がありました。

仕事のための間違ったツール...

グラフィックのサイズと縦横比を保証する、bmpコンストラクターを呼び出してからdev.off()を呼び出すよりも冗長な方法を見つけることができませんでした。組み合わせは25バイトを占めます。Rセッションが適切に設定されている場合、これらのバイトを消費せずに、多少正確に見えるグラフィックが表示される場合がありますが、信頼性や一貫性はありません。


1
いくつかの提案:データフレームbをまったく定義せず、名前のない2つのベクトルを直接plot関数に入れてください。使用c(l,3)のためにxaxpyaxpFfalseを使用するだけで、定義する必要はありません。また、ラベルやtckなどのデフォルト値をa(x,...)呼び出す新しい関数を定義して、axis(x)それらをすべて2回指定する必要がないようにします。
user2390246

axes=Fではなくを使用することもできますxaxt='n',yaxt='n'。また、後でそのトリックを使用したにもかかわらず.5、定義するときに使用するのを忘れていましたl
user2390246

1
実際、これらの厄介なもの.5を完全に取り除くためにすべての座標値を2倍にしたらどうでしょうか?
user2390246

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₁(IおよびL₂(I)+.5→B=>を削除できると思います.5+L₂(I→B
ザカリー

3

R、119の 114 111バイト

(3バイトを節約してくれた@JayCeに感謝

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

最初の4つのプロットが空のセルで、他の5つのプロットがドットのあるものであるレイアウトを使用します。

グライダー


私は、位置引数を使用して、他のソリューションよりも短くすることができます:ここに
JayCe

@JayCe、本当にありがとう!
プランナパス

3

Excel VBA、180バイト

デフォルトのワークシートオブジェクト(Sheet1)への入力と出力を行わない匿名VBEイミディエイトウィンドウ関数。

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

出力

ハッカーのロゴ

[{21,32,13,23,33}]over を使用する場合は-6バイトSplit("21 32 13 23 33")

Mid(s,2)over を使用する場合は-2バイトRight(s,1)

(s\10)over を使用する場合は-3バイト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])
タソスパパスティリアーノウ

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)

サブパスが塗りつぶされるために閉じられる必要がないという事実を利用することによって、8バイトを削って編集します。

編集svg文法に従って、数字以外をカンマ(.5,.5)で区切る必要はありません。また、明示的な塗りつぶしを破棄したため、1本の線の描画方向を負から正に変更でき、ダッシュを節約できます。そして最後に、最後の改行を含まないようにカウントを調整しました。このルーキーのミスを申し訳ありません。

codegolfの別の回答からLearningを編集し、最終版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()

一見arbitrary意的な定数は、バイトを犠牲にすることなく画像をできるだけ大きくしようとする私からのものです。

非印刷文字で、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に置き換えました。

スクリーンショット

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.