☣ (생물학적 기호)를 그립니다.


66

생물학적 위험 기호를 뚜렷한 색의 배경에 임의의 색으로 그립니다. 구체적인 비율은 1974 년 6 월 27 일 미국 정부 의 연방 등록부 에서 발표되었습니다 .

세부

  • 출력으로 파일에 쓰거나 (래스터 및 벡터 형식 허용) 화면에 표시 할 수 있습니다.

  • 테두리 나 채워진 모양 만 그릴 수 있습니다.

  • 래스터 이미지를 사용하는 경우 출력 해상도 (예 : 너비 / 높이)를 조정할 수있는 매개 변수 (또는 두 개)를 입력으로 사용해야합니다.

  • 배경은 최소한 기호의 경계 상자 크기를 가져야하지만 더 클 수 있습니다.

  • 유니 코드 기호 ☣를 출력하는 것만으로는 충분하지 않습니다 .

  • 사용 된 거리의 정확한 비율은 다음 다이어그램에 나와 있습니다 (원래 여기에서 ) :

또한 조금 더 읽기 쉬운 동일한 측정 값으로 추가 다이어그램을 만들려고 노력했습니다.

( 99 % 보이지 않는 게시물에 영감을 받음 )


2
허점 : 가변 크기의 배경 안에 1x1 픽셀 이미지를 넣을 수 있습니까?
John Dvorak

해상도를 충분히 크게 설정하면 기호가 여전히 나타나야한다고 생각하지 않습니다. 어쨌든 나는 여기 사람들이 우리가 의미하는 바를 이해하기에 충분한 상식을 갖기를 바랍니다.)
flawr

1
여유 시간이 있다면 PostScript 또는 거북이 그래픽을 사용해보십시오.
Guy Coder

1
@ SriotchilismO'Zaic 길이는 두 개의 원으로 결정됩니다. 각 원에는 주어진 중심과 반지름이 있으므로 길이는 간격의 크기에 의해 결정됩니다.
flawr

1
11

답변:


96

T-SQL, 442 441 426 355 349 344 바이트

DECLARE @ VARCHAR(MAX)=REPLACE(REPLACE(REPLACE('DECLARE @a5MULTIPOINT((0 31),(19 -2),(-19 -2))'',@b5MULTIPOINT((0 39),(26 -6),(-26 -6))'',@5POINT(0 9)'',@d5LINESTRING(0 9,0 99,90 -43,0 9,-90 -43)''SELECT @a830%b821)%86)%d81)%d84%819))).STUnion(@827%820)).STIntersection(@b819)))'
,8,'.STBuffer('),5,' GEOMETRY='''),'%',').STDifference(@')EXEC(@)

REPLACE()긴 키워드 를 사용 하고 동적 SQL로 실행 하여 70 바이트 이상을 절약했습니다 . 아래 스크린 샷에서 교체 후 코드를 참조하십시오.

샘플 그림에서 좌표 값을 두 배로 늘리고 표시되는 소수 자릿수를 줄이기 위해 9 단위 위로 이동했습니다.

이 작업은 SQL 2017에서 도입 된 지리 공간 기능을 사용하여 SQL 2017에서 수행되었습니다 .를 포함하여 유용한 내장 지오메트리 함수가 많이 STBuffer있습니다.

주석이 달린 코드가있는 출력 시각적 :

지리 공간 함수를 사용하는 T-SQL의 생물학적 위험 기호

더 많은 T-SQL 도면은 부활절 토끼를 참조하십시오 .

자세한 내용은 실제 SQL에서이 기술의 응용, 이 문서를 읽을 또는 이 비디오를 시청 . SE에는 관련 사이트 gis.stackexchange.com도 있습니다.

편집 :

  1. 좌표를 104에서 99로 변경하여 1 바이트를 저장했습니다.
  2. 복용 15 바이트를 저장 STDifference(A)의 STUnion개별적 대신 각각의 객체의를.
  3. REPLACE()반복되는 키워드 를 사용 하고 동적 SQL로 실행 하여 71 바이트를 절약했습니다 . 더 많은 대체물을 남기기 위해 편집 2를 되돌 렸습니다 STDifference.
  4. 중심을 9 단위 위로 이동하여 4 바이트를 절약했습니다. 이로 인해 몇 개의 좌표가 단일 (음수) 숫자로 변경되었습니다. 또한 따옴표 5대신 '#'2 바이트를 절약하여 대신에 대체 문자로 사용할 숫자 를 확보했습니다 .
  5. 대체 문자열 )로 이동 하여 5 바이트를 절약했습니다 STDifference. 감사합니다, @Nicholas!

56
왜 ...이 존재합니까?
Alexander

26
@Alexander 인구 조사 또는 과학 연구와 같은 지리적 데이터를 포함하거나 사용하는 데이터베이스 또는 지리적 지역별 고객 판매도 포함합니다. 또는 토끼와 생물 학적 기호를 그리기 위해.
BradC

24
SQL은 자신의 올바른 마음에있는 것을 넘어서고 자하는 한 가지 목적으로 충분하지 않습니다. SQL로 작성된 GUI를 상상해보십시오. 주석, 측면 및 단위 테스트 프레임 워크가 필요합니다. 우리는 deeeeeper 로 가야 합니다 .
Alexander

24
로 @Alexander 당신이 원하는 : TSQLT
프리맨

15
@FreeMan 아, 어 ...
Alexander

32

Tex + Tikz, 232 바이트

tex로 전환하여 43 바이트를 절약했습니다. Phelype Oleinik 에게 감사합니다

Skillmon 덕분에 일부 바이트가 절약 되었습니다.

\input tikz \tikz[x=1,y=1,white]{\def\f{\foreach\1in{90:,210:,330:}}\def\u{\draw[line width=}\def~{circle(}\f\fill[red](\122)~30);\f{\u2](0,)--(\111);\u8](\130)--(\160);\fill(\130)~21);}\fill~6);\u7,red]~23.5);\f\u2](\130)~20);}\bye

줄 바꿈과 함께 \def:

\input tikz
\tikz[x=1,y=1,white]{
\foreach\1in{90,210,330}\fill[red](\1:22)circle(30);
\foreach\1in{90,210,330}{
\draw[line width=2](0,0)--(\1:11);
\fill(\1:30)circle(21);
\draw[line width=8](\1:30)--(\1:60);
}
\fill(0,0)circle(6);
\draw[line width=7,red](0,0)circle(23.5);
\foreach\1in{90,210,330}\draw[line width=2](\1:30)circle(20);
}
\bye

설명

이것은 조금 구식입니다. 이미지를 풍성하지 않게 만드는 방법을 알아낼 때 고칠 것입니다.

여기서는 압축되지 않은 답변이 어떻게 문제를 해결하는지 설명하려고합니다. 압축이 어떻게 작동하는지 설명 할 수 있습니다. 먼저 큰 검은 색 원을 그립니다.

\foreach\x in{90,210,330}\fill(\x:21)circle(30);

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

그런 다음 흰색 선을 그립니다.

\foreach\x in{90,210,330}\draw[white,line width=2cm](0,0)--(\x:11);

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

그런 다음 흰색 원을 그립니다.

\foreach\x in{90,210,330}\fill[white](\x:30)circle(21);

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

그런 다음 중앙 흰색 원을 추가합니다.

\fill[white](0,0)circle(6);

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

그런 다음 검은 고리를 추가합니다.

\draw[line width=7cm](0,0)circle(25.5);

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

그런 다음 검은 고리의 일부를 제거합니다

\foreach\x in{90,210,330}\draw[white,line width=2cm](\x:30)circle(20);

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


9
당신은 6 개의 외부 지점을 무 디지 않았습니다. 각 쌍 사이에는 4 단위의 공백이 있어야합니다.
레벨 리버 St

1
@LevelRiverSt 6 개의 외부 지점이 이제 파트너와 4 유닛 떨어져 있습니다.
밀 마법사

2
이러한 "발톱 끝"은 너무 뾰족하며, 중심 원에서 나오는 선분과 평행 한 직선 선분으로 구성되어야합니다. 또한 20.88은 상당히 의심스러워 보입니다.
flawr

당신은 사용하여 다른 바이트를 저장할 수 있습니다 \1대신 \x당신이 후 사용할 수 있습니다로 \def\f{\foreach\1in{90,210,330}}.
스킬 몬

1
@flawr 음 ... 그들은 문자 그대로 5000x5000보다 조금 작습니다 ... 90x90 만 ... 세부 정보를 거의 만들 수 없습니다 : D
Nelson

15

C, 8010 바이트

다시 돌아 가기 전에 SVG 또는 EMF 이전에는 래스터를 다루어야했으며 Windows로드 시작 화면과 같이 O / S가 준비되기 전에 RLE 또는 실행 길이를 사용해야하는 등 무언가를 즉시로드하려는 경우 -부호화. 이 몬스터는 RLE을 데이터로 사용하여 PBM 파일을 출력합니다. 평소처럼 빌드하고 다음과 같이 실행하십시오 ./biohazard > biohazard.pbm.

HTML, Java 라이브러리 등의 SVG 엔진을 생성하는 데 필요한 모든 프레임 워크를 포함해야한다면 이것이 유일한 외부 기능 이기 때문에 가장 작은 독립형 솔루션puts것입니다. 일반적으로 가장 작은 것 중 하나입니다. stdio.h기능.

이 세부 사항과 관련하여 :

래스터 이미지를 사용하는 경우 출력 해상도 (예 : 너비 / 높이)를 조정할 수있는 매개 변수 (또는 두 개)를 입력으로 사용해야합니다.

나는 같이 "필수"에서 서로 다른 "해야"예를 해석 RFC 2119 , 그래서이 코드에만 원래, 예를 들면의 배수를 할 가능한 것 때문에, 스케일링을 포함하지 않았다 ./biohazard 2그 소개 것 atoi, printf및 기타 제출의 주요 초점에서 벗어나는 합병증.

int o,i,x[]=
{4946,3,33,2,389,8,33,8,378,13,33,13,369,17,33,16,363,20,33,20,356,19,41,19,350,18,49,18,344,18,55,18,339,17,61,17,334,
17,66,17,330,17,71,17,325,17,75,17,321,17,79,17,317,17,83,17,313,17,87,16,311,16,90,17,307,17,93,17,303,17,97,17,300,
17,99,17,297,17,102,18,293,18,105,17,291,18,107,18,288,17,110,18,285,18,113,17,283,18,115,18,280,18,117,18,277,19,119,
18,275,19,121,19,272,19,123,19,270,19,125,19,268,19,127,19,266,19,129,19,263,20,131,19,261,20,133,19,259,20,134,20,257,
20,136,20,255,21,137,20,253,21,139,20,251,21,141,20,249,21,142,21,248,21,143,21,246,21,145,21,244,21,146,22,242,22,147,
22,240,22,149,22,238,22,150,22,238,22,151,22,236,22,152,23,234,23,153,23,232,23,155,22,232,23,155,23,230,23,157,23,228,
24,157,24,226,24,159,23,226,24,159,24,224,24,160,25,222,25,161,24,222,24,162,25,220,25,163,25,219,25,163,25,218,25,164,
26,216,26,165,25,216,26,165,26,214,26,166,26,214,26,167,26,212,27,167,26,212,26,168,27,210,27,169,27,209,27,169,27,208,
27,170,28,207,27,170,28,206,28,171,27,206,28,171,28,204,29,171,28,204,28,172,29,202,29,172,29,202,29,173,29,201,29,173,
29,200,30,173,29,200,30,173,30,198,31,173,30,198,30,174,31,197,30,174,31,196,31,174,31,196,31,175,31,195,31,175,31,194,
32,175,31,194,32,175,32,193,32,175,32,193,32,175,32,192,33,175,32,192,33,175,33,191,33,175,33,190,34,175,33,190,34,175,
33,190,34,175,34,189,34,174,35,189,34,174,35,188,35,174,35,188,35,174,36,187,36,173,36,187,36,173,36,187,36,173,36,186,
37,74,25,74,36,186,37,67,39,67,36,186,37,62,49,61,38,185,37,58,57,57,38,185,38,53,64,54,38,185,38,50,71,50,38,185,38,
47,76,48,38,185,38,45,81,44,39,184,40,41,87,41,39,184,40,39,91,39,39,184,40,37,95,37,39,184,40,35,99,34,41,183,41,32,
103,32,41,183,41,30,107,30,41,183,41,28,111,27,42,183,42,25,115,25,42,183,42,24,117,24,42,183,42,22,121,21,43,183,43,
19,124,20,43,183,43,18,127,18,43,183,43,17,129,16,44,183,44,14,133,14,44,183,44,13,135,12,45,183,45,11,137,11,45,183,
45,10,139,9,46,183,46,9,138,10,46,183,46,10,137,9,47,183,47,9,136,10,47,183,47,10,135,9,48,183,48,10,56,20,57,10,48,
183,49,9,50,33,49,10,48,184,49,10,45,41,45,10,48,184,50,10,40,49,40,10,49,184,50,10,37,55,36,10,50,185,50,10,33,60,34,
10,50,185,51,10,30,65,30,10,51,185,51,11,27,69,27,10,52,185,52,10,25,73,24,11,52,185,53,10,22,77,21,11,53,185,53,11,19,
81,19,10,53,186,54,11,16,85,16,10,54,185,56,11,13,88,14,11,56,181,59,11,11,91,11,11,59,176,63,11,8,94,9,11,63,171,66,
11,6,97,6,11,66,167,68,12,4,99,4,11,69,163,71,12,1,102,2,11,72,159,74,126,75,155,77,124,78,151,80,123,79,149,82,120,83,
145,85,118,86,141,88,116,88,139,90,114,91,135,93,112,93,133,96,109,96,130,98,107,98,127,101,104,102,124,104,101,104,
122,106,99,106,119,110,95,109,117,112,93,112,114,115,89,115,112,118,85,118,110,120,82,121,107,124,78,124,105,127,74,
127,103,131,69,130,101,134,65,133,99,137,60,137,97,141,54,141,95,146,47,145,93,151,39,150,91,157,29,156,89,166,13,165,
88,168,9,168,86,169,9,169,84,170,9,170,82,171,9,171,80,172,9,171,79,173,9,172,78,173,9,173,76,174,9,174,74,175,9,175,
72,176,9,175,72,176,9,176,70,177,9,177,68,64,20,93,10,94,20,63,68,57,34,83,17,83,33,58,66,54,42,77,21,76,43,54,64,51,
50,71,25,71,49,51,64,48,57,65,29,65,56,49,62,46,63,61,31,61,62,47,60,45,67,58,33,58,67,44,60,43,71,55,35,54,72,43,58,
41,36,8,32,52,37,51,33,8,35,41,58,40,36,17,26,49,39,48,27,16,37,40,56,39,38,22,23,46,41,45,24,21,39,39,55,37,40,26,21,
43,42,44,21,26,40,37,54,36,42,29,20,41,43,41,20,29,42,36,53,35,43,29,21,39,44,39,22,29,43,35,52,34,45,29,23,37,45,37,
23,29,45,34,51,33,46,29,24,35,46,35,25,29,46,33,50,32,48,29,26,33,47,33,26,29,47,33,49,31,49,29,27,32,47,32,27,29,49,
31,48,31,49,30,28,30,48,30,29,29,50,31,47,29,51,30,30,28,49,28,30,29,51,30,46,29,52,29,32,27,49,27,31,29,53,28,46,28,
53,29,33,26,49,26,32,29,54,28,44,28,54,29,34,25,49,25,33,29,55,27,44,27,55,29,35,24,49,23,35,29,56,27,43,26,56,29,36,
22,50,22,36,29,57,26,42,26,57,29,37,21,50,21,37,29,58,26,41,25,58,29,38,21,49,20,38,29,59,25,40,25,59,29,39,20,49,19,
39,29,60,24,40,24,60,29,40,19,49,19,39,29,61,24,39,23,61,29,41,18,49,18,40,29,62,23,38,23,62,30,41,17,49,17,41,29,63,
22,38,22,63,30,42,16,48,17,42,29,63,23,37,21,65,29,43,16,47,16,43,29,64,22,36,22,65,29,43,16,47,15,44,29,65,21,36,21,
66,29,44,13,50,14,44,29,66,21,35,20,67,29,45,11,53,11,45,29,67,20,34,20,68,29,46,8,57,8,46,29,67,20,34,20,68,29,46,6,
61,5,46,30,68,19,34,19,69,29,47,4,63,4,46,30,69,19,33,18,70,30,47,1,67,1,47,29,70,19,32,19,70,30,163,29,71,18,32,18,71,
30,61,2,37,2,61,29,72,18,31,17,73,29,59,5,35,5,58,30,72,18,31,17,73,29,58,7,33,7,57,30,73,17,30,17,74,30,55,10,31,10,
55,30,73,17,30,17,74,30,53,13,28,14,53,30,74,16,30,16,75,30,51,17,25,16,52,29,75,17,29,16,76,29,50,20,21,19,50,30,76,
16,29,15,77,30,50,21,16,22,50,30,77,15,29,15,77,30,50,26,7,25,51,30,77,15,28,15,78,30,51,57,50,30,78,15,28,15,78,31,50,
56,51,30,79,15,27,14,80,30,51,55,51,30,79,15,27,14,80,30,51,55,50,31,80,14,27,13,81,31,51,53,51,30,81,14,27,13,82,30,
51,53,51,30,82,13,27,13,82,31,50,52,51,31,82,13,26,13,83,31,51,51,51,31,82,13,26,13,83,31,51,51,50,31,84,12,26,13,84,
31,50,50,51,31,84,12,26,12,85,31,51,49,50,32,84,13,25,12,85,32,50,49,50,31,86,12,25,12,86,31,50,48,50,32,86,12,25,11,
87,32,50,47,50,32,86,12,25,11,87,32,50,47,49,32,88,11,25,11,88,32,49,47,49,32,88,11,25,11,88,32,49,46,49,32,89,11,25,
10,90,32,49,45,49,32,89,11,25,10,90,33,48,45,48,33,90,10,25,10,91,32,48,45,47,33,91,10,25,10,91,33,47,44,48,33,91,10,
25,10,91,34,46,44,47,33,92,10,25,9,93,33,47,43,46,34,92,10,25,9,93,34,46,43,46,33,93,10,25,9,94,34,45,43,45,34,94,9,25,
9,94,35,44,43,44,34,95,9,25,9,95,34,44,42,44,35,95,9,25,9,95,35,43,42,44,34,96,9,25,9,96,35,42,42,43,35,96,9,25,8,97,
36,42,41,42,35,97,9,25,8,98,36,41,41,41,36,97,9,25,8,99,36,40,41,40,36,98,8,26,8,99,37,39,41,39,36,99,8,26,8,100,37,38,
41,38,37,99,8,27,7,100,38,37,41,37,37,101,7,27,7,101,38,36,41,36,38,101,7,27,7,102,38,35,41,35,38,102,7,27,7,102,39,34,
41,34,38,103,7,27,7,103,39,33,41,33,39,103,7,27,7,104,39,32,41,32,39,104,7,27,7,104,41,30,41,30,40,104,7,29,6,105,41,
29,41,29,40,105,7,29,6,106,41,28,41,28,41,105,7,29,6,107,42,26,41,26,42,106,7,29,6,108,42,25,41,25,42,107,7,29,7,107,
44,22,42,23,43,108,6,30,7,108,44,21,42,21,45,108,6,31,6,109,45,19,42,20,45,109,6,31,6,110,46,17,43,17,46,110,6,31,6,
111,47,15,43,15,47,111,6,31,6,112,48,13,43,13,48,112,5,33,5,113,49,11,43,10,50,112,6,33,5,114,50,9,43,9,50,113,6,33,6,
113,50,8,44,9,49,114,6,33,6,114,48,9,45,8,48,115,5,35,5,115,47,9,45,8,47,116,5,35,5,117,45,8,46,9,45,116,6,35,6,117,44,
8,46,9,44,117,5,37,5,118,42,9,47,8,43,118,5,37,5,119,41,9,47,9,41,119,5,37,5,120,40,8,48,9,40,119,5,39,5,120,39,8,48,9,
38,121,5,39,5,121,37,9,49,8,37,122,5,39,5,123,35,9,49,9,35,123,4,41,5,123,34,8,50,9,34,123,5,41,5,124,32,9,51,9,31,125,
5,42,3,127,30,9,51,9,30,127,3,43,1,130,28,9,52,9,29,130,1,176,26,9,53,9,26,310,24,9,54,9,24,314,22,9,55,9,22,317,20,9,
55,9,20,320,18,9,56,10,17,324,15,10,57,9,16,327,13,9,58,10,13,331,10,10,59,9,11,335,8,9,60,10,8,339,5,10,61,9,6,344,2,
9,62,10,2,358,63,368,65,367,65,366,67,365,67,364,69,362,70,362,71,360,73,358,75,356,76,356,77,354,79,352,81,350,82,349,
84,215,2,130,86,130,3,79,5,129,87,128,6,77,6,127,89,126,6,79,6,125,91,124,7,80,6,123,93,122,7,82,6,121,95,120,7,84,6,
119,97,118,7,86,7,115,100,116,7,87,8,113,102,114,7,89,8,111,105,111,7,91,8,109,107,109,7,93,8,107,109,106,9,94,9,103,
112,104,9,96,9,101,115,101,9,98,10,97,118,98,10,100,10,95,121,95,10,102,11,91,124,92,11,104,11,89,127,88,11,107,12,85,
131,85,11,110,12,81,135,81,12,112,13,77,138,78,13,114,14,73,143,73,14,116,15,69,72,2,73,69,15,118,17,63,74,5,73,64,16,
122,17,59,75,7,75,58,18,124,19,53,77,9,77,53,19,126,22,45,79,13,78,46,21,130,24,37,82,15,81,38,24,132,28,27,85,18,86,
27,28,135,37,5,95,21,95,5,37,138,134,24,135,141,131,27,131,144,128,31,127,148,124,34,125,151,121,37,121,155,117,41,117,
159,113,45,113,163,109,49,109,167,105,53,105,171,101,57,101,175,96,62,96,181,91,67,91,185,86,72,86,191,80,78,81,196,74,
84,74,204,67,91,67,211,59,99,59,219,51,107,51,228,40,119,39,242,25,133,25,5311,0};
main(){for(puts("P1\n432 408");x[i];++i,o=!o)while(x[i]--)puts(o?"0":"1");}

1
코드를 어떻게 생성했는지 설명해 주시면 감사하겠습니다.
Cœur

코드는 모든 문자 다음에 줄 바꿈을 출력합니다. 나는 당신이 필요하다고 생각합니다 putchar().
marcelm

@marcelm-PBM P1 형식은 괜찮습니다!

1
나는이 질문에 반드시 있어야한다는 것을 확신하지만 OP와 함께 할 가치가있을 것입니다.
밀 마법사

1
필연적으로 사용해야한다는 것이 구별이 있음을 의미한다고 생각하지 않습니다. 이것은 실제로 OP에 물어봐야하는 질문입니다.
밀 마법사

15

텍 + 티 케이 Z, 234 (230) 226 바이트

원래 Sriotchilism O'Zaic의 답변 보다 5 바이트 더 길지만 이것은 정확해야합니다. 그의 대답과 비슷하지만 여기에 몇 바이트를 더 절약 \draw[line width=8]하고 기호 아래 \28](~30)to(~55);의 팁을 얻으려면 하나 더 필요합니다 (아래 코드에서이 작업에 대해서만 17 바이트가 추가됩니다). 바이트 전체 코드 길이

그리고 Sriotchilism O'Zaic 덕분에 나는 질문의 일부를 다시 읽고 색을 빨강으로 바꿀 수 있다는 것을 깨달았으므로 몇 바이트를 다시 절약했습니다.

\input tikz\let~\def~\1{circle(}~\2{\draw[line width=}~~{\foreach~in{90:,210:,330:}}\tikz[x=1,y=1,white]{~\fill[red](~22)\130);~{\fill(~30)\121);\28](~30)to(~55);\22](~0)to(~10);}\fill\16);\27,red]\123.5);~\22](~30)\120);}\bye

TeX-g + Ti k Z, 195 바이트

누군가 관심이 있다면, 다음은 내가 작업하고있는 TeX 기반 코드 골프 방언을 사용합니다 (코드가 안정적이라고 생각하지 마십시오). 바이트 수에는 의미 적으로 사용되는 EOL 문자와 EOF 문자가 포함됩니다 (EOL은 루프 인수를 구분합니다). 방언은 지금까지 매우 작았으며 정의와 for-loop 구문에 대한 속기 만 제공하지만이 답변을 위해 특별히 작성되지 않았으므로 코드 골프 규칙을 어 기지 않아야합니다. -g.tex-package / file의 저장소 : https://github.com/Skillmon/TeX-g

\input-g <tikz>~"{\:~{90:,210:,330:}}~'{circle(}~_{\draw[line width=}!f\fill\tikz[x=1,y=1,white]{"f[red](~22)'30);
"f(~30)'21);_8](~30)to(~55);_2](~0)to(~10);
f'6);_7,red]'23.5);"_2](~30)'20);
}

두 코드 스 니펫의 출력은 동일하게 보입니다.

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

( 이미지를 업데이트하기에는 너무 게으르다, 그냥 빨간색이라고 상상해보십시오 )


내 대답은 이제 정확하고 당신보다 2 바이트 짧습니다. 누군가가 내 답변 중 일부를 귀하의 답변과 결합하여 더 짧은 답변을 만들 수 있다고 확신하지만 답변을 이해하지 못합니다.
밀 마법사

@ SriotchilismO'Zaic 색상을 빨간색으로 변경하면 (색상이 임의적 일 수 있다는 규칙을 읽음) 230 바이트가됩니다.
Skillmon

@ SriotchilismO'Zaic 그리고 분명히 당신은 내 말을 보면서 답에 1 바이트 이상을 절약했습니다.
Skillmon

좋아, 나는 당신의 대답을 보았고 그것이 무엇을하고 있는지 이해하지 못했기 때문에 나는 당신의 대답에서 실제로 많은 것을 취할 수 있다고 생각하지 않습니다. 그러나 어쨌든 나는 정확한 숫자를 제거하기 위해 메시지를 변경했습니다. 어쩌면 나는 그것을 깨닫지 않고 답변에서 물건을 집어 들었을 것입니다.
밀 마법사

2
트윗 담아 가기 내 코드는 결국 당신의 영향을받습니다. 현재 TeX를 코드 골프 언어로 바꾸는 코드 골프 패키지를 작성하려고합니다. 나는 마침내 그것을 게시 할 때 내 대답은 :) 짧아집니다 (이 특별히이 질문에 대한 제작 된 어떤 언어입니다, 그래서 규칙을 위반하지 않습니다)
Skillmon

12

GLSL, 700 629 564 545 499 바이트

#define v vec2
#define j(x,r)length(x-g)<r
#define k(x,r,q)j(x,q)!=j(x,r)
#define l(b)length(g-b)<1.&&length(g-dot(g,b)*b)<(length(g)<S?A*S:A/S)
float C=.86,S=.5,F=.3,E=.22,A=.02,G=.21;void mainImage(out vec4 o,in v p){v r=iResolution.xy;v g=(p/S-r)/r.y;o.g=(k(v(0,F),G,G-A)||k(v(F*C,-F*S),G,G-A)||k(v(-F*C,-F*S),G,G-A))?o.g=0.:k(v(0),F,G)?C:l(v(0,1))||l(v(C,-S))||l(v(-C,-S))||j(v(0),.06)||j(v(0,F),G)||j(v(F*C,-F*S),G)||j(v(-F*C,-F*S),G)?0.:j(v(0,E),F)||j(v(E*C,-E*S),F)||j(v(-E*C,-E*S),F)?C:0.;}

나는 Shadertoy와 놀고 있었으므로 GLSL 음영 언어를 사용해 보았습니다. 이 코드는 각 조각을 테스트하여 원과 선을 래스터 화하고 1 또는 0의 값을 할당합니다. 매크로를 많이 사용하여 크기를 1000 바이트 이상에서 줄였습니다.

셰이더 토이 프로그램

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


1
사이트에 오신 것을 환영합니다! 깔끔한 첫 번째 답변!
밀 마법사

나는 언어를 모르는,하지만 수 &&||에 golfed 수 &|일부 또는 모든 부분에서?
Kevin Cruijssen

@KevinCruijssen 그것은 C의 부분 집합이므로 비트 연산이 될 것입니다. 나에게 컴파일러는 타입에 대해 불평한다
Roninkoi

1
이 C에서 C를 기반으로 한 것을 내가 실제로 본 @Roninkoi는 사용할 수 |/ &대신 ||/ &&그것은 bools에 대한되지 않는 이유는 무엇입니까? C에서 오랫동안 아무것도하지 않았으므로 확실하지 않습니다. 대부분의 경우 Java / C # .NET에서 작동한다는 것을 알고 있습니다. 그러나 이제는 추가 한 Shadertoy 링크 만 알았으며 이미 언급 한 것처럼 작동하지 않는 것 같습니다. 아 잘 좋은 첫 답변 btw! CGCC에 오신 것을 환영합니다.
Kevin Cruijssen

게시 된 코드에서 -30 바이트를 자르지 만 헤더는 566 바이트이며 게시 된 코드는 628입니까?
PrincePolka

12

SVG (HTML5) 434 410 321 바이트

<svg><circle cx=60 cy=60 r=23.5 stroke-width=7 fill=#fff stroke=#000 /><use href=#g transform=translate(120,0)scale(-1,1) /><g id=g><use href=#p transform=rotate(120,60,60) /><use href=#p transform=rotate(240,60,60) /><path id=p stroke=#fff stroke-width=2 d=M55,60A5,5,0,0,1,60,55V50A20,20,0,0,1,58,10V7A31,31,0,0,0,29,43

이제 @LevelRiverSt의 SVG를 기반으로합니다.


1
나는 생략 <defs>이 안전 하다고 믿습니다 . 이것은 Firefox, Chrome 및 Edge에서 작동합니다.
Arnauld

@Arnauld 고마워, 그것은 내가 처음 <use>을 제거 할 수 있음을 의미 합니다!

12

처리 중, 371 368 바이트

translate(width/2,width/2);scale(width/99);int i=0,b=204;float t=TAU/3;noStroke();for(;i<3;i++){fill(0);ellipse(0,-22,60,60);rotate(t);}for(;i<6;i++){fill(b);rect(-4,-60,8,16);ellipse(0,-30,42,42);rotate(t);}ellipse(0,0,12,12);stroke(0);strokeWeight(7);noFill();ellipse(0,0,47,47);for(;i<9;i++){strokeWeight(2);stroke(b);ellipse(0,-30,40,40);line(0,0,0,-9);rotate(t);}

처리가 래스터 화 된 것으로 계산되어야하는지 또는이 도전의 목적으로 계산되지 않아야하는지 확실하지 않았습니다. 그것은뿐만 래스터 계산의 경우 translatescale특정 창 크기에 대한 읽기와 화면에 기호를 할 필요가있다. 그러나 모든 그리기 명령이 벡터화되기 때문에 주어진 축척에서 작동합니다. 따라서 상대 원점에서 약 200 단위 너비로 그리는 것이 좋다고 가정하면 처음 43 바이트를 삭제할 수 있습니다.

이는 204, 204, 204배경색이 처리 중 기본 배경색 인 것으로 가정합니다 . 그것은 또한 가정 rectModeCORNERellipseModeCENTER(기본값을)

initial size(640, 640)을 사용하면 결과 스케치는 다음과 같습니다.

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

스케일을 두 배로 늘리면 .5s가 제거 되기 때문에 3 바이트를 절약했습니다 (여러 숫자는 1 자리에서 2 자리로 흐릅니다).

구조는 TeX 솔루션과 유사하며, 모양 사이의 간격을 "지우기"위해 검은 색과 회색을 그립니다.

설명:

translate(width/2,width/2); // Move to the middle of the canvas
scale(width/99);            // Scale up to fill the canvas

int i=0,b=204;              // Initialize i, and `b` to the background color
float t=TAU/3;              // Save a rotation of one third, in radians

noStroke();
for(;i<3;i++){ // Draw the three big black circles
  fill(0);
  ellipse(0,-22,60,60);
  rotate(t);
}
for(;i<6;i++){
  fill(b);
  rect(-4,-60,8,16);     // "Blunt" the corners on the sharp outer rings
  ellipse(0,-30,42,42); // Cut out the middle of the big circles
  rotate(t);
}
ellipse(0,0,12,12); // Cut out the small circle in the middle
stroke(0);
strokeWeight(7);
noFill();
ellipse(0,0,47,47); // Draw the thick band that goes through all three big circles
for(;i<9;i++){
  strokeWeight(2);
  stroke(b);
  ellipse(0,-30,40,40); // Cut the "gap" between the three big rings
                        //and the band passing through them
  line(0,0,0,-16);      // Cut the lines coming out of the small middle circle
  rotate(t);
}

멋지다 :) 나는 당신이 모든 측정을 두 배로하면 피할 수 있다고 생각합니다 .5!
flawr

그렇습니다. 그러나 한 자릿수의 일부를 두 자릿수로 변경했기 때문에 균형이 어떻게되는지 확실하지 않습니다. 내가 올바르게 계산하면 2 바이트를 절약하는 것처럼 보입니다. 나는 또한 사용에 대한 생각 scale코드의 일부를 변경하는 것이 아니라 가장 잘 넣어 위치를 확실하지 않았다
커티스 FENNER

아, 맞아요, 나는 그것을 고려하지 않았습니다.
flawr

소수를 제거하기 위해 측정 값을 두 배로 늘리면 소수의 좌표가 한 자리에서 두 자리로 이동했지만 거의 10 바이트를 절약했습니다. 어쨌든 시도해 볼 가치가 있습니다.
BradC

1
배율을 두 ​​배로 늘려서 3 바이트를 절약했습니다. @IsmaelMiguel
커티스 페너

9

GLSL, 319 310 바이트

#define F float
#define H(y)sqrt(x*x+(y)*(y))
void mainImage(out vec4 D,in vec2 u){vec2 U=u*.003-.5;F x=abs(U.x),y=U.y;if(y<.577*x){F t=.5*x+.866*y;y=.866*x-.5*y;x=abs(t);}F c=F(H(y-.11)<.15);F R=H(y);F S=H(y-.15);if(S<.105)c=0.;if(R<.03)c=0.;if(x<(R<.1?.005:.02))c=0.;if(R>.10&&R<.135&&S<.095)c=1.;D=vec4(c);}

이것은 Shadertoy에서 렌더링 될 수 있습니다 .

견본

이미지에서 대칭을 사용하여 더 적은 양의 개별 모양으로 그릴 수 있습니다.

약간 팽창 된 버전은 다음과 같습니다.

#define F float
#define H(y) sqrt(x*x+(y)*(y))

void mainImage(out vec4 D,in vec2 u)
{
    // normalized UV
    vec2 U = u*.003 - .5;

    // fold the 6 identical sections to the same UV coordinates
    F x = abs(U.x), y = U.y;
    if (y < .577*x)
    {
        F t = .5*x + .866*y;
        y = .866*x - .5*y;
        x = abs(t);
    }

    // circles and lines
    F c = F(H(y-.11) < .15);
    F R = H(y);
    F S = H(y-.15);
    if (S < .105) c = 0.;
    if (R < .03) c = 0.;
    if (x < (R < .1 ? .005 : .02)) c = 0.;
    if (R > .10 && R < .135 && S < .095) c = 1.;

    // output
    D = vec4(c);
}

(필요한 공백을 제거 해준 @Kevin Cruijssen에게 감사합니다)


1
일부 공백을 제거 할 수 있습니다. 당신이 정의한 것 : H(y) sqrtH(y)sqrt; if 문의 모든 공백 : if (if(; AND를 둘러싼 마지막 if 문에있는 것 : if (R>.10 && R<.135 && S<.095)c=1.;if(R>.10&&R<.135&&S<.095)c=1.;.
Kevin Cruijssen

8

HTML / JS,  448 435 433  387 바이트

@Shaggy 덕분에 @Neil 의 사전 최소화 된 SVG 저장 2 바이트 버전사용하여 많은 바이트
를 절약했습니다.

Wikimedia Commons에서 제공 한이 SVG 파일 의 압축 버전 .

<body onload="_=`<svg~12y~24y><path id=p d=m28.8117,27.046a3,3}0qb3117q4.004v-1w539|1wq20.7959v-w583a1jxb7975x7.3228xj,8.6032x9.7443l-.4835q.2792|-18.7598q9.0989zm3.4148q8.871a10x0}0q1b453,c9w,9w{-kx3wx3w}1x6.8042,0x0x0{k>~><use href=#p transform=rotate(},cc|a10wx0w}c{}1qb1756,yc26,26) /x,1w.5q,-kb7417j5x5}1c0,b2.`;for(i of`bcjkqwxy{|}~`)with(_.split(i))_=b.innerHTML=join(pop())"id=b>

온라인으로 사용해보십시오! (압축 해제 된 문자열 만 출력)

데모 스 니펫


이것은 392.위한 크롬 안드로이드 CodePen에, 작동
얽히고 설킨

1
@ Arnauld 나는 5 바이트의 비용이 들지만 내 대답을 반전 시켰습니다 (그래서 전반적인 불필요한 점수는 4 점 밖에 들지 않았지만 다른 불필요한 바이트를 찾았습니다).

@Neil 그에 따라 업데이트되었습니다. ;)
Arnauld

@LevelRiverSt의 SVG는 훨씬 작습니다!

7

하스켈 , 530 491 436 435 430 420 바이트

f=fromIntegral
c(a,b)r(x,y)=(x-a)^2+(y-b)^2<r^2
(m#w)t(x,y)|c<-cos(-t),s<-sin(-t)=x*c-y*s>m&&abs(x*s+y*c)<w/2
u a p=any($p)a
i a p=all($p)a
v=(*(pi/6))<$>[9,5,1]
o=c(0,0)
h?r=[c(h*cos a,h*sin a)r|a<-v]
(h%y)x|u[i[u$11?15,(not.)$u$o 3:map(0#1)v++map(9#4)v++15?10.5],i[o 13.5,not.(o 10),u$15?9.5]](60*f x/h-30,60*f y/h-30)="0 "|0<1="1 "
g h|s<-show h,n<-[0..h-1]=writeFile"a.pbm"$unlines$"P1":(s++' ':s):[n>>=(f h%)y|y<-n]

PBM 파일을 출력합니다.

이것은 많은 재미이었다!

생물학적 위험

(Imgur에 업로드하려면 이것을 PNG로 변환해야했습니다)

기본적으로 픽셀이 모양의 일부인지 여부를 감지하여 픽셀 단위로 이미지에 렌더링하는 자체 벡터 그래픽 함수를 만듭니다. 모양은 기본 집합 작업과 함께 유지되는 여러 원과 선 (원점에서 복사)으로 구성됩니다. 원은 중심과 반지름으로 구성되며 선은 최소 반지름, 너비 및 각도를 순서대로 갖습니다. 원의 멤버쉽을 감지하는 것은 쉽습니다. 나는 단지 중심 좌표를 빼고 크기를 반지름과 비교합니다. 선이 약간 더 복잡합니다. 점을 각도의 반대 방향으로 회전시켜 회전을 무효화 한 다음 x 및 y 좌표가 예상 범위 내에 있는지 확인합니다. 최소 반경은 큰 원의 끝에서 더 큰 간격이 중심 근처의 작은 간격보다 우선하지 않도록하는 것입니다. 그 후에는 수학을 설정하는 것이 부울 논리의 간단한 문제입니다.

편집 : 39 바이트를 벗겨 주셔서 @flawr에 감사드립니다!

EDIT2 : @Christian Sievers에게 55 바이트를 가져 주셔서 감사합니다! 그것들을 함수로 만드는 좋은 아이디어

EDIT3 : 다른 바이트를 면도 해주신 @Christian Sievers에게 다시 감사드립니다!

EDIT4 : @ H.PWiz와 @Angs 덕분에 7 바이트를 벗어났습니다!

EDIT5 : 방금 버그를 발견했습니다! 나는 그들이 예상했던 것보다 두 배의 선을 렌더링하고 있었다! 그것을 고치기 위해 2 바이트를 소비했습니다 (너비를 2로 나눠야했습니다. 상수 값을 조정할 수 있었지만 1에서 0.5로 변경하면 비용이 2가됩니다).

EDIT6 : 다른 10 바이트를 벗어난 @Angs에게 감사드립니다!


와우, 이거 너무 멋지다. 코드 골프 에서 자신의 유형을 정의하는 사람은 거의 없습니다 :) 두 가지 질문 : 음의 각도가 필요 [-90,-210,-330]합니까? 그리고를 변경할 <=<있습니까?
flawr

1
그래서 나는 그것을 시도 하고 몇 바이트
flawr

1
아시다시피, haskell 채팅 과 haskell 에서의 골프 팁이 있습니다.
flawr

1
또 다른 작은 조정
flawr


6

루비 , 278 바이트

puts"<svg viewBox='-60-60 120 120'><circle cx='0'cy='0'r='23.5'stroke-width='7'fill='white'stroke='red'/>",(-3..5).map{|i|"<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(#{i/3},-1)rotate(#{i*120})'/>"}

온라인으로 사용해보십시오!

기호가 OP 스케일의 200 % 인 아래에서 SVG 코드를 생성합니다.

뒷면의 원과 전경의 갈래로 이루어져 있습니다. 갈래는 축 -1,0,1에서 크기가 조절 되고 X120 도의 배수로 회전합니다. 상기 경우 X스케일링 제로 더 출력을 생성하지 동안 -1+1. 각 갈래 쌍의 양면을 제공하십시오.

뾰족한 부분 주위에 2 단위 너비의 흰색 테두리를 사용하여 strokeand stroke-width속성을 사용하여 뒤쪽 원을 자릅니다 . 내부 모양이 OP 당이 되려면 좌표가 1 단위 (테두리 너비의 절반)만큼 이동합니다. 테두리의 마지막 선이 그려지지 않도록 경로가 의도적으로 닫히지 않은 점에 유의하십시오. 이를 통해 각 갈래 쌍의 두 반쪽이 서로 결합됩니다.

골프로 인해 예상 60이 아닌 안쪽 원의 90 도가 그려집니다. 이것은 각 갈래의 밑면 사이에 약간의 겹침이 있음을 의미하지만 출력 모양의 모양에는 영향을 미치지 않습니다.

<svg viewBox='-60-60 120 120'><circle cx='0'cy='0'r='23.5'stroke-width='7'fill='white'stroke='red'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(-1,-1)rotate(-360)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(-1,-1)rotate(-240)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(-1,-1)rotate(-120)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(0,-1)rotate(0)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(0,-1)rotate(120)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(0,-1)rotate(240)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(1,-1)rotate(360)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(1,-1)rotate(480)'/>
<path fill='red'stroke='white'stroke-width='2'd='M5 0A5 5 0 0 1 0 5v5A20 20 0 0 1 2 50v3A31 31 0 0 0 31 17'transform='scale(1,-1)rotate(600)'/>


6

포스트 스크립트 , 367 359 328 271 바이트

코드 (압축 버전) :

5 5 scale 36 24 translate <</c{0 360 arc closepath}/r{120 rotate}/R{repeat}/L{setlinewidth}/g{setgray}/F{fill}>>begin 3{0 11 15 c F r}R 1 g 3{0 15 10.5 c F r}R 0 0 3 c F 3{[-.5 2 1 3 -2 25 4 3]rectfill r}R 0 g 4 L 0 0 11.5 c stroke 1 g 1 L 3{0 15 10 c stroke r}R showpage

코드 (압축되지 않은 버전) :

5 5 scale                  % over-all scale
36 24 translate            % over-all shift

% define some short-named procedures for later use
<<
  /c { 0 360 arc closepath }  % append circle (x, y, radius are taken from stack)
  /r { 120 rotate }           % rotate by 120°
  /R { repeat }
  /L { setlinewidth }
  /g { setgray }
  /F { fill }
>> begin

3 {
    0 11 15 c F       % black circle
    r                 % rotate by 120°
} R
1 g                   % set white color
3 {
    0 15 10.5 c F     % white circle
    r                 % rotate by 120°
} R
0 0 3 c F             % small white circle
3 {
    [ -.5 2 1 3       % white gap near center
      -2 25 4 3       % white gap on edge
    ] rectfill
    r                 % rotate by 120°
} R
0 g                   % set black color
4 L                   % set linewidth 4
0 0 11.5 c stroke     % black ring
1 g                   % set white color
1 L                   % set linewidth 1
3 {
    0 15 10 c stroke  % white ring
    r                 % rotate by 120°
} R
showpage

결과 (애니메이션을 그리는 방법을 보려면 애니메이션으로) :

결과


훌륭한 애니메이션.
dana

2

파이 게임이 포함 된 Python 3, 327314 287 278 바이트

(13 바이트를 저장하는 다양한 불쾌한 해킹을 적용하지, 특히 더 이상 색상을 저장하지만 함께 즉시 그것을 계산 -(r>25))
(손실, 기능에 리팩토링 sys, 밖으로 해킹 math작은 개조하면 되겠 어; 상수 좌표 찬성에 저장된 27 바이트)
(재 작성 좌표 복잡한 수학 트릭의 상수로 (코) 사인 을 구하여 9 바이트 절약)

결과 이미지의 너비 / 높이 절반을 나타내는 단일 정수 인수를 취하는 함수입니다. 예를 들어 f(500)1000x1000 픽셀 창을 만들고 거기에 생물학적 위험 기호를 그립니다.

from pygame import*;D=display
def f(S):
 u=D.set_mode([S*2]*2);b=S>>6
 for p,r,w in(22,30,0),(30,20,0),(0,27,7),(30,21,2),(0,6,0),(51,4,0):
  for l in 0,4/3,8/3:Z=1j**l*p*b;q=S+int(Z.imag),S-int(Z.real);draw.circle(u,-(r>25),q,r*b,w*b);r-20or draw.line(u,0,(S,S),q,b*2);D.flip()

단축 버전 :

import pygame
import math
import sys

size = int(sys.argv[1])
basic = size // 55

screen = pygame.display.set_mode((size * 2, size * 2))

circles = [
    (22, 30, 0, -1),  # basic shape
    (30, 20, 0, 0),   # large cutouts
    (0, 27, 7, -1),   # "background circle"
    (30, 21, 2, 0),   # "background circle" clearance
    (0, 6, 0, 0),     # center disc
    (51, 4, 0, 0),    # blunt the points
]

for pos, radius, width, color in circles:
    for lobe in [0, math.pi * 2 / 3, math.pi * 4 / 3]:
        x = int(math.sin(lobe) * pos * basic) + size
        y = size - int(pos * basic * math.cos(lobe))
        pygame.draw.circle(screen, color, (x, y), radius * basic, width * basic)
        # Hack to draw the small slots in the center
        if radius == 20:
            pygame.draw.line(screen, 0, (size, size), (x, y), basic * 2)

pygame.display.flip()

이 프로그램의 핵심은 대부분 심볼의 3 방향 점 대칭을 활용하고 드로잉 작업을 최대한 드물게 표현하는 것입니다. 이 모든 것의 핵심은 다음 circles과 같이 구성된 원 정의 목록입니다.

  • position: 반 기본 단위로 원점에서 얼마나 바깥쪽으로
  • radius: 반 기본 단위로 원의 반경
  • width: 원의 테두리 너비 (외부 원의 안쪽, 0 = 채우기)
  • color: 사실을 악용 파이 게임은 해석하는 0검정과 같은 -1백색

모든 드로잉 작업이 3 회 반복되어 120 ° 회전됩니다. "발톱"의 둔기는 다른 원으로 이루어집니다. 내부의 "라인 컷"은 특수한 경우로, 더 효율적인 방법을 생각할 수 없었습니다. 내가 사용하지 않은, 그래서 사양에 정의 된 "기본 단위"여기 두 배로 .5에서 circlesint()파이 게임을 만족시키기 위해 여기 저기.

결과 python3 -c 'from biohazard import *; f(500)':

이 답변의 출력 결과


1
CGCC에 오신 것을 환영합니다! 내장되지 않은 라이브러리를 사용하는 경우 설명에 "Python 3 + pygame"이 표시되어야합니다. 입력은 표준 입력에서 가져 오거나 sys모듈을 가져 오는 것을 피하기 위해 함수 인수로 가져와 코드를 단축시킬 수 있습니다 ( rules 참조 ). 또한 이 트릭 을 가져 와서 가져올 필요가 없도록 적용 할 수 있습니다 math.
조엘

@Joel 피드백에 감사드립니다! 헤더에 파이 게임을 포함시키고 코드를 함수로 변환했습니다. 에 관해서는 math, 좌표 목록으로 리팩터링했습니다. 어쨌든 그들 중 단지 3 명이었다. (공) 사인이 필요하지 않습니다.
marcelm

1
위에서 언급 한 트릭을 적용하면 실제로 모든 숫자를 소스 코드에 넣는 것보다 더 많은 바이트가 절약됩니다.
조엘

@Joel 미리 알림 주셔서 감사합니다. 이전에는 그 옵션이 더 길어 보였지만 내가 잘못한 것처럼 보이기 때문에 해당 옵션을 삭제했습니다. 또한 더 많은 최적화를 허용했습니다.
marcelm

1

Tcl / Tk-557 바이트

set F #000
set B #F50
pack [canvas .c -bg $B]
rename expr e
rename foreach f
rename proc p
p R r {list [e $r*cos($::a)] [e $r*sin($::a)]}
p D {d r} {lassign [R $d] x y;list [e $x-$r] [e $y-$r] [e $x+$r] [e $y+$r]}
p C {d r c} {.c cr o {*}[D $d $r] -f $c -outline $c}
p L {p q w} {.c cr l {*}[R $p] {*}[R $q] -w [e $w] -f $::B}
p A {d r w c} {.c cr a {*}[D $d $r] -w [e $w] -star 0 -ex 359.9 -sty arc -outline $c}
f x {{C 11 15 $F} {C 15 10.5 $B} {L 0 5 1} {L 20 40 4} {C 0 3 $B} {A 0 11.75 3.5 $F} {A 15 10 1 $B}} {f a {2.62 4.72 6.81} $x}
.c move all 99 99

그러나이 버전은 아무리 작은 크기의 동일한 이미지를 얻기 때문에 지루합니다. 그러나 화면에 표시하기위한 OP 조건을 만족합니다. 다음은 주석이 포함 된 비 압축 버전과 추가 된 크기를 지정하는 기능입니다.

# Input: command line argument is the pixel width (same as the height) of the window to create
# For example:
#   wish a.tcl 500
set window_size $argv

set foreground_color #000
set background_color #F50
pack [canvas .c -bg $background_color -width $window_size -height $window_size]

# Helper procs to generate x,y coordinates
proc radius->x,y r {
  list [expr {$r*cos($::angle)}] [expr {$r*sin($::angle)}]
}

proc center_offset,radius->rectangle {offset r} {
  lassign [radius->x,y $offset] x y
  list [expr {$x-$r}] [expr {$y-$r}] [expr {$x+$r}] [expr {$y+$r}]
}

# Tk's canvas does not scale line widths, so we have to do that manually
# The $scale is a global variable for compressing the code text above
set scale [expr {$window_size*.016}]

# These three procs draw items in the canvas
proc circle {offset r color} {
  .c create oval {*}[center_offset,radius->rectangle $offset $r] -fill $color -outline $color
}
proc line {p q w} {
  .c create line {*}[radius->x,y $p] {*}[radius->x,y $q] -width [expr {$::scale*$w}] -fill $::background_color
}
proc annulus {offset r w color} {
  .c create arc {*}[center_offset,radius->rectangle $offset $r] -width [expr {$::scale*$w}] -start 0 -extent 359.9 -style arc -outline $color
}

# Our list of shapes to draw
#  circle  center_offset, radius,                   color
#  line    end_offset_1,  end_offset_2, line_width
#  annulus center_offset, radius,       line_width, color
foreach command {
  {circle  11 15        $foreground_color}
  {circle  15 10.5      $background_color}
  {line     0  5    1}
  {line    20 40    4}
  {circle   0  3        $background_color}
  {annulus  0 11.75 3.5 $foreground_color}
  {annulus 15 10    1   $background_color}
} {
  # Each command gets applied thrice, rotated $angle radians each time
  foreach angle {2.62 4.72 6.81} $command
}

.c scale all 0 0 $scale $scale
.c move all [expr {$window_size/2}] [expr {$window_size/2}]

# Some random convenience stuff for playing with it
bind . <Escape> exit
after 500 {focus -force .}

죄송합니다. 오늘 사진이 없습니다. 생물 학적 주황색 배경에 검은 색 기호를 생성합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.