วาด☣ (สัญลักษณ์ Biohazard)


66

วาดสัญลักษณ์ Biohazard ด้วยสีตามใจชอบบนพื้นหลังที่มีสีชัดเจน สัดส่วนที่เฉพาะเจาะจงถูกตีพิมพ์ในวันที่ 27 มิถุนายน พ.ศ. 2517 (ค.ศ. 1974) ของรัฐบาลกลางสหรัฐ

รายละเอียด

  • ขณะที่เอาต์พุตอนุญาตให้เขียนไฟล์ (รูปแบบแรสเตอร์และเวกเตอร์) หรือแสดงบนหน้าจอได้

  • คุณสามารถวาดแค่เส้นขอบหรือรูปร่างที่เติม

  • หากคุณใช้ภาพแรสเตอร์คุณควรใช้พารามิเตอร์ (หรือสอง) เป็นอินพุตที่ให้คุณปรับความละเอียดของเอาต์พุต (เช่นความกว้าง / ความสูง)

  • พื้นหลังอย่างน้อยต้องมีขนาดของกล่องขอบของสัญลักษณ์ แต่อาจมีขนาดใหญ่กว่า

  • เอาท์พุทสัญลักษณ์ Unicode ☣คือไม่เพียงพอ

  • อัตราส่วนที่แน่นอนของระยะทางที่ใช้จะได้รับในแผนภาพต่อไปนี้ (ซึ่งมีพื้นเพมาจากที่นี่ ):

ฉันยังพยายามสร้างไดอะแกรมเพิ่มเติมด้วยการวัดแบบเดียวกันซึ่งหวังว่าจะอ่านง่ายขึ้นนิดหน่อย:

(แรงบันดาลใจจากการโพสต์ที่มองไม่เห็น 99% )


2
ช่องโหว่: เราสามารถวางภาพขนาด 1x1 พิกเซลภายในพื้นหลังขนาดตัวแปรได้หรือไม่?
John Dvorak

ฉันไม่คิดว่าจะเป็นเช่นนั้นหากคุณตั้งค่าความละเอียดให้ใหญ่พอที่สัญลักษณ์ควรจะปรากฏขึ้น และในกรณีใดฉันหวังว่าผู้คนที่นี่มีความรู้สึกร่วมกันมากพอที่จะเข้าใจในสิ่งที่เราหมายถึง :)
flawr

1
ถ้าฉันมีเวลาว่างฉันจะลองกับ PostScript หรือกราฟิกเต่า
Guy Coder

1
@ SriotchilismO'Zaic ความยาวถูกกำหนดโดยทั้งสองวงกลม: พวกเขาแต่ละคนมีจุดศูนย์กลางและรัศมีที่กำหนดดังนั้นความยาวจะถูกกำหนดโดยขนาดของช่องว่าง
ข้อบกพร่อง

1
นั่นคือ "E" ในแผนภาพดั้งเดิม (กากบาทแสดงถึงศูนย์กลางวงกลม) และในอันที่ฉันเพิ่มด้านล่าง (ซึ่งรัศมีตรงกับแกนสมมาตร) 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(@)

บันทึก 70+ ไบต์โดยใช้REPLACE()สำหรับคำหลักที่ยาวและดำเนินการเป็น SQL แบบไดนามิก ดูรหัสหลังการเปลี่ยนในภาพหน้าจอด้านล่าง

ฉันเพิ่มค่าพิกัดเป็นสองเท่าจากภาพตัวอย่างและเลื่อนขึ้น 9 หน่วยเพื่อลดจำนวนทศนิยมที่แสดง

สิ่งนี้ทำใน SQL 2017 โดยใช้คุณสมบัติทางภูมิศาสตร์เชิงพื้นที่ที่นำมาใช้ใน SQL 2008 ฟังก์ชันเรขาคณิตในตัวมีประโยชน์มากมายรวมถึงSTBufferซึ่งทำให้ฉันมีวิธีที่ง่ายในการกำหนดวงกลมที่มีขนาดต่างกันรอบ ๆ จุด

การแสดงผลด้วยรหัสอธิบายประกอบ:

สัญลักษณ์ Biohazard ใน T-SQL โดยใช้ฟังก์ชั่นทางภูมิศาสตร์

สำหรับการวาดภาพ T-SQL เพิ่มเติมโปรดดูที่กระต่ายอีสเตอร์ของฉัน

สำหรับแอปพลิเคชั่นที่ใช้งานได้จริงของเทคโนโลยีนี้ใน SQL อ่านบทความนี้หรือดูวิดีโอนี้ SE ยังมีเว็บไซต์ที่เกี่ยวข้องgis.stackexchange.com

การแก้ไข:

  1. บันทึก 1 ไบต์โดยเปลี่ยนพิกัดจาก 104 เป็น 99
  2. ที่บันทึกไว้ 15 ไบต์โดยการใช้STDifferenceของSTUnionของวัตถุแทนของแต่ละคน
  3. บันทึก 71 ไบต์โดยใช้REPLACE()กับคำหลักซ้ำแล้วเรียกใช้เป็น SQL แบบไดนามิก หวนกลับไปแก้ไข 2 STDifferenceที่จะออกจากทดแทนมากขึ้นของ
  4. บันทึกแล้ว 4 ไบต์โดยเลื่อนจุดศูนย์กลางขึ้นไป 9 ยูนิตซึ่งเปลี่ยนพิกัดเล็กน้อยเป็นหลักเดียว (ลบ) สิ่งนี้ยังทำให้ตัวเลขเพิ่มขึ้น5เพื่อใช้เป็นอักขระแทนแทน'#'ซึ่งจะช่วยประหยัด 2 ไบต์ในเครื่องหมายคำพูด
  5. บันทึก 5 ไบต์โดยเลื่อน)ไปที่STDifferenceสตริงการแทนที่ ขอบคุณ @Nicholas!

56
ทำไม ... มันมีอยู่จริง?
Alexander

26
@Alexander สำหรับฐานข้อมูลที่มีหรือใช้ข้อมูลทางภูมิศาสตร์เช่นการสำรวจประชากรหรือการศึกษาทางวิทยาศาสตร์หรือแม้แต่การขายของลูกค้าตามภูมิภาค หรือเพียงแค่วาดรูปกระต่ายและสัญลักษณ์ปลอดเชื้อ
BradC

24
SQL นั้นไม่ดีพอสำหรับสิ่งหนึ่งที่มีไว้สำหรับผู้ที่อยู่ในใจที่ถูกต้องของพวกเขาต้องการจะไปไกลกว่านั้น ลองนึกภาพ GUIs ที่เขียนใน SQL ฉันต้องการคำอธิบายประกอบแง่มุมและกรอบการทดสอบหน่วย เราต้องไปdeeeeeper
Alexander

24
@Alexander ตามที่คุณต้องการ: TSQLT
FreeMan

15
@FreeMan โอ้เพื่อประโยชน์ของ ...
Alexander

32

เท็กซ์ + Tikz, 232 ไบต์

บันทึก 43 ไบต์โดยสลับไปใช้ tex ขอบคุณ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

คำอธิบาย

นี่เป็นสิ่งที่ล้าสมัยนิดหน่อยฉันจะแก้ไขเมื่อฉันสามารถหาวิธีที่จะทำให้ภาพไม่ enourmous

ที่นี่ฉันจะอธิบายว่าคำตอบที่ไม่มีการบีบอัดแก้ปัญหาได้อย่างไร ในบางครั้งฉันอาจอธิบายว่าการบีบอัดทำงานอย่างไร ก่อนอื่นเราวาดวงกลมสีดำขนาดใหญ่:

\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
คุณไม่ได้ทื่อถึงจุดนอกทั้งหก ควรมีพื้นที่สีขาว 4 หน่วยระหว่างแต่ละคู่
Level River St

1
@LevelRiverSt จุดนอกทั้งหกนี้อยู่ห่างจากคู่ของพวกเขา 4 หน่วย
ตัวช่วยสร้างข้าวสาลี

2
"เคล็ดลับเล็บ" เหล่านั้นมีความแหลมเกินไปพวกเขาควรจะประกอบด้วยส่วนของเส้นตรงที่ขนานกับส่วนที่มาจากวงกลมกลาง นอกจากนี้ 20.88 ดูน่าสงสัยมาก
ข้อบกพร่อง

คุณสามารถบันทึกไบต์อื่นโดยใช้\1แทนการที่คุณสามารถใช้\x \def\f{\foreach\1in{90,210,330}}
Skillmon

1
@ flawr ดี ... ตอนนี้พวกเขาแท้จริงน้อยกว่า 5,000x5000 ... เพียง 90x90 ตอนนี้ ... แทบจะไม่สามารถทำรายละเอียด: D
เนลสัน

15

C, 8010 ไบต์

ย้อนกลับไปก่อน SVG หรือ EMF คุณต้องจัดการกับ raster และถ้าคุณต้องการบางสิ่งบางอย่างที่จะโหลดทันทีพูดก่อนที่ O / S พร้อมเช่นหน้าจอเริ่มต้นของ Windows คุณต้องใช้ RLE หรือรันไทม์ -encoding สัตว์ประหลาดนี้ส่งออกไฟล์ PBM โดยใช้ RLE เป็นข้อมูล ./biohazard > biohazard.pbmสร้างเหมือนปกติและเรียกเช่นนี้

หากคุณจะต้องรวมเฟรมเวิร์กทั้งหมดที่จำเป็นในการสร้างเช่นเอนจิน SVG ใน HTML, ไลบรารีของ Java และอื่น ๆ นี่น่าจะเป็นโซลูชันที่มีขนาดเล็กที่สุดในตัวเพราะ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
ข้าวสาลี Wizard

15

TeX + Ti k Z, 234 230 226 ไบต์

แต่เดิม 5 ไบต์ยาวกว่าคำตอบของ Sriotchilism O'Zaicแต่อันนี้ควรจะถูกต้อง มันคล้ายกับคำตอบของเขา แต่บันทึกไว้ไม่กี่ไบต์ที่นี่และที่นั่นต้องการอีกหนึ่ง\draw[line width=8](ในรหัสด้านล่างนี้ทำได้โดย\28](~30)to(~55);นั่นคือ 17 ไบต์เพิ่มเฉพาะสำหรับสิ่งนี้) เพื่อรับเคล็ดลับของสัญลักษณ์ที่ถูกต้องดังนั้น 5 ไบต์ความยาวรหัสโดยรวมมากขึ้น

และต้องขอบคุณ 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 ไบต์สั้นกว่าของคุณ ฉันแน่ใจว่าบางคนอาจรวมคำตอบของฉันกับบางคนเพื่อทำให้คำตอบสั้นลง แต่ฉันไม่ค่อยเข้าใจคำตอบของคุณ
ข้าวสาลี Wizard

@ SriotchilismO'Zaic ถ้าฉันเปลี่ยนสีเป็นสีแดง (กฎที่มากเกินไปว่าสีสามารถโดยพลการ) ฉันได้รับมันถึง 230 ไบต์
Skillmon

@ SriotchilismO'Zaic และเห็นได้ชัดว่าคุณบันทึกมากกว่าหนึ่งไบต์ในคำตอบของคุณโดยดูที่เหมือง (แค่พูด)
Skillmon

ตกลงฉันดูคำตอบของคุณและไม่เข้าใจสิ่งที่กำลังทำดังนั้นฉันไม่คิดว่าฉันจะได้รับประโยชน์จากคำตอบของคุณมากนัก แต่ฉันเปลี่ยนข้อความเพื่อลบหมายเลขที่แน่นอนอยู่แล้วเนื่องจากบางทีฉันอาจหยิบของจากคำตอบของคุณโดยไม่รู้ตัว
ข้าวสาลี Wizard

2
@ SriotchilismO'Zaic ไม่เป็นไร รหัสของฉันได้รับอิทธิพลจากคุณหลังจากนี้ฉันพยายามเขียนโค้ดแพคเกจการเล่นกอล์ฟเพื่อเปลี่ยน 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,000 ไบต์โดยใช้มาโครเป็นจำนวนมาก

โปรแกรม Shadertoy

ป้อนคำอธิบายรูปภาพที่นี่


1
ยินดีต้อนรับสู่เว็บไซต์! เรียบร้อยคำตอบแรก!
ข้าวสาลีตัวช่วยสร้าง

ผมไม่ทราบว่าภาษา แต่สามารถ&&และ||จะแข็งแรงเล่นกอล์ฟไป&และ|ในบางส่วนหรือทั้งหมดส่วน?
Kevin Cruijssen

@KevinCruijssen เป็นส่วนย่อยของ C ดังนั้นสิ่งเหล่านั้นจะเป็นการดำเนินการระดับบิต สำหรับฉันเรียบเรียงบ่นเกี่ยวกับประเภทแม้ว่า
Roninkoi

1
@ Roninkoi แน่นอนฉันเห็นว่ามันเป็นไปตาม C. ใน C มันเป็นไปได้ที่จะใช้|/ &แทน||/ &&สำหรับคนโง่ใช่ไหม? ยังไม่ได้ทำอะไรเลยใน C เป็นเวลานานดังนั้นไม่แน่ใจ ฉันรู้ว่ามันใช้งานได้ใน Java / C # .NET ในกรณีส่วนใหญ่ แต่ตอนนี้ฉันสังเกตเห็นลิงก์ Shadertoy ที่คุณเพิ่มและดูเหมือนจะไม่ทำงานตามที่คุณระบุไว้ อ่า คำตอบแรกที่ดี btw! ยินดีต้อนรับสู่ CGCC
Kevin Cruijssen

ฉันตัด -30 ไบต์ในรหัสที่โพสต์แล้วแต่ส่วนหัว sais 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

ตอนนี้ใช้ SVG ของ @ LevelRiverSt


1
ฉันเชื่อว่าการข้าม<defs>นั้นปลอดภัย สิ่งนี้ใช้ได้กับฉันใน Firefox, Chrome และ Edge
Arnauld

@ Arnauld ขอบคุณนั่นหมายความว่าฉันสามารถกำจัดคนแรก<use>ด้วย!
Neil

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

ฉันไม่แน่ใจว่าการประมวลผลควรนับเป็นแบบแรสเตอร์หรือไม่สำหรับจุดประสงค์ของการท้าทายนี้ หากนับเป็นแบบแรสเตอร์translateและscaleจำเป็นต้องทำให้สัญลักษณ์ชัดเจนและบนหน้าจอสำหรับขนาดหน้าต่างที่กำหนด แต่เนื่องจากคำสั่งการวาดทั้งหมดเป็นแบบเวกเตอร์จึงทำงานในระดับใดก็ตาม ดังนั้นหากเราสมมติว่าการวาดที่จุดกำเนิดสัมพัทธ์นั้นกว้างประมาณ 200 หน่วยก็ไม่เป็นไร 43 ไบต์แรกสามารถถูกดร็อปได้

นี่ถือว่าสีพื้นหลังคือ204, 204, 204ซึ่งเป็นสีพื้นหลังเริ่มต้นในการประมวลผล มันยังถือว่าเป็นrectModeของCORNERและellipseModeของCENTER(ค่าเริ่มต้น)

ด้วยการเริ่มต้นsize(640, 640)ร่างผลลัพธ์ที่มีลักษณะเช่นนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยการเพิ่มสเกลสองเท่าฉันได้บันทึก 3 ไบต์เนื่องจาก.5s ถูกกำจัด (แม้ว่าตัวเลขจำนวนมากจะไหลจาก 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!
ข้อบกพร่อง

ใช่ แต่นั่นก็จะเปลี่ยนตัวเลขหลักเดียวบางส่วนเป็นเลขสองหลักด้วยดังนั้นฉันไม่แน่ใจว่ายอดคงเหลือจะเป็นอย่างไร ถ้าฉันนับถูกต้องดูเหมือนว่าจะประหยัด 2 ไบต์ ฉันยังคิดที่จะใช้ a scaleเพื่อเปลี่ยนมันเพื่อเพียงส่วนหนึ่งของรหัส แต่ไม่แน่ใจว่าจะใส่มันไว้ที่ไหนดีที่สุด
Curtis Fenner

โอ้คุณพูดถูกฉันไม่ได้คิดอย่างนั้น
ข้อบกพร่อง

การวัดเพื่อลบทศนิยมเพิ่มขึ้นเป็นสองเท่าที่บันทึกไว้ในคำตอบของฉันเกือบ 10 ไบต์แม้ว่า coords สองสามตัวจะเปลี่ยนจากตัวเลขหนึ่งหลักเป็นสองหลัก คุ้มค่าที่จะลอง
BradC

1
ฉันบันทึก 3 ไบต์โดยเพิ่มสเกลที่วาดขึ้นเป็นสองเท่า @IsmaelMiguel
Curtis Fenner

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(; และผู้ที่อยู่ในช่วงของคุณถ้าคำสั่งโดยรอบ ANDs นี้→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 ไบต์

บันทึกจำนวนมากด้วยการใช้เวอร์ชันที่ย่อเล็กสุดของ@GG SVG ที่
บันทึกไว้ 2 ไบต์ด้วย @Shaggy

ไฟล์ SVG ที่บีบอัดจาก Wikimedia Commons

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

ลองออนไลน์! (เพียงเอาท์พุทสตริงที่คลายการบีบอัด)

ตัวอย่างการสาธิต


ใช้งานได้กับ CodePen ใน Chrome Android ในราคา 392
Shaggy

1
@Annauld ฉันได้กลับคำตอบของฉันแม้ว่าจะมีราคา 5 ไบต์ (ฉันพบไบต์ที่ไม่จำเป็นอื่น ๆ แต่โดยรวมแล้วคะแนนของฉันเพิ่มขึ้นเพียง 4)
Neil

@Neil อัปเดตตามนั้น ;)
Arnauld

ปรากฎว่า SVG ของ @ LevelRiverSt มีขนาดเล็กกว่ามาก!
Neil

7

Haskell , 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

สนุกมากเลย!

Biohazard

(ฉันต้องแปลงเป็น PNG เพื่ออัปโหลดเป็น imgur)

โดยทั่วไปเราสร้างฟังก์ชั่นกราฟิกแบบเวกเตอร์ของเราเองซึ่งแสดงผลเป็นพิกเซลภาพทีละพิกเซลโดยตรวจสอบว่าพิกเซลเป็นส่วนหนึ่งของรูปร่างหรือไม่ รูปร่างถูกสร้างขึ้นเป็นพวงของวงกลมและเส้น (แผ่กระจายจากแหล่งกำเนิด) ที่จัดขึ้นพร้อมกับการดำเนินงานชุดพื้นฐาน: สหภาพการแยกและไม่ วงกลมประกอบด้วยศูนย์กลางและรัศมีของพวกเขาและเส้นเหล่านั้นมีรัศมีต่ำสุดความกว้างและมุมตามลำดับ การตรวจจับการเป็นสมาชิกในแวดวงนั้นง่าย: ฉันแค่ลบพิกัดกลางและเปรียบเทียบขนาดกับรัศมี เส้นนั้นซับซ้อนกว่าเดิมเล็กน้อย: ฉันหมุนจุดตามมุมที่ตรงกันข้ามเพื่อนำมา (เพื่อทำให้การหมุนเป็นโมฆะ) จากนั้นฉันเพิ่งตรวจสอบว่าพิกัด x และ y อยู่ในช่วงที่คาดหวังหรือไม่ รัศมีต่ำสุดคือเพื่อให้แน่ใจว่าช่องว่างขนาดใหญ่ที่ปลายสุดของวงกลมขนาดใหญ่จะไม่ทับช่องว่างเล็ก ๆ ใกล้กับศูนย์กลาง หลังจากนั้นมันเป็นเรื่องง่ายของตรรกะบูลีนที่จะทำคณิตศาสตร์

แก้ไข: ขอบคุณมากที่ @flawr สำหรับการปิด 39 ไบต์!

แก้ไข 2: ขอบคุณมากที่ @ Christian Sievers สำหรับการปิด 55 ไบต์! ความคิดที่ดีทำให้พวกเขาเป็นฟังก์ชั่น

EDIT3: ขอขอบคุณ @ Christian Sievers อีกครั้งสำหรับการกำจัดไบต์อื่น!

EDIT4: ลบออก 7 ไบต์ด้วย @ H.PWiz และ @Angs!

EDIT5: เพิ่งสังเกตเห็นข้อบกพร่อง! ฉันเรนเดอร์เส้นหนาสองเท่าตามที่ควรจะเป็น! เสียค่าใช้จ่ายฉัน 2 ไบต์เพื่อแก้ไขมัน (ต้องหารความกว้างด้วย 2; สามารถปรับค่าคงที่ได้ แต่การเปลี่ยน 1 เป็น 0.5 จะมีค่าเท่ากับ 2)

EDIT6: ขอบคุณ @Ang ที่สละอีก 10 ไบต์!


ว้าวนี่มันเจ๋งมาก มันยากที่จะเห็นคนกำหนดประเภทของตัวเองในcode-golfที่นี่ :) คำถามสองข้อ: จำเป็น[-90,-210,-330]หรือไม่ที่จะต้องมีมุมลบ? และมันจะเป็นไปได้ที่จะเปลี่ยน<=ไป<?
ข้อบกพร่อง

1
ดังนั้นฉันจึงพยายามและโกนหนวดออกไปสองสามไบต์
ข้อผิดพลาด

1
โอ้ในกรณีที่คุณไม่ทราบเรามีการแชทฮาเซลล์และเคล็ดลับสำหรับการเล่นกอล์ฟในฮาสเคลล์
ข้อบกพร่อง



6

Ruby , 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})'/>"}

ลองออนไลน์!

สร้างรหัส SVG ด้านล่างโดยมีสัญลักษณ์อยู่ที่ 200% ของมาตราส่วนใน OP

มันประกอบด้วยวงกลมที่ด้านหลังและง่ามในเบื้องหน้า ง่ามถูกปรับขนาด-1,0,1ในXแกนและหมุนผ่านทวีคูณ 120 องศา กรณีที่Xปรับเป็นศูนย์ผลิตออกไม่มีในขณะที่และ-1 +1ให้ทั้งสองด้านของแต่ละง่าม

การใช้ทำจากเส้นขอบสีขาวกว้าง 2 หน่วยรอบ ๆ เขี้ยวเพื่อตัดวงกลมด้านหลังโดยใช้strokeและstroke-widthคุณลักษณะ เพื่อให้รูปร่างภายในเป็นไปตาม OP พิกัดจะถูกเคลื่อนย้ายโดย 1 หน่วย (ครึ่งความกว้างของเส้นขอบ) โปรดทราบว่าเส้นทางนั้นไม่ได้ถูกปิดอย่างจงใจเพื่อระงับการวาดภาพของเส้นสุดท้ายของเส้นขอบ สิ่งนี้ทำให้มั่นใจได้ว่าขาทั้งสองของแต่ละคู่จะรวมเข้าด้วยกัน

90 องศาของวงในถูกดึงมากกว่าที่คาดไว้ 60 เนื่องจากเหตุผลในการตีกอล์ฟ ซึ่งหมายความว่ามีบางส่วนที่ทับซ้อนกันระหว่างฐานของขาแต่ละคู่ แต่สิ่งนี้ไม่ส่งผลต่อลักษณะที่ปรากฏของรูปร่างขาออก

<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

PostScript , 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 ที่มี pygame, 327 314 287 278 bytes

(ประยุกต์ hacks ที่น่ารังเกียจต่างๆเพื่อประหยัด 13 ไบต์; สะดุดตาที่สุดไม่มีการจัดเก็บสี แต่คำนวณได้ทันทีด้วย-(r>25))
(refactored ฟังก์ชั่นการสูญเสียsys; hacked ออกmathในความโปรดปรานของการประสานงานคง; ปรับแต่งเล็ก ๆ น้อย ๆ ที่บันทึกไว้ 27 bytes)
(เขียนโค้ดประสานงาน ค่าคงที่เทคนิคทางคณิตศาสตร์ที่ซับซ้อนเพื่อรับ (ร่วม) ไซน์ , ประหยัด 9 ไบต์)

ฟังก์ชั่นที่รับอาร์กิวเมนต์จำนวนเต็มเดี่ยวแทนครึ่งหนึ่งของความกว้าง / ความสูงของภาพที่ได้ เช่นf(500)จะสร้างหน้าต่าง 1,000x1000 พิกเซลและวาดสัญลักษณ์ปลอดเชื้อในนั้น

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: การใช้ประโยชน์จากข้อเท็จจริงที่ pygame ตีความ0ว่าเป็นสีดำและ-1สีขาว

การวาดภาพทุกครั้งทำซ้ำสามครั้งหมุน 120 ° การรวมตัวของ "ก้ามปู" กับวงกลมอื่น "การตัดสาย" ด้านในได้รับการบรรจุเป็นพิเศษเพราะฉันไม่สามารถนึกถึงวิธีที่มีประสิทธิภาพมากขึ้นในการเข้าไปที่นั่น "หน่วยพื้นฐาน" ที่กำหนดไว้ในสเปคนั้นเพิ่มเป็นสองเท่าที่นี่ดังนั้นฉันจึงไม่จำเป็นต้องใช้ทั้ง.5ในcirclesและint()นอกสถานที่เพื่อตอบสนอง pygame

ผลลัพธ์สำหรับpython3 -c 'from biohazard import *; f(500)':

แสดงผลลัพธ์ของคำตอบนี้


1
ทำได้ดีมากและยินดีต้อนรับสู่ CGCC! คำอธิบายควรพูดว่า "Python 3 + pygame" เมื่อใช้ไลบรารี่ที่ไม่ใช่ builtin อินพุตสามารถนำมาจากอินพุตมาตรฐานหรือเป็นอาร์กิวเมนต์ฟังก์ชันเพื่อหลีกเลี่ยงการนำเข้าsysโมดูลซึ่งทำให้รหัสสั้นลง (ดูกฎ ) นอกจากนี้เคล็ดลับนี้mathสามารถนำมาใช้เพื่อหลีกเลี่ยงความต้องการของผู้นำเข้า
Joel

@ Joel ขอบคุณสำหรับข้อเสนอแนะ! ฉันรวม pygame ไว้ในส่วนหัวและแปลงรหัสเป็นฟังก์ชัน สำหรับmathฉันฉันยืนยันว่ารายการของพิกัดนั้น มันเป็นเพียง 3 ของพวกเขาต่อไป ไม่มี (ร่วม) ไซน์จำเป็น
marcelm

1
การใช้กลอุบายดังกล่าวข้างต้นจะช่วยประหยัดไบต์ได้มากกว่าการใส่ตัวเลขทั้งหมดลงในซอร์สโค้ด
Joel

@ 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.