“해커 엠블럼”이라고도하는 “해커 로고”에 대해 들어 보셨을 것입니다. 다음과 같이 보입니다 :
이것은 Game of Life라는 수학적 시뮬레이션의 패턴입니다. 글라이더는 움직이는 가장 간단한 Life 패턴이며 모든 Life 패턴에서 가장 즉시 인식 할 수 있습니다.
도전
해커 로고를 표시하십시오. 이것은 다음과 같이 정의됩니다.
- 테두리, 흰색 배경 및 회색 눈금 선이있는 3×3 격자입니다.
- GoL 글라이더 패턴에 5 개의 검은 점이 배열되어 있습니다.
- 다른 건 없어
규칙
- 검은 점 작성해야 40 % – 80 % 개별 그리드 상자를.
- ASCII 출력이 아닌 그래픽 출력으로 엠블럼을 표시합니다 .
- 출력은 30×30 픽셀 이상이어야합니다 .
- 출력의 색상은 회색, 검은 색 및 흰색 이어야합니다 .
- 격자의 각 격자 상자는 같은 크기입니다. 격자는 3×3 정사각형 입니다.
- 인터넷이나 파일 시스템에서 로고를 가져 오지 못할 수 있습니다.
- 프로그램은 빈 화면 / 창에 로고를 표시합니다. 종료되면 정상적으로 종료해야합니다.
- “점”이 반드시 “원”을 의미하는 것은 아니라는 점에 유의한다. “점”은 하나의 표면이있는 격자 상자의 중앙에 중심을 둔 단일 형상입니다. 예를 들어, 원이나 사각형은 점으로 인정되지만 두 개의 삼각형이나 바둑판은 유효하지 않습니다.
승자
이것이 code-golf 이므로 각 언어에서 가장 짧은 답변이 이깁니다!
프로그램 출력의 스크린 샷을 답변에 포함 시키십시오.
답변
수학, 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,0
2 바이트 더 짧습니다.
그렇지 않으면 회색 / 흰색 펜이 점을 숨기므로 펜은 끝에있는 점에서 멀어져 야합니다.
그리드는 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
좌표로 자동 y
에 ch
와 x
에 cl
. 또한 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