태그 보관물: game-of-life

game-of-life

해커 로고 표시 배열되어 있습니다. 다른 건 없어 규칙 검은 점 작성해야

“해커 엠블럼”이라고도하는 “해커 로고”에 대해 들어 보셨을 것입니다. 다음과 같이 보입니다 :

해커 로고

이것은 Game of Life라는 수학적 시뮬레이션의 패턴입니다. 글라이더는 움직이는 가장 간단한 Life 패턴이며 모든 Life 패턴에서 가장 즉시 인식 할 수 있습니다.

도전

해커 로고를 표시하십시오. 이것은 다음과 같이 정의됩니다.

  • 테두리, 흰색 배경 및 회색 눈금 선이있는 3×3 격자입니다.
  • GoL 글라이더 패턴에 5 개의 검은 점이 배열되어 있습니다.
  • 다른 건 없어

규칙

  • 검은 점 작성해야 40 %80 % 개별 그리드 상자를.
  • ASCII 출력이 아닌 그래픽 출력으로 엠블럼을 표시합니다 .
  • 출력은 30×30 픽셀 이상이어야합니다 .
  • 출력의 색상은 회색, 검은 색 및 흰색 이어야합니다 .
  • 격자의 각 격자 상자는 같은 크기입니다. 격자는 3×3 정사각형 입니다.
  • 인터넷이나 파일 시스템에서 로고를 가져 오지 못할 수 있습니다.
  • 프로그램은 빈 화면 / 창에 로고를 표시합니다. 종료되면 정상적으로 종료해야합니다.
  • “점”이 반드시 “원”을 의미하는 것은 아니라는 점에 유의한다. “점”은 하나의 표면이있는 격자 상자의 중앙에 중심을 둔 단일 형상입니다. 예를 들어, 원이나 사각형은 점으로 인정되지만 두 개의 삼각형이나 바둑판은 유효하지 않습니다.

승자

이것이 이므로 각 언어에서 가장 짧은 답변이 이깁니다!

프로그램 출력의 스크린 샷을 답변에 포함 시키십시오.



답변

수학, 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]

여기에 이미지 설명을 입력하십시오


답변

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 구문의 은혜를 활용합니다.


답변

GLSL (fragment shader), 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


답변

파이썬 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) 또는 두 경계 (176.4-352.8)를 포함하여 21 x 21을 고려할 때 40 % -80 % 범위 내에서 177 픽셀을 사용합니다.

참고 : 수동 창 닫기가 선을 추가 할 수 있도록 도면이 완료되는 즉시 프로그램이 종료되고 캔버스 창을 닫습니다 done().

turtle입문 그래픽 프로그래밍을 위해 개발 된 Python 패키지입니다. 펜은 시작 x,y=0,0(디폴트) 400 화소 캔버스에 의한 (300)의 중간에 up펜 리프트, goto펜을 이동하고, shape(a라는 형태로 펜의 형상을 설정하는 "square"것이다 (21)의 기본 화소 폭을 갖는 소정의 형상 ), color색상을 설정합니다. 여기서 두 매개 변수는 획 (기본값은 1)을 설정하고 채 웁니다. 바이트는 사용하여 저장 (r,g,b)교체 튜플 옵션을 "white"함께 [1,1,1]목록 곱셈을 사용 [1]*3. 마지막으로 dot주어진 너비의 픽셀과 색상으로 점을 그립니다. 도트의 기본 너비 값이 너무 작아서 적용 할 수 9없으므로 미적이며 적합 15합니다. 도트의 색은"black"그러나 압축 해제 된 (r,g,b)튜플은 0,0,02 바이트 더 짧습니다.

그렇지 않으면 회색 / 흰색 펜이 점을 숨기므로 펜은 끝에있는 점에서 멀어져 야합니다.

그리드는 div ( /) 및 mod ( %)를 사용 i하여 시작하고 8( 루프 의 시작 부분에서 i초기화 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번째 두 성분의 전력을302비트 단위를 사용하여 302&2**i.


답변

애플 소프트 베이직 , 479 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

산출:


답변

IA-32 기계 코드, 81 80 바이트

16 진 덤프 :

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

산출:

해커의 로고

때문에 256 × 256 해상도를 사용 멋지다 그것은 나를에 픽셀의 인덱스를 분할 할 수 있습니다 ecx좌표로 자동 ychxcl. 또한 PGM 파일 형식의 이미지 헤더에는 숫자 255가 필요합니다.

내부 정사각형은 54×54입니다 (영역 별 셀의 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 쌍의 세포에 대해 동일한 색인을 제공합니다. 비트 값이 동일하다는 것은 운이 좋은 우연의 일치입니다.


답변

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