วาดธงเกาหลีใต้


58

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

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

ที่มา: Wikipedia

ดังนั้นคุณจะต้องสร้างสิ่งก่อสร้างที่แน่นอนในตอนนี้

สเปค

คุณสามารถแสดงแฟล็กเป็นไฟล์หรือหน้าจอโดยใช้กราฟิกแบบเวกเตอร์หรือแรสเตอร์ หากเอาต์พุตของคุณ rasterised ภาพของคุณต้องมีขนาด 450x300 พิกเซลหรือมากกว่า

อัตราส่วนความยาวและตำแหน่งทั้งหมดจะต้องตรงตามที่แสดงในแผนภาพต่อไปนี้:

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

ที่มา: Wikipedia

โปรดทราบว่าจุดศูนย์กลางของวงกลมขนาดเล็กสองวงนั้นเรียงตามแนวทแยงมุม

สำหรับสีคุณต้องใช้พาเล็ตต่อไปนี้:

  • สีขาว: #FFFFFF
  • ดำ: # 000000
  • แดง: # C60C30
  • น้ำเงิน: # 003478

ขอบเขตสีดำจะต้องไม่ถูกวาดเว้นแต่ว่าระบบการวาดของคุณจะไม่อนุญาตให้คุณระบุผ้าใบ 3: 2 สำหรับเหตุผลทางเทคนิค (มิฉะนั้นคุณควรใช้ผ้าใบ 3: 2 และธงควรเติมทั้งหมด) หากคุณจำเป็นต้องเพิ่มขอบเขตมันอาจจะหนาโดยพลการ - ธงควรพิจารณาอย่างเข้มงวดภายในขอบเขตสีดำ บรรทัดความช่วยเหลือหรือตัวบ่งชี้ความยาวอื่น ๆ จะต้องไม่ถูกดึงออกมา เช่นธงควรปรากฏอย่างแน่นอนในภาพแรก

เกณฑ์การให้คะแนน

นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ

ในฐานะที่เป็นคำเตือนใช้การบีบอัดที่มีอยู่ (เช่นการฝัง GIF บีบอัด) ตกอยู่ในช่องโหว่หลายมาตรฐาน


2
น่าสนใจธงชาติเกาหลีมีรูปแบบเริ่มต้นของระบบเลขฐานสอง ( britton.disted.camosun.bc.ca/jbbinflag.htm )
britishtea

เราจำเป็นต้องวาดเส้นขอบหรือไม่เมื่อเราใช้หน้า HTML ที่ใหญ่กว่าธงเป็นสีขาวไม่มีการแยกปรากฏแม้ว่าขนาดผืนผ้าใบ / องค์ประกอบจะคล้ายกับธง
เครื่องมือเพิ่มประสิทธิภาพ

@Optimizer ไม่ถ้าผืนผ้าใบมีขอบเขตในลักษณะที่สามารถมองเห็นได้ (เช่นโดยการเน้นองค์ประกอบ "ตรวจสอบ" ของเบราว์เซอร์) คุณก็ไม่จำเป็นต้องมีขอบเขต ควรวาดเส้นขอบสีดำในกรณีที่ไม่ค่อยเกิดขึ้นซึ่งไม่สามารถกำหนดขอบเขตของผ้าใบได้ในทางเทคนิค
Martin Ender

3
ฉันถือว่าCountryData["ROK","Flag"]ไม่นับ
wchargin

คำตอบ:


13

PHP / HTML / SVG, 324

(เพิ่มตัวแบ่งบรรทัดเพื่อความชัดเจน)

<?=gzinflate(base64_decode('tVHBioMwFPyVwF5WSOzLi/tswQjdu9cevIk1KqtriaFd9utrgpSWFva0PPImMwzDkGTz
uWXnvrl8Tj8aOPAUebLNs5Y5W33PZrKjtpOrXPOuVEy7KMiD54mKMY3yrO5tPTTMaonM9MOg32qCWgHb5Nmpch076kIih/2y
PC4jRRCIU6BhbkwGV7lmAagk3d5nCfwQdKByVBwOFLagQu6exZLNzk5fjU+B9S4u/dF1Gh/apRw6Cb83uzHm0S69/cWbSIkx
YfSf5QT6dkk5UoACIeAfXTftepb/za8='));

ข้อมูลที่ถูกบีบอัดขยายไปยังข้อมูล SVG เดียวกันกับคำตอบก่อนหน้าของฉันที่แสดงด้านล่าง แต่มีการเปลี่ยนแปลงสองประการเพื่อช่วยในการบีบอัด

  1. ทั้งสอง<use>ส่วนจะขยายไปยังเนื้อหาต้นฉบับของ<defs>ส่วน สิ่งนี้ทำให้ข้อความต้นฉบับยาวขึ้น แต่ลดเอนโทรปีดังนั้นมันจึงบีบอัดได้ดีขึ้น

  2. ในครั้งแรกที่<g>องค์ประกอบผมเปลี่ยนไปtransform=translate(36,24)rotate(33.69) transform=rotate(33.69)translate(43.27)สิ่งนี้มีเอฟเฟกต์แบบเรขาคณิต แต่บีบอัดได้ดีกว่าเพราะ><g transform=rotate(ตอนนี้ลำดับปรากฏขึ้นสองครั้ง

โดยค่าเริ่มต้น PHP จะให้บริการสิ่งนี้เป็นContent-Type: text/htmlดังนั้นไวยากรณ์ XML ที่ไม่ถูกต้องไม่ควรเป็นปัญหา

SVG / HTML, 463

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

<svg viewBox=0,0,72,48><defs><path d=M-25-6V6Zm3,0V6m3,0V-6M19-6V6Zm3,0V6m3,0V-6Z stroke=#000
stroke-width=2 id=p /></defs><g transform=translate(36,24)rotate(33.69)><circle r=12 fill=#c60c30
/><path d=M12,0A12,12,0,0,1-12,0A6,6,0,0,0,0,0A6,6,0,0,1,12,0Z fill=#003478 /><use xlink:href=#p
/><path d=M17,0h10z stroke=#fff stroke-width=1 /><g transform=rotate(112.62)><use xlink:href=#p
/><path d=M-27,0h4Zm6,0h4ZM20,0h4Z stroke=#fff stroke-width=1 /></g></g></svg>


44

Python + Pycairo 371 370 366 ไบต์

ธง

from cairo import*
p=3.141593
c=Context(SVGSurface("F",12,8))
C=c.set_source_rgb;R=c.rectangle;T=c.rotate;F=c.fill
C(1,1,1);R(0,0,12,8);F()
c.translate(6,4);T(.588);b=3188
for o in[(0,.2,.47),(.77,.05,.19)]*2:C(*o);i=b/2%2;b+=1;c.arc(i,0,2-i,0,p+i*p);F();T(p)
C(0,0,0)
for x in(p,1.966)*2:
 for y in.5,0,1:
    for z in-1,1:R(3+y,-z,1./3,z*(2.75+b%2)/3);F()
    b/=2
 T(x)

เอาท์พุทไฟล์ SVG เล็ก ๆ Fชื่อ


C(*[.77,0,.05,.2,.19,.47][i::2])สั้นกว่าC(*[(.77,.05,.19),(0,.2,.47)][i%2])
isaacg

ทำไมคุณเขียนs=SVGSurface("F",12,8);c=Context(s)แทนที่จะเป็นเพียงแค่c=Context(SVGSurface("F",12,8))?
Lily Chung

@IstvanChung จุดที่ดี
Ell

32

HTML + CSS, 966 906 843 792 762 ไบต์

ไม่ใช่ผู้ชนะทุกเวลา แต่มีความสนุกสนานมากมายในการวาด CSS นี้สามารถเล่นกอล์ฟได้มากแม้ว่า

CSS, HTML :

*{position:fixed}a{background:linear-gradient(0deg,#003478 50%,#C60C30 50%);width:2in;height:2in;transform:rotate(.6rad);top:1in;left:2in}d,e{width:50%;height:50%;background:#C60C30;left:0;top:25%}a,d,e{border-radius:50%}d{background:#003478;left:50%}b,i{width:1in;height:26em;top:-1em;left:15em;transform:rotate(.98rad)}g,f,k,j{width:1in;height:17%;background:repeating-linear-gradient(0deg,#000,#000 1em,#fff 1em,#fff 1.5em);bottom:0;left:0}g,j,p{top:-.5em}b{transform:rotate(-.98rad)}c,p,v,x{height:2em;width:.5em;background:#fff;transform:rotate(.98rad)}p{top:2.8in;left:28em;transform:rotate(-.98rad) scale(1,4)}x{top:3.9em;left:28.4em}c,v{top:23.8em;transform:none}c{top:3.5em}body{height:4in;width:6in;border:1px solid
<a><d><e></a><b><f><g></b><i><j><k></i><p></p><x><v><c

;border:1px solidเป็นเพียงการแสดงเนื่องจาก<body>แท็กมีขอบเขตที่ชัดเจนซึ่งสามารถตรวจสอบได้โดยผู้ตรวจสอบหรือเครื่องมือที่คล้ายกันตามที่ระบุโดย OP

หมายเหตุใช้งานได้เฉพาะใน Firefox (หรือ Chrome canary / dev) เนื่องจากการใช้งานที่ไม่ใช่การแปลงและการไล่ระดับสีเฉพาะของผู้ขาย

เห็นมันในการกระทำ


ฉันคิดว่าคุณควรรวมแท็ก <link> หรือ <style> ไว้ในตัวละครของคุณ คุณสามารถบันทึกไม่กี่ตัวอักษรใน CSS 0deg-> 0(สอง) และลบจากleft:0 a:beforeในรูปแบบ HTML <p><ul></ul>คุณสามารถใช้ ( <p>จะปิดโดยปริยายก่อน<ul>)
gronostaj

1
ใช้งานได้ใน Firefox 32 ล้มเหลวอย่างน่าทึ่งใน Safari 7.1
200_success

1
ใช้ LESS หรือ SASS สำหรับ CSS ซึ่งควรมีตัวเลือกให้คุณมากมายเพื่อย่อให้สั้นลง นอกจากนี้:before{content:''}และ:after{content:''}มีความยาวมากกว่าแค่การเพิ่มองค์ประกอบอื่น (แม้จะดูดีกว่านี้แน่นอน)
David Mulder

@DavidMulder ฉันต้องการปัจจัยความสนุกสนานในเรื่องนี้มากกว่ารหัสที่สั้นกว่า ผู้คนสามารถเกี่ยวข้องกับ CSS บริสุทธิ์ได้ง่ายกว่า LESS หรือ SASS :)
เครื่องมือเพิ่มประสิทธิภาพ

ใช้งานได้กับ Chrome ล่าสุดเช่นกัน @ 200_ ความสำเร็จคุณควรจะสามารถใช้งานได้ใน Safari โดยการเพิ่ม-webkit-ก่อนหน้าทั้งหมดtransform:แต่ไม่จำเป็นต้องบอกว่าจะทำให้ใช้งานได้นานขึ้น!
Doorknob

20

BBC Basic, 349 343 ตัวอักษร ASCII, ขนาดไฟล์โทเค็น 330

ดาวน์โหลดโปรแกรมจำลองที่http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

  p=1049q=25r=100VDU4118;275;-1,49,3076;19,7,-1;-1;531;255;7693;q;40;0;q,97,1200;800;29,640;400;
  FORa=38TO56STEP0.01x=r*COS(a)y=r*SIN(a)b=a*7DIV44/2IFb=3.5z=y<0ELSEz=x>0
  VDU18;1,p;-x;-y;q,153,r;0;18;2,p;x;y;q,153,r;0;18;0
  IFABS(y)DIV1=56VDUp;x*b+y;y*b-x;q;x/3;y/3;q,113,-2*y;2*x;18;7:b-=0.1VDUp;x*b+y/12;y*b-x/12;q;x/2;y/2;q,112-z,-y/6;x/6;
  NEXT

การใช้สีที่ถูกต้องนั้นเพิ่มจำนวนมาก แต่การเล่นคำสั่งกราฟิกทั้งหมดลงในรหัส VDU แบบดิบจะช่วยให้ประหยัดได้ถึง 6 ตัวอักษรโดยรวมเมื่อเทียบกับโพสต์ต้นฉบับของฉัน กราฟิกทั้งหมดบนไมโครบีบีซีทำผ่านรหัสควบคุม ASCII เฉพาะเครื่องดังนั้นแทนที่จะใช้คำสั่งกราฟิกระดับสูงคุณสามารถป้อนไบต์โดยตรงไปยังตัวควบคุม VDU (โดยทั่วไปจะสั้นกว่า แต่มีค่าใช้จ่ายสูงในการอ่าน) ค่าที่ลงท้ายด้วยเซมิโคลอนแทนเครื่องหมายคอมมาคือการแทนค่าบิตเอนด์ 16 บิตขนาด 2 ไบต์

เวอร์ชันที่ไม่ดี

  MODE16
  VDU19,1,-1,49,4,12                :REM adjust shade of red 
  VDU19,7,-1,-1,-1,-1               :REM adjust shade of white to full brightness (63 is 2's complement representation of -1
  VDU19,4,-1,0,13,30                :REM adjust shade of blue
  RECTANGLEFILL40,0,1200,800        :REM plot background rectangle
  ORIGIN640,400
  FORa=38TO56STEP0.01
    x=COS(a)*100
    y=SIN(a)*100
    GCOL1:CIRCLEFILL-x,-y,100       :REM red
    GCOL4:CIRCLEFILLx,y,100         :REM blue
    GCOL0                           :REM black
    b=a*7DIV44/2                    :REM divide a by 2*(22/7) to get integer representation, then divide by 2 again.
    IFb=3.5THENz=y<0ELSEz=x>0       :REM decide whether to cut bar
    REM If the angle is correct (100*sin(a) = 56) draw bar. If required, cut out the middle of the bar.
    IFABS(INT(y))=56 MOVEx*b+y,y*b-x:MOVEBY x/3,y/3:PLOT113,-2*y,2*x:GCOL7:b-=0.1:MOVEx*b+y/12,y*b-x/12:MOVEBY x/2,y/2:IFz PLOT113,-y/6,x/6
  NEXT

ที่จุดเริ่มต้นของโปรแกรมฉันย้ายต้นกำเนิดไปที่กึ่งกลางของหน้าจอ

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

เมื่อมุมที่ถูกต้องฉันวาดหนึ่งในบาร์ เวกเตอร์ x, y สำหรับการวาดวงกลมสีน้ำเงินเล็ก ๆ ในปัจจุบันทำหน้าที่บอกทิศทางที่แถบควรจะเป็น สำหรับการปฏิวัติ 3 ครั้งแต่ละครั้งa*7DIV44จะมีการคำนวณค่าที่แตกต่างกันของจำนวนเต็มซึ่งบอกว่าควรจะวาดแท่งแรกที่สองหรือที่สามโดยมีขอบด้านใน 6 / 8,7 / 8 หรือ 8/8 หน่วยจากศูนย์กลาง ( ตามหน่วยที่ใช้ในข้อมูลจำเพาะคำถาม) เนื่องจากหน่วยโปรแกรมเป็น 1/4 ของหน่วยในข้อมูลจำเพาะนี้ยังคงเป็นหน่วยครึ่งดังนั้นเราจึงหาร 2 อีกครั้งก่อนบันทึกเป็นตัวแปร´b´ เพื่อหลีกเลี่ยงการแบ่งครึ่งซ้ำ ๆ ต่อมา

แท่งจะถูกดึงให้แข็งจากนั้นจะลบตรงกลางหากจำเป็น วิธีนี้ช่วยป้องกันไม่ให้ kinks เข้าร่วมครึ่งบาร์ ตัวแปร z บ่งบอกว่าควรตัดบาร์หรือไม่ นั่นคือเมื่อ y เป็นลบสำหรับแถบกลางและเมื่อ x เป็นบวกสำหรับแถบอื่น

MOVEเป็นการย้ายที่แน่นอน MOVEBYเป็นการย้ายแบบสัมพัทธ์ PLOT133พิจารณาตำแหน่งเคอร์เซอร์กราฟิกสองครั้งล่าสุดรวมทั้งตำแหน่งใหม่ที่ระบุ (ในพิกัดเชิงสัมพันธ์) เป็นสามมุมของสี่เหลี่ยมด้านขนานและแปลงสี่เหลี่ยมด้านขนานนั้น

เอาท์พุท (& การอภิปรายข้อ จำกัด ทางภาษา)

ฉันเลือกโหมดหน้าจอ 1280x800 พิกเซลเชิงตรรกะ = 640x400 พิกเซลทางกายภาพซึ่งโดยปกติแล้วจะมีพื้นหลังสีดำ บนนี้ฉันวาดสี่เหลี่ยมสีขาวจาก -600, -400 ถึง 600,400 เพื่อทำหน้าที่เป็น "ผ้าใบ" ของฉัน

BBC Basic สามารถจัดการกับ 16 สีในครั้งเดียวจาก palette ที่สามารถโปรแกรมได้ แต่รองรับเฉพาะสี 18 บิตในขณะที่คำถามระบุสีเป็น 24 บิต สีใกล้เคียงที่สุด

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


2
ฉันได้สร้างสเปคใหม่เกี่ยวกับขอบเขตเล็กน้อย วิธีที่คุณจัดการมันสวยมากอย่างที่ฉันตั้งใจไว้
Martin Ender

16

Python 3 เต่า ( 552 549 ไบต์)

ธง

( ภาพขนาดเต็ม )

แก้ไข:ตอนนี้เรามีเกร็ดเล็กเกร็ดน้อย Stack นี่คือการทดสอบกอง Snippet ใช้Skulptด้วยความช่วยเหลือของคำตอบ ArtOfCode ของที่นี่ น่าเสียดายที่ Skulpt ยังไม่ได้ใช้ Python อย่างสมบูรณ์ดังนั้นฉันจึงต้องทำให้รหัสของฉันล้มเหลวเพื่อให้ได้ผล กล่าวคือตัวอย่างข้อมูลนี้มีไว้เพื่อระบุว่าโปรแกรมของฉันทำงานอย่างไร (โดยไม่จำเป็นต้องดึง Python ขึ้นมา)

(นอกจากนี้ฉันพบว่านี่อาจใช้งานไม่ได้กับบางเบราว์เซอร์ ... )

function out(a){var b=document.getElementById("output");b.innerHTML+=a}function builtinRead(a){if(void 0===Sk.builtinFiles||void 0===Sk.builtinFiles.files[a])throw"File not found: '"+a+"'";return Sk.builtinFiles.files[a]}
$(document).ready(function run(){Sk.canvas="canvas";Sk.configure({output:out,read:builtinRead});try{Sk.importMainWithBody("<stdin>",!1,'import turtle\nimport math\nt=turtle.Turtle()\nt.speed(9)\nR="#c60c30"\nr=56.3\nk=0.6\ns=60*k\noffsetx,offsety=-215,-145\nt.up()\nt.goto(offsetx,offsety)\nt.down()\ndef q():t.rt(90)\ndef Q():t.lt(90)\ndef K():t.color("black");t.begin_fill();q()\ndef A(g,G):t.fd(g);Q();t.fd(G);Q();t.fd(g);Q();t.fd(G);Q()\ndef E():t.up();t.fd(s);t.down();Q();t.end_fill();t.up();t.fd(30*k);t.down();\ndef i():K();t.up();t.bk(s);t.down();A(120*k,20*k);E()\ndef I():K();t.up();t.fd(5*k);t.down();A(55*k,20*k);t.up();t.bk(65*k);t.down();A(55*k,20*k);E()\ndef C():t.circle(120*k,180)\nA(720*k,480*k)\nt.seth(r)\nt.up()\nt.goto(459.8*k+offsetx,173.4*k+offsety)\nt.down()\nt.color(R)\nt.begin_fill()\nC()\nt.end_fill()\nt.begin_fill()\nt.color("#003478")\nC()\nt.circle(s)\nt.end_fill()\nt.color(R)\nC()\nt.begin_fill()\nt.circle(s)\nt.end_fill()\nq()\nt.up()\nt.fd(s)\nt.down()\ni()\ni()\ni()\nt.up()\nt.bk(530*k)\nt.down()\nI()\nI()\nI()\nt.up()\nt.fd(170*k)\nt.rt(2*r)\nt.fd(180*k)\nt.down()\nI()\ni()\nI()\nt.up()\nt.bk(530*k)\nt.down()\ni()\nI()\ni()\n')}catch(a){throw Error(a.toString());}})
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script><script src="http://www.skulpt.org/static/skulpt.min.js" type="text/javascript"></script><script src="http://www.skulpt.org/static/skulpt-stdlib.js" type="text/javascript"></script>
<canvas height="320" width="480" id="canvas" style="border:1px solid gray">Your browser does not support HTML5 Canvas!</canvas>


รหัสจริง:

import turtle as t
b=t.begin_fill
c=t.circle
e=t.end_fill
f=t.fillcolor
R="#c60c30"
r=56.3
F=t.fd
B=t.bk
s=60
def q():t.rt(90)
def Q():t.lt(90)
def K():f(0,0,0);b();q()
def A(g,G):exec("F(g);Q();F(G);Q();"*2)
def E():F(s);Q();e();F(30)
def i():K();B(s);A(120,20);E()
def I():K();F(5);A(55,20);B(65);A(55,20);E()
def C():c(120,180)
A(720,480)
t.seth(r)
t.up()
t.goto(459.8,173.4)
f(R)
b()
C()
e()
b()
f("#003478")
C()
c(s)
e()
C()
f(R)
b()
c(s)
e()
q()
F(s)
i()
i()
i()
B(530)
I()
I()
I()
F(170)
t.rt(2*r)
F(180)
I()
i()
I()
B(530)
i()
I()
i()
t.ht()

เนื่องจากเต่าช้าเช่นนี้หากคุณต้องการผลลัพธ์แบบทันทีคุณสามารถเพิ่มt.tracer(0)หลังจากบรรทัดแรกก่อนที่คุณจะเรียกใช้สคริปต์

หมายเหตุ: ด้วยเหตุผลบางอย่างเต่ายังคงวาดสิ่งที่ดูเหมือนพิกเซลสีดำพิเศษแม้ว่าฉันจะได้เรียกแล้วup()และฉันก็ไม่รู้ว่าทำไม ...


ฉันเชื่อว่ามีคนใช้ Python (ที่มีเต่า!) ในโพสต์ Stack Snippets หากคุณต้องการทราบว่าคุณสามารถเป็นหนึ่งในคนแรกที่ใช้คุณลักษณะใหม่นี้! ;)
Doorknob

@Doorknob ฉันต้องทำลายรหัสครึ่งหนึ่งของฉันเพื่อให้มันทำสิ่งที่ฉันต้องการได้อย่างชัดเจน แต่อย่างน้อยที่สุดมันก็ทำสิ่งเดียวกันกับใน Python (แต่ Chrome ใช้งานไม่ได้ด้วยเหตุผลบางอย่าง ... )
Sp3000

2
ทำงานได้ดีบน Chrome iOS ดีใจที่พบว่ามีคนพบว่ามีประโยชน์สำหรับโครงการของฉัน :)
ArtOfCode

14

HTML + ES6, 388

<canvas id=D width=576 height=384><script>c=D.getContext('2d')
T=x=>c.translate(x*72,x*48)
R=(x,y)=>T(4)+c.rotate(x*.59)+T(-4)+eval('for(i=j=0;i*j<6;i+=(j^=1))c.fillRect(72+24*i+(i>2)*288,144+j*52,16,44+52*(y>>i&1-j))')
A=(w,x,y,z)=>(c.fillStyle=c.fill()+c.beginPath()||w)*c.arc(x*4,192-y,48*y,0,3.1,z)||A
R(-1,21)
R(2,7)
A(r='#C60C30',72,2,1)('#003478',72,2)(0,84,1,1)(r,60,1)()</script>

หากเบราว์เซอร์ของคุณรองรับ ES6 คุณสามารถดูได้บน JSFiddleหรือเรียกใช้ข้อมูลโค้ด

มันสร้างธงออกมาจากรูปร่างพื้นฐานบางอย่างหมุนผืนผ้าใบก่อนเพื่อพิจารณามุม


เพียงแค่ทราบว่าสิ่งนี้ไม่ทำงานใน Chrome 39 ทำงานได้ดีใน FF> 29
JBCP

<canvas width=576 height=384 id=D><script>c=D.getContext('2d')น้อยกว่า 9 ไบต์ นอกจากนี้เนื่องจากหน้าทั้งหมดเป็นสีขาวฉันคิดว่าคุณต้องวาดเส้นขอบ
เครื่องมือเพิ่มประสิทธิภาพ

@Optimizer ขอบคุณ ดังที่ฉันเข้าใจแล้วว่ามันจำเป็นต้องใช้เส้นขอบเมื่อคุณมีผืนผ้าใบที่ไม่มีที่สิ้นสุด
grc

5
คุณสามารถทดลองใช้งานได้ด้วย Stack Snippets!
Beta Decay

@BetaDecay มันใช้งานได้จริง: o
grc

6

Mathematica 404 450

b=1&~Array~13;a=ReplacePart[b,7-> 0];d=Disk;r=RGBColor;
z@{q_,p_,s_}:=ArrayPlot[{q,q,{},p,p,{},s,s},Frame-> False,ImageSize-> 155];
m=r@@{0,.2,.5};
o=r@@{.8,0,.2};
t=-19.1;u=-12.75;v=-5;q=-3.33;
Graphics[{Line[{{-36,-24},{36,-24},{36,24},{-36,24},{-36,-24}}],
Inset[Rotate[z@#,#2 125 Degree],#3]&@@@{{{b,a,b},1,{t,u}},{{a,b,a},1,{-t,-u}},
{{a,a,a},-1,{-t,u}},{{b,b,b},-1,{t,-u}}},
{o,d[{0,0},12,{-.2 Pi,.8Pi}],m, d[{0,0},12,{.8Pi,1.8Pi}],o,d[{v,-q},6],m,d[{-v,q},6]}}]

ธง


3

C ++ ขนาดใหญ่เกินไป

ความพยายามนี้โดยใช้บ้านของฉันทำห้องสมุดการวาดภาพ PPM มันปรับขนาดได้ทางเทคนิค แต่ฉันถูก จำกัด ด้วยฟังก์ชั่นเติมแบบเรียกซ้ำเพราะมันไม่น่าเชื่อถือและชอบ segfault ฉันคิดว่ามันใช้หน่วยความจำมากเกินไปดังนั้นฉันจะไม่ให้ผู้ใช้ตั้งค่าสเกล รูปภาพไม่สม่ำเสมอเนื่องจากพิกัดที่ฉันป้อนสำหรับแต่ละมุมของแท่งถูกปิดเล็กน้อย ป้อนคำอธิบายรูปภาพที่นี่

ฉันตั้งค่าให้เริ่มต้นด้วยพื้นหลังสีดำจากนั้นใส่วงกลมสีขาวตรงกลางจากนั้นวงกลมสีแดงและสีน้ำเงินในนั้น ใช้การเรียกซ้ำเพื่อเพิ่มส่วนที่เหลือของสีแดงและสีน้ำเงิน จากนั้นดึงสี่เหลี่ยมที่มีเส้นสีขาวเพื่อทำเครื่องหมายแถบสีดำ แยกพื้นหลังสีดำออกเป็น 4 ส่วนด้วยเส้นสีขาวและใช้การเติมซ้ำ 4 ครั้งเพื่อทำให้แต่ละส่วนเป็นสีขาว การทำเช่นนี้ใน 1 รอบจะทำให้เกิด segfault มันยังช้ามากในการแสดงผล

รหัสหลักที่ไม่ดี (ส่วนที่เหลือของห้องสมุดใหญ่เกินไปการตีกอล์ฟไม่สำคัญ)

#include "PPMDraw.h"
#include <iostream>

int main(){
    std::cout << "Drawing Korean Flag" << std::endl;

    int scale = 150;
    int width = 3 * scale;
    int height = 2 * scale;

    int xc = width/2;
    int yc = height/2;

    // coords for the bar corners
    float nwax = -0.773; float nway = -0.813;
    float nwbx = -0.707; float nwby = -0.773;
    float nwcx = -1.000; float nwcy = -0.360;
    float nwdx = -1.050; float nwdy = -0.400;
    float nwex = -0.667; float nwey = -0.747;
    float nwfx = -0.613; float nwfy = -0.693;
    float nwgx = -0.880; float nwgy = -0.293;
    float nwhx = -0.947; float nwhy = -0.333;
    float nwix = -0.560; float nwiy = -0.667;
    float nwjx = -0.507; float nwjy = -0.627;
    float nwkx = -0.773; float nwky = -0.227;
    float nwlx = -0.840; float nwly = -0.267;

    float neax = 0.747; float neay = -0.813;
    float nebx = 0.867; float neby = -0.627;
    float necx = 0.813; float necy = -0.587;
    float nedx = 0.680; float nedy = -0.773;
    float neex = 0.893; float neey = -0.587;
    float nefx = 1.030; float nefy = -0.400;
    float negx = 0.960; float negy = -0.360;
    float nehx = 0.840; float nehy = -0.547;
    float neix = 0.640; float neiy = -0.747;
    float nejx = 0.920; float nejy = -0.333;
    float nekx = 0.853; float neky = -0.293;
    float nelx = 0.587; float nely = -0.693;
    float nemx = 0.533; float nemy = -0.667;
    float nenx = 0.667; float neny = -0.493;
    float neox = 0.600; float neoy = -0.440;
    float nepx = 0.480; float nepy = -0.627;
    float neqx = 0.693; float neqy = -0.440;
    float nerx = 0.813; float nery = -0.267;
    float nesx = 0.747; float nesy = -0.227;
    float netx = 0.627; float nety = -0.400;

    float swax = -0.773; float sway = 0.200;
    float swbx = -0.507; float swby = 0.613;
    float swcx = -0.560; float swcy = 0.653;
    float swdx = -0.840; float swdy = 0.253;
    float swex = -0.880; float swey = 0.280;
    float swfx = -0.760; float swfy = 0.453;
    float swgx = -0.813; float swgy = 0.493;
    float swhx = -0.947; float swhy = 0.320;
    float swix = -0.733; float swiy = 0.507;
    float swjx = -0.613; float swjy = 0.680;
    float swkx = -0.667; float swky = 0.720;
    float swlx = -0.787; float swly = 0.547;
    float swmx = -0.987; float swmy = 0.347;
    float swnx = -0.707; float swny = 0.760;
    float swox = -0.773; float swoy = 0.800;
    float swpx = -1.053; float swpy = 0.387;

    float seax = 0.747; float seay = 0.200;
    float sebx = 0.813; float seby = 0.253;
    float secx = 0.693; float secy = 0.427;
    float sedx = 0.627; float sedy = 0.387;
    float seex = 0.853; float seey = 0.280;
    float sefx = 0.920; float sefy = 0.320;
    float segx = 0.800; float segy = 0.507;
    float sehx = 0.733; float sehy = 0.453;
    float seix = 0.960; float seiy = 0.347;
    float sejx = 1.036; float sejy = 0.387;
    float sekx = 0.893; float seky = 0.573;
    float selx = 0.840; float sely = 0.520;
    float semx = 0.600; float semy = 0.427;
    float senx = 0.667; float seny = 0.467;
    float seox = 0.547; float seoy = 0.653;
    float sepx = 0.480; float sepy = 0.613;
    float seqx = 0.707; float seqy = 0.493;
    float serx = 0.773; float sery = 0.547;
    float sesx = 0.640; float sesy = 0.733;
    float setx = 0.547; float sety = 0.680;
    float seux = 0.813; float seuy = 0.573;
    float sevx = 0.880; float sevy = 0.613;
    float sewx = 0.747; float sewy = 0.800;
    float sexx = 0.693; float sexy = 0.747;

    PPMDraw flag = PPMDraw(width, height);
    flag.fill(0, 0, 0);

    // draw white circle in middle
    flag.set_color(255, 255, 255);
    flag.draw_fill_circle(xc, yc, scale/2);

    // draw red and blue portions of circle
    flag.set_color(255, 0, 0);
    flag.draw_fill_circle(xc - .21*scale, yc - .14*scale, scale/3.9);
    flag.set_color(0, 0, 255);
    flag.draw_fill_circle(xc + .21*scale, yc + .14*scale, scale/3.9);
    flag.set_color(255, 0, 0);
    flag.recursive_fill(xc + .21*scale, yc - .21*scale);
    flag.set_color(0, 0, 255);
    flag.recursive_fill(xc - .21*scale, yc + .21*scale);

    // draw the northwest bars
    flag.set_color(255, 255, 255);

    flag.draw_line(xc + nwax*scale, yc + nway*scale, xc + nwbx*scale, yc + nwby*scale);
    flag.draw_line(xc + nwax*scale, yc + nway*scale, xc + nwdx*scale, yc + nwdy*scale);
    flag.draw_line(xc + nwbx*scale, yc + nwby*scale, xc + nwcx*scale, yc + nwcy*scale);
    flag.draw_line(xc + nwcx*scale, yc + nwcy*scale, xc + nwdx*scale, yc + nwdy*scale);

    flag.draw_line(xc + nwex*scale, yc + nwey*scale, xc + nwfx*scale, yc + nwfy*scale);
    flag.draw_line(xc + nwex*scale, yc + nwey*scale, xc + nwhx*scale, yc + nwhy*scale);
    flag.draw_line(xc + nwfx*scale, yc + nwfy*scale, xc + nwgx*scale, yc + nwgy*scale);
    flag.draw_line(xc + nwhx*scale, yc + nwhy*scale, xc + nwgx*scale, yc + nwgy*scale);

    flag.draw_line(xc + nwix*scale, yc + nwiy*scale, xc + nwjx*scale, yc + nwjy*scale);
    flag.draw_line(xc + nwix*scale, yc + nwiy*scale, xc + nwlx*scale, yc + nwly*scale);
    flag.draw_line(xc + nwjx*scale, yc + nwjy*scale, xc + nwkx*scale, yc + nwky*scale);
    flag.draw_line(xc + nwlx*scale, yc + nwly*scale, xc + nwkx*scale, yc + nwky*scale);
    //NE
    flag.draw_line(xc + neax*scale, yc + neay*scale, xc + nebx*scale, yc + neby*scale);
    flag.draw_line(xc + neax*scale, yc + neay*scale, xc + nedx*scale, yc + nedy*scale);
    flag.draw_line(xc + nebx*scale, yc + neby*scale, xc + necx*scale, yc + necy*scale);
    flag.draw_line(xc + necx*scale, yc + necy*scale, xc + nedx*scale, yc + nedy*scale);

    flag.draw_line(xc + neex*scale, yc + neey*scale, xc + nefx*scale, yc + nefy*scale);
    flag.draw_line(xc + neex*scale, yc + neey*scale, xc + nehx*scale, yc + nehy*scale);
    flag.draw_line(xc + nefx*scale, yc + nefy*scale, xc + negx*scale, yc + negy*scale);
    flag.draw_line(xc + nehx*scale, yc + nehy*scale, xc + negx*scale, yc + negy*scale);

    flag.draw_line(xc + neix*scale, yc + neiy*scale, xc + nejx*scale, yc + nejy*scale);
    flag.draw_line(xc + neix*scale, yc + neiy*scale, xc + nelx*scale, yc + nely*scale);
    flag.draw_line(xc + nejx*scale, yc + nejy*scale, xc + nekx*scale, yc + neky*scale);
    flag.draw_line(xc + nelx*scale, yc + nely*scale, xc + nekx*scale, yc + neky*scale);

    flag.draw_line(xc + nemx*scale, yc + nemy*scale, xc + nenx*scale, yc + neny*scale);
    flag.draw_line(xc + nemx*scale, yc + nemy*scale, xc + nepx*scale, yc + nepy*scale);
    flag.draw_line(xc + nepx*scale, yc + nepy*scale, xc + neox*scale, yc + neoy*scale);
    flag.draw_line(xc + nenx*scale, yc + neny*scale, xc + neox*scale, yc + neoy*scale);

    flag.draw_line(xc + neqx*scale, yc + neqy*scale, xc + nerx*scale, yc + nery*scale);
    flag.draw_line(xc + neqx*scale, yc + neqy*scale, xc + netx*scale, yc + nety*scale);
    flag.draw_line(xc + nerx*scale, yc + nery*scale, xc + nesx*scale, yc + nesy*scale);
    flag.draw_line(xc + netx*scale, yc + nety*scale, xc + nesx*scale, yc + nesy*scale);

    //sw
    flag.draw_line(xc + swax*scale, yc + sway*scale, xc + swbx*scale, yc + swby*scale);
    flag.draw_line(xc + swax*scale, yc + sway*scale, xc + swdx*scale, yc + swdy*scale);
    flag.draw_line(xc + swbx*scale, yc + swby*scale, xc + swcx*scale, yc + swcy*scale);
    flag.draw_line(xc + swcx*scale, yc + swcy*scale, xc + swdx*scale, yc + swdy*scale);

    flag.draw_line(xc + swex*scale, yc + swey*scale, xc + swfx*scale, yc + swfy*scale);
    flag.draw_line(xc + swex*scale, yc + swey*scale, xc + swhx*scale, yc + swhy*scale);
    flag.draw_line(xc + swfx*scale, yc + swfy*scale, xc + swgx*scale, yc + swgy*scale);
    flag.draw_line(xc + swhx*scale, yc + swhy*scale, xc + swgx*scale, yc + swgy*scale);

    flag.draw_line(xc + swix*scale, yc + swiy*scale, xc + swjx*scale, yc + swjy*scale);
    flag.draw_line(xc + swix*scale, yc + swiy*scale, xc + swlx*scale, yc + swly*scale);
    flag.draw_line(xc + swjx*scale, yc + swjy*scale, xc + swkx*scale, yc + swky*scale);
    flag.draw_line(xc + swlx*scale, yc + swly*scale, xc + swkx*scale, yc + swky*scale);

    flag.draw_line(xc + swmx*scale, yc + swmy*scale, xc + swnx*scale, yc + swny*scale);
    flag.draw_line(xc + swmx*scale, yc + swmy*scale, xc + swpx*scale, yc + swpy*scale);
    flag.draw_line(xc + swpx*scale, yc + swpy*scale, xc + swox*scale, yc + swoy*scale);
    flag.draw_line(xc + swnx*scale, yc + swny*scale, xc + swox*scale, yc + swoy*scale);

    //se
    flag.draw_line(xc + seax*scale, yc + seay*scale, xc + sebx*scale, yc + seby*scale);
    flag.draw_line(xc + seax*scale, yc + seay*scale, xc + sedx*scale, yc + sedy*scale);
    flag.draw_line(xc + sebx*scale, yc + seby*scale, xc + secx*scale, yc + secy*scale);
    flag.draw_line(xc + secx*scale, yc + secy*scale, xc + sedx*scale, yc + sedy*scale);

    flag.draw_line(xc + seex*scale, yc + seey*scale, xc + sefx*scale, yc + sefy*scale);
    flag.draw_line(xc + seex*scale, yc + seey*scale, xc + sehx*scale, yc + sehy*scale);
    flag.draw_line(xc + sefx*scale, yc + sefy*scale, xc + segx*scale, yc + segy*scale);
    flag.draw_line(xc + sehx*scale, yc + sehy*scale, xc + segx*scale, yc + segy*scale);

    flag.draw_line(xc + seix*scale, yc + seiy*scale, xc + sejx*scale, yc + sejy*scale);
    flag.draw_line(xc + seix*scale, yc + seiy*scale, xc + selx*scale, yc + sely*scale);
    flag.draw_line(xc + sejx*scale, yc + sejy*scale, xc + sekx*scale, yc + seky*scale);
    flag.draw_line(xc + selx*scale, yc + sely*scale, xc + sekx*scale, yc + seky*scale);

    flag.draw_line(xc + semx*scale, yc + semy*scale, xc + senx*scale, yc + seny*scale);
    flag.draw_line(xc + semx*scale, yc + semy*scale, xc + sepx*scale, yc + sepy*scale);
    flag.draw_line(xc + sepx*scale, yc + sepy*scale, xc + seox*scale, yc + seoy*scale);
    flag.draw_line(xc + senx*scale, yc + seny*scale, xc + seox*scale, yc + seoy*scale);

    flag.draw_line(xc + seqx*scale, yc + seqy*scale, xc + serx*scale, yc + sery*scale);
    flag.draw_line(xc + seqx*scale, yc + seqy*scale, xc + setx*scale, yc + sety*scale);
    flag.draw_line(xc + serx*scale, yc + sery*scale, xc + sesx*scale, yc + sesy*scale);
    flag.draw_line(xc + setx*scale, yc + sety*scale, xc + sesx*scale, yc + sesy*scale);

    flag.draw_line(xc + seux*scale, yc + seuy*scale, xc + sevx*scale, yc + sevy*scale);
    flag.draw_line(xc + seux*scale, yc + seuy*scale, xc + sexx*scale, yc + sexy*scale);
    flag.draw_line(xc + sevx*scale, yc + sevy*scale, xc + sewx*scale, yc + sewy*scale);
    flag.draw_line(xc + sexx*scale, yc + sexy*scale, xc + sewx*scale, yc + sewy*scale);

    // fill in the black to white
    flag.draw_line(xc, yc - scale/2, xc, 0);
    flag.draw_line(xc, yc + scale/2, xc, height);
    flag.draw_line(xc - scale/2, yc, 0, yc);
    flag.draw_line(xc + scale/2, yc, width, yc);

    flag.recursive_fill(0, 0);
    flag.recursive_fill(0, height-1);
    flag.recursive_fill(width - 1, 0);
    flag.recursive_fill(width - 1, height - 1);

    flag.save("flag.ppm");

}

@ShaamChowdhury โดยไม่ได้ตั้งใจทั้งหมด SEXY คือมุมตะวันออกเฉียงใต้, จุด X, Y พิกัด
user137

3
ของคุณเป็นทางออกเดียวที่ธงกำลังโบกอยู่ในสายลม!
CJ Dennis

2

PostScript , 572 477 ไบต์

รหัส Golfed:

5 5 scale 36 24 translate /R{.75 .05 .19 setrgbcolor}def/B{0 .20 .47 setrgbcolor}def/a 2 3 atan def/b{0 setgray[18 -6 2 12 21 -6 2 12 24 -6 2 12]rectfill 1 setgray{[18 -.5 2 1 24 -.5 2 1]rectfill}if{21 -.5 2 1 rectfill}if}def a neg rotate R 0 0 12 0 180 arc closepath fill B 0 0 12 180 0 arc closepath fill R -6 0 6 0 360 arc closepath fill B 6 0 6 0 360 arc closepath fill true true b 2 a mul rotate false true b 180 rotate true false b -2 a mul rotate false false b
showpage

รหัสไม่ได้รับการตอบกลับ:

5 5 scale                                     % over-all scale
36 24 translate                               % over-all shift
/R {.75 .05 .19 setrgbcolor} def              % prodecure for setting red color
/B {0 .20 .47 setrgbcolor} def                % procedure for setting blue color
/a 2 3 atan def                               % calculate angle = arctan(2/3) = 33.7°
/b {                                          % procedure for drawing bars
 0 setgray                                    %   black
 [18 -6 2 12 21 -6 2 12 24 -6 2 12] rectfill  %   draw 3 bars
 1 setgray                                    %   white
 {[18 -.5 2 1 24 -.5 2 1] rectfill} if        %   conditionally draw gap in inner/outer bars 
 {21 -.5 2 1 rectfill} if                     %   conditionally draw gap in middle bar 
} def
a neg rotate                                  % rotate -33.7°
R 0 0 12 0 180 arc closepath fill             % big red half circle
B 0 0 12 180 0 arc closepath fill             % big blue half circle
R -6 0 6 0 360 arc closepath fill             % small red circle
B  6 0 6 0 360 arc closepath fill             % small blue circle
true true b                                   % draw bars (with gap in all bars)
2 a mul rotate                                % rotate 67.4°
false true b                                  % draw bars (with gap in inner/outer bars)
180 rotate                                    % rotate 180°
true false b                                  % draw bars (with gap in middle bar)
-2 a mul rotate                               % rotate -67.4°
false false b                                 % draw bars (without gaps)
showpage

ผลลัพธ์:

ผลลัพธ์


1

Python 2, 483 ไบต์

from math import*
w,k,r,b="255 "*3,"0 "*3,"198 12 48 ","0 52 120 "
print "P3 600 400 255 "
a=atan2(2,3)
c,s=cos(a),sin(a)
T=lambda x,y:(c*x-s*y,s*x+c*y)
S=lambda x,y:150<x<216.6and x%25<16.6and y*y<2500
C=lambda x,y,p=50:(x-p)**2+y*y<2500
for y in range(-200,200):
 for x in range(-300,300):X,Y=T(x,y);W,Z=T(-x,y);print [[w,k][(S(abs(X),Y)and(Y*Y>16or(166.6<X<191.4or-200>X or 0>X>-166.6)))or(S(abs(W),Z)and(W>0 or abs(Z)>4))],[b,r][(Z<0 or C(W,Z))and not C(W,Z,-50)]][W*W+Z*Z<10000]

การปรับปรุงที่เป็นไปได้:

  • hardcode cos ค่าคงที่บาป
  • PPM ไบนารี
  • เปลี่ยนเป็นระนาบ [3,2]
  • ปรับคำสั่งบูลีนให้เหมาะสม

เอาต์พุตเป็นข้อความ PPM, การใช้งาน:

python golf_korea.py > korea.ppm

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

รุ่นเบต้าที่ไม่ดี

from math import*
w,k,r,b="255 255 255 ", "0 0 0 ", "255 0 0 ", "0 0 255 "
g="0 255 0 "
print "P3 600 400 255 "
a=atan2(2,3)
c,s=cos(a),sin(a)
trans=lambda x,y:(c*x-s*y,s*x+c*y)
stripe=lambda x:150<x<216.6 and x%25<16.6
small=lambda x,y,p=50:(x-p)**2+y*y<2500
for y in range(-200,200):
 for x in range(-300,300):
  X,Y=trans(x,y)
  W,Z=trans(-x,y)
  if stripe(abs(X)) and Y*Y<2500:
   if abs(Y)>4:  
    print k
   else:
    if X>0:
     if 166.6<X<191.4:
      print k
     else:
      print w
    else:
     if -200<X<-166.6:
      print w
     else:
      print k
  elif stripe(abs(W)) and Z*Z<2500 and(W>0 or abs(Z)>4):
   print k
  elif W*W+Z*Z<100*100:
   if (Z<0 or small(W,Z)) and not small(W,Z,-50):
    print r
   else:
    print b
  else:
   print w
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.