วาดเครื่องหมาย€


61

เป้าหมายคือการส่งออกหรือแสดงภาพที่มีเครื่องหมาย€ (ยูโร) ตามรายละเอียดต่อไปนี้ (ละเว้นเส้นขอบของเครื่องหมาย)

€สัญญาณ

ที่มา: http://en.wikipedia.org/wiki/File:Euro_Construction.svg

กฎ:

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

7
หากิน! ได้เวลาทบทวนรูปทรงเรขาคณิต / ตรีโกณมิติของฉันแล้ว ฉันเห็นพิกัดบางอันค่อนข้างยากที่จะอนุมาน
Michael M.

5
ฉันต้องค้นหา "facultative"
Digital Trauma

2
ฉันจริงๆหวังสำหรับคำตอบที่น้ำยาง + TikZ :)
โคลจอห์นสัน

12
หากไม่มีเงินยูโรปัญหานี้จะไม่มีอยู่ดังนั้นจึงแสดงให้เห็นถึงความจริงของ "ปัญหาเงินโมปัญหา" อีกครั้ง
โทมัสจอห์นสัน

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

คำตอบ:


22

PostScript / GhostScript, 100

(96 สำหรับโปรแกรม, 4 สำหรับคำนำหน้าสวิตช์บรรทัดคำสั่ง)

golfed อย่างเต็มที่และ tokenized มือ:

$ hexdump -C euro.ps
00000000  68 20 88 78 92 36 92 38  92 8b 88 4b 88 3c 92 ad  |h .x.6.8...K.<..|
00000010  88 00 88 00 88 3c 88 2d  88 ce 92 05 88 00 88 00  |.....<.-........|
00000020  88 32 88 d8 88 28 92 06  92 16 88 b9 88 fb 92 6b  |.2...(.........k|
00000030  88 b5 88 f1 92 63 88 13  88 f1 92 63 88 17 88 fb  |.....c.....c....|
00000040  92 63 92 16 88 b9 88 0f  92 6b 88 b5 88 05 92 63  |.c.......k.....c|
00000050  88 1b 88 05 92 63 88 1f  88 0f 92 63 92 16 92 42  |.....c.....c...B|
00000060

คุณสามารถรับสำเนาได้ที่นี่เพื่อการดูของคุณเอง

หลังจากเห็นคำตอบของ @ ThomasW และพิจารณาโปรแกรมของฉันอย่างรอบคอบฉันก็ตระหนักว่าฉันสามารถทำได้ดียิ่งขึ้น

รุ่นโทเค็นเทียบเท่ากับสิ่งนี้:

h 120 div dup scale
75 60 translate

0 0 60 45 -50 arc
0 0 50 -40 40 arcn
closepath

-71 -5 moveto
-75 -15 lineto
19 -15 lineto
23 -5 lineto
closepath

-71 15 moveto
-75 5 lineto
27 5 lineto
31 15 lineto
closepath

fill

คำอธิบายของการปรับให้เหมาะสม:

ก่อนอื่นฉันเปลี่ยนวิธีแก้ปัญหาแรกของฉันให้กลายเป็นกลุ่มย่อยย่อย ๆ ที่ง่ายกว่าแทนที่จะเป็นเส้นทางเดียวที่เลี่ยงไม่ได้ทั้งเส้นทาง ฉันยืมวิธีของ Thomas ในการป้อนพารามิเตอร์ซึ่งดีกว่าที่ฉันมี

จากนั้นฉันก็คูณพิกัดทั้งหมดด้วย 10 แล้วปัดเศษทุกอย่างออกเพื่อให้พิกัดพิกัดเป็นจำนวนเต็ม ฉันยังปัดมุมออกและแปลงทั้งสองมุมให้เป็นมุมลบที่เท่ากัน สิ่งนี้ทำให้ทุกหมายเลขเดียวตกอยู่ระหว่าง -128 และ 127

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

เรียกใช้เป็น:

gs -dh=200 euro.ps

สูง 200 จุด

gs -dh=80 euro.ps

สูง 80 pt

gs -dh=20 euro.ps

สูง 20 pt


ใหม่: แม้แต่เวอร์ชั่นที่สั้นกว่า!

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

92 ไบต์:

hexdump -C euro.ps
00000000  68 20 88 78 92 36 92 38  92 8b 88 4b 88 3c 92 ad  |h .x.6.8...K.<..|
00000010  7b 7b 88 b5 88 c4 88 2d  88 3c 30 20 30 88 3c 88  |{{.....-.<0 0.<.|
00000020  2d 88 cf 30 20 30 88 32  88 d8 88 28 88 b9 88 fb  |-..0 0.2...(....|
00000030  88 b5 88 f1 88 13 88 f1  88 17 88 fb 88 b9 88 0f  |................|
00000040  88 b5 35 88 1b 35 88 1f  88 0f 7d 8e 0b 00 07 08  |..5..5....}.....|
00000050  0a 01 23 03 0a 01 23 03  0a 7d 92 b3              |..#...#..}..|
0000005c

ซึ่งเทียบเท่ากับ:

h 120 div dup scale
75 60 translate
{
 {-75 -60 45 60
  0 0 60 45 -50
  0 0 50 -40 40
  -71 -5
  -75 -15
  19 -15
  23 -5
  -71 15
  -75 5
  27 5
  31 15}
  <00 07 08 0A 01 03 03 03 0A 01 03 03 03 0A> 
} ufill

และโซลูชันที่ทำให้เกิดความสับสนเล็กน้อยที่ใช้งานง่ายช่วยประหยัดอักขระได้มากกว่าหนึ่งตัวในราคาเพียง 91:

$ hexdump -C euro.ps
00000000  68 20 88 78 92 36 92 38  92 8b 88 4b 88 3c 92 ad  |h .x.6.8...K.<..|
00000010  5b 5b 8e 1e b5 c4 2d 3c  00 00 3c 2d ce 00 00 32  |[[....-<..<-...2|
00000020  d8 28 b9 fb b5 f1 13 f1  17 fb b9 0f b5 05 1b 05  |.(..............|
00000030  1f 0f 7b 92 38 88 7f 92  50 7b 32 35 36 92 a9 7d  |..{.8...P{256..}|
00000040  92 54 7d 92 49 5d 92 32  8e 0b 00 07 08 0a 01 23  |.T}.I].2.......#|
00000050  03 0a 01 23 03 0a 5d 92  32 92 b3                 |...#..].2..|
0000005b

ซึ่งเทียบเท่ากับ:

h 120 div dup scale
75 60 translate
[
  [
   <b5 c4 2d 3c
    00 00 3c 2d ce
    00 00 32 d8 28
    b9 fb
    b5 f1
    13 f1
    17 fb
    b9 0f
    b5 05
    1b 05
    1f 0f> {dup 127 gt {256 sub} if} forall 
  ] cvx
  <00 07 08 0A 01 23 03 0A 01 23 03 0A> 
] cvx
ufill

1
การทำงานที่ดี! ผมคิดว่าผมจะต้องเรียนรู้ทั้งหมดเกี่ยวกับโทเค็ไบนารี
Thomas W.

@ThomasW แม้ว่าฉันจะยังไม่เสร็จสมบูรณ์ ฉันยังอ่านเอกสารเส้นทางสตริงที่เข้ารหัส ...
AJMansfield

คุณไม่ต้องการพื้นที่หลังจากนั้นhเพราะโทเค็นแบบไบนารีกำลังทำการลบด้วยตัวเอง BTW คุณรหัสมันได้อย่างไร ฉันทำด้วยโปรแกรมแก้ไข hex มาตรฐานซึ่งน่าเบื่อ
Thomas W.

2
ไฟล์โทเค็น @ n.1 ทำงานเหมือนกับไฟล์ PostScript ปกติและคุณสามารถผสมโทเค็นไบนารีและ PostScript มาตรฐานธรรมดาในไฟล์เดียวกัน โทเค็นไบนารีแต่ละตัวจะตรงกับตัวดำเนินการหรือวัตถุอื่น ๆ โดยตรงดังนั้นคุณสามารถแทนที่หรือแทรกการดำเนินการหรือคัดลอกตัวอย่างไปยังโปรแกรมอื่นได้อย่างง่ายดาย รายละเอียดที่แน่นอนเกี่ยวกับแบบฟอร์ม tokenized สามารถพบได้ในคู่มืออ้างอิงภาษา PostScript (สมุดสีแดง) ในส่วน 3.12 เส้นทางของผู้ใช้ที่เข้ารหัสได้อธิบายไว้ใน 4.6.2
AJMansfield

1
@ n.1 ฉันใช้โปรแกรมแก้ไขฐานสิบหกเพื่อเขียนไฟล์ด้วยเหตุผลนั้น ไบต์ตัวคั่นโทเค็นจะสอดคล้องกับอักขระควบคุมใน ISO-latin-1 และการเข้ารหัสความกว้างคงที่อื่น ๆ แต่หากตัวแก้ไขตีความใน UTF-8 หรือการเข้ารหัสความกว้างตัวแปรอื่นคุณจะได้สิ่งนั้น ไฟล์อื่น ๆ ที่มีข้อมูลไบนารี
AJMansfield

50

Mathematica, 193 183 177 173 169 166 ไบต์

เย่คณิตศาสตร์! ฉันกำลังวางแผนพื้นที่ที่ตอบสนองชุดของความไม่เท่าเทียมกัน (ค่อนข้างซับซ้อน):

e=RegionPlot[(1<Abs@y<3||c)&&{x,y+12}.(d=2{-5Sin@40°-6,m=5Cos@40°})*{x+15,y+1-2Sign@y}.d<0||c&&x<2m/.c->100<x^2+y^2<144,{x,-15,9},{y,-12,12},Frame->0>1,ImageSize->#]&

การใช้งานe[height]เช่นe[100]:

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

หรือe[200]:

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

คุณอาจสังเกตเห็นว่าขอบที่คมชัดนั้นถูกปัดออกเล็กน้อย นั่นเป็นเพราะพื้นที่สามารถพล็อตได้โดยการสุ่มจุดในอวกาศและ Mathematica จะไม่สุ่มตัวอย่างแต่ละพิกเซลตามค่าเริ่มต้น ความละเอียดของการสุ่มตัวอย่างสามารถเพิ่มขึ้นโดยการเพิ่มตัวเลือกอื่น PlotPoints->#(ซึ่งใช้อย่างใดอย่างหนึ่งตัวอย่างต่อพิกเซล) ซึ่งจะเพิ่ม14 ตัว ฉันไม่แนะนำให้รันด้วยตัวเลือกนั้นเพราะมันจะเพิ่มการใช้งานจริงและเพิ่มความน่าดึงดูดให้กับภาพมากกว่า#/4หรือมากกว่านั้น ดังนั้น (หลังจากอนุมัติ OP) จะไม่รวมอยู่ในคะแนน

นี่คือรุ่นที่ไม่ได้รับการเคารพเล็กน้อย:

e[height_] := (
  angle = 40°;
  d = {-5 Sin[angle] - 6, 5 Cos[angle]};
  RegionPlot[
      (Abs[y] > .5 && Abs[y] < 1.5
        ||
       r > 25 && r < 36)
    &&
      {x, y + 6}.d > 0
    &&
      {x + 7.5, y + .5 - Sign[y]}.d < 0
    ||
      r > 25 && r < 36 && x < 5 Cos[angle] 
    /. r -> x^2 + y^2
    ,
    {x, -7.5, 4.5},
    {y, -6, 6},
    Frame -> False,
    ImageSize -> height
  ]
);

โปรดทราบว่าในเวอร์ชัน golfed ฉันได้ปรับขนาดระบบพิกัดเป็น 2 เท่าเพื่อหลีกเลี่ยง.5s แต่ปรากฎว่าการนับตัวละครนั้นเหมือนกันจริงๆ

นี่คือคำอธิบายสำหรับวิธีที่ฉันทำงานสูตร ฉันแบ่งรูปร่างออกเป็นสองส่วน หนึ่งประกอบด้วยวงแหวนและแถบและถูกตัดออกไปทางขวาด้วยBCDEความลาดชันและไปทางซ้ายด้วยIJและและGHลาด (เพิ่มเติมในภายหลัง) อื่น ๆ ที่มีแหวนเหมือนกัน แต่ถูกตัดเพียงแค่ปิดที่xDพิกัดของจุด เงื่อนไขสำหรับทั้งสองภูมิภาคถูกรวมเข้าด้วยกัน||ซึ่งทำหน้าที่เป็นสหภาพที่ตั้งไว้ที่นี่

แหวนถูกกำหนดให้เป็น5 < r < 6โดยที่rระยะทางจากแหล่งกำเนิดอยู่ที่ไหน ง่ายกว่าที่จะคิดออก ( x²+y²) ดังนั้นฉันจึงใช้25 < x² + y² < 36เพื่อให้ได้คะแนนทั้งหมดในแหวน

ลายอยู่ระหว่างและ±.5 ±1.5เราสามารถจัดการกับลายเส้นทั้งสองในเวลาเดียวกันโดยการโมดูลัสของปีดังนั้นลายเส้น (ความยาวไม่มีที่สิ้นสุด) .5 < |y| < 1.5เพียงตอบสนอง อีกครั้งในการรวมลายแถบและแหวนเข้าด้วยกันฉันแค่ใช้||มัน

สิ่งที่น่าสนใจน่าจะเป็นวิธีที่จะได้รับ "หน้ากาก" ได้อย่างไร จุดDมีxพิกัดของ5 cos 40°ดังนั้นหน้ากากการดูแลของขอบล่าง (รวมกับแหวนเท่านั้น) x < 5 cos 40°เป็นเพียง สิ่งนี้สามารถนำมาใช้ผ่านทางแยกชุดซึ่งแปลเป็น&&ตรรกะ

หน้ากากอื่น ๆ เป็นส่วนที่ยุ่งยากมาก ก่อนอื่นมาทำความชันBCDEกันก่อน เราสามารถสร้างคะแนนได้อย่างง่ายดายCและDตาม(0, -6)และ5 (cos 40°, sin 40°)ตามลำดับ D - C = (5 cos 40°, 5 sin 40° + 6)เวกเตอร์ที่ชี้ไปตามเส้นนั้นก็เป็นเพียงแค่ ในการใช้มาสก์ทางด้านขวาฉันแค่คิดออกว่าจุดใดอยู่ทางซ้ายหรือทางขวาของบรรทัดนั้น (ลองเรียกเวกเตอร์เส้นp) ฉันสามารถคิดนี้ออกโดยการใช้เวกเตอร์จากCการจุดของฉันดอกเบี้ยและฉายลงบนเวกเตอร์ตั้งฉากpไป เครื่องหมายของการฉายภาพจะบอกให้ฉันทราบว่าจุดนั้นอยู่ที่ใด การได้เวกเตอร์ตั้งฉากนั้นค่อนข้างง่ายในแบบ 2 มิติ: เลื่อนพิกัดและกลับเครื่องหมายของหนึ่งในนั้น นั่นคือตัวแปรdในรหัสของฉัน:(-5 sin 40° - 6, 5 cos 40°). เวกเตอร์จากCไปยังจุดที่น่าสนใจคือq = (x, y) q - C = (x, y + 6)ประมาณการเป็นเพียงผลิตภัณฑ์สเกลาร์ (หรือผลิตภัณฑ์ dot) ระหว่างและq dวิธีที่ฉันเลือกที่มันเกิดขึ้นกับชี้ไปทางซ้ายดังนั้นฉันต้องการd d.(q-C) > 0เงื่อนไขนี้ใช้หน้ากากขวา

สำหรับหน้ากากซ้ายฉันสามารถใช้แนวคิดเดียวกันโดยพื้นฐานได้ ความชันจะเท่ากันดังนั้นจึงเป็นdเช่นนั้น Cฉันเพียงแค่ต้องชดเชยจุดของฉันจากมุมซ้ายล่างของลายแทนจาก สิ่งเหล่านั้นมีพิกัด(-7.5, 0.5)(แถบด้านบน) และ(-7.5, -1.5)(แถบด้านล่าง) นั่นจะเรียกว่ากฎอิสระสองข้อสำหรับแถบทั้งสอง อย่างไรก็ตามโปรดทราบว่าทุกจุดรับผลกระทบจากหน้ากากลดลงอยู่ในแถบที่ต่ำกว่าและด้วยเหตุนี้มีเชิงลบY และทุกจุดที่ได้รับผลกระทบโดยหน้ากากบนมีบวกY ดังนั้นฉันจึงสามารถสลับการใช้ออฟเซ็ตของฉันSign[y]ซึ่งเป็น1ผลบวกและ-1ลบyได้ ดังนั้นจุดชดเชยของฉันจะกลายเป็น(-7.5, -0.5 + Sign[y]). ไม่เช่นนั้นหน้ากากจะทำงานเช่นเดียวกับหน้ากากขวา แน่นอนว่าเวลานี้การฉายภาพต้องเป็นค่าลบ ดังนั้นไร้เดียงสาที่จะเป็นสิ่งที่ชอบRH-projection > 0 && LH-projection < 0(ซึ่งเป็นสิ่งที่ฉันมีในรหัสเดิม) แต่เราสามารถย่อให้สั้นลงได้เพราะการคูณจำนวนบวกกับจำนวนลบต้องให้จำนวนลบดังนั้นมันจึงเป็นเพียงแค่RH * LH < 0(ที่ใดRHและLHมีการคาดการณ์ตามลำดับ)

แค่นั้นแหละ. การรวมทั้งหมดเข้าด้วยกันนำไปสู่โครงสร้างแบบลอจิคัลต่อไปนี้:

(
  (is_in_circle || is_in_stripe)
  &&
  is_between_left_and_right_mask
)
||
(
  is_in_circle && left_of_edge
)

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


1
ฉันค่อนข้างใหม่กับ Mathematica ดังนั้นฉันขอขอบคุณความคิดเห็นบางอย่างในรหัสของคุณ!
Thomas W.

2
@ThomasW สิ่งที่เกิดขึ้นจริงใน Mathematica เป็นเพียงการเรียกร้องRegionPlotที่เพียงแค่สีในทุกจุดในพื้นที่ที่ตอบสนองเงื่อนไขที่กำหนด ดังนั้นการให้มันx^2+y^2<1จะวาดวงกลมหน่วย ฉันจะเพิ่มคำอธิบายสำหรับคณิตศาสตร์ที่เกิดขึ้นจริง (คืนนี้ภายหลัง)
Martin Ender

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

@ n.1 ถ้าคุณไม่ตัดสิทธิ์คำตอบ PostScript ของ Thomas W. เนื่องจากเป็นเลขฐานสองหรือเพราะมันถูกปัดเศษมากเกินไปคำตอบของเขาจะสั้นลงอย่างแน่นอน อย่างไรก็ตามการแก้ไขความละเอียดใช้เวลา 14 ตัวอักษรดังนั้นคำตอบของฉันก็ยังสั้นที่สุดหลังจากเขา ฉันจะแก้ไข
Martin Ender

1
@ThomasW ไปแล้ว!
Martin Ender

29

BBC BASIC, 202

INPUTh:w=h/12s=w/2.4p=25VDU22,6,29,640;400;p,4,0;1.5*w;p,153,6*w;0;p,4,0;1.5*w;p,159,h/3.1;4.7*w;p;9*s;9*w;p,87,h/3.1;-19*w;p,4,-7.5*w;0;p;s;w;p,85,4.5*s;0;p,81,s;w;p;s;w;p;s;w;p,85,-7.5*w;2*w;p,81,s;w;

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

ในพื้นฐานของ BBC กราฟิกทั้งหมดจะถูกจัดการที่ระดับต่ำโดยใช้อักขระควบคุม ASCII เฉพาะเครื่อง (แต่บางคำสั่งระดับสูงก็มีให้สำหรับคนทั่วไปเพื่อความสะดวก) ที่ใช้ในที่นี้คือ 22 (เปลี่ยนโหมดการแสดงผล) 29 (เปลี่ยน Origin) และ 25 ซึ่งเทียบเท่ากับคำสั่ง PLOT ซึ่งรับพารามิเตอร์การดำเนินการเพิ่มเติม (วาดเส้นวงกลมสามเหลี่ยม ฯลฯ ในพื้นหลัง / เบื้องหน้าพร้อมการเคลื่อนย้ายแบบสัมพัทธ์ / สัมบูรณ์) ก่อนพารามิเตอร์ X และ Y

ดังนั้นสิ่งที่ฉันต้องทำก็คือส่งโหลดอักขระไปยังตัวควบคุม VDU ค่าที่สิ้นสุดในเซมิโคลอนคือ 16 บิต อื่น ๆ คือ 8 บิต จำนวนไบต์ทั้งหมดที่ส่งไปยังตัวควบคุม VDU คือ 91แม้ว่าในตัวมันเองจะไม่ถือว่าเป็นคำตอบเพราะในระยะนั้นขนาดจะถูกเข้ารหัส

สถานที่ที่ชัดเจนสำหรับจุดกำเนิดคือศูนย์กลางของวงกลม แต่จริงๆแล้วมันมีคำสั่งมากกว่าที่เกี่ยวข้องในการสร้างแท่ง ดังนั้นฉันจึงเลื่อนที่มาลง 1.5 ไปที่ด้านล่างของแถบด้านล่างซึ่งลดจำนวนเศษส่วนและจำนวนลบที่ต้องการ มันยังคงอยู่บนเส้นแนวตั้งโดยมีจุดศูนย์กลางของวงกลมซึ่งสำคัญเนื่องจากเส้น E เริ่มต้นจากเส้นแนวตั้งนี้

อันที่จริงฉันแค่ต้องคำนวณตัวเลข 3 ตัวจากการวาด: มุมด้านบนสุดของรูปร่าง C (5 cos 40, 5 sin 40 + 1.5) = (3.8302,3.1394 + 1.5) = ประมาณ (12 / 3.1, 4.6) และ ความชันของเส้น E: x / y = 3.8302 / (6 + 3.1394) = 0.4157 = ประมาณ 1 / 2.4

เนื่องจากฉันมีรุ่นทดลองใช้ฟรี (ตีความ) ฉันจึงใช้ความสูงของสัญลักษณ์เป็นอินพุตของผู้ใช้ หากคุณซื้อเวอร์ชันเต็ม (29.99GBP) w=VAL(@cmd$)/12คุณสามารถรวบรวมแล้วอ่านบรรทัดคำสั่งด้วย

รหัสที่ไม่ได้รับการปรับปรุง

ในรหัส golfed มีคำสั่ง VDU เพียงคำเดียว แต่ในรหัส ungolfed ฉันแบ่งมันออกเป็นหลาย ๆ เพื่อความชัดเจน นอกจากนี้เนื่องจากบีบีซีขั้นพื้นฐานเป็น endian เล็ก ๆ น้อย ๆ การรวมกันp,0,สามารถเล่นกอล์ฟได้p;แต่ฉันทิ้งมันไว้เพื่อความชัดเจน

  INPUT h
  w=h/12                   :REM w is the width of the line, which is 1/12 the height of the symbol, hardcoded at 900.
  s=w/2.4                  :REM s/w is the gradient x/y of line E. s is the horizontal offset of the top and bottom of the ends of horizontal bars
  p=25                     :REM VDU p,action,x;y; is the equivalent of PLOT action,x,y

  VDU 22,6                 :REM change mode
  VDU 29,640;400;          :REM set origin

  VDU p,4,0;1.5*w;         :REM move to centre of circle
  VDU p,153,6*w;0;         :REM draw circle in foreground colour
  VDU p,4,0;1.5*w;         :REM move to centre of circle
  VDU p,159,h/3.1;4.6*w;   :REM draw circle in background colour, ending at the upper inner point of the C shape.
  VDU p,0,9*s;9*w;         :REM move relative along slant gradient, 9 spaces in y direction, to define the upper cut on the circle
  VDU p,87,h/3.1;-19*w;    :REM draw triangle in background colour, based on the last two points and the absolute point specified here (vertical line for lower cut)

  VDU p,4,-7.5*w;0;        :REM move absolute to bottom left of lower bar
  VDU p,0,s;w;             :REM move relative to top left of lower bar
  VDU p,85,4.5*s;0;        :REM draw triangle to bottom right corner of lower bar (absolute)
  VDU p,81,s;w;            :REM draw triangle to top right of lower bar (relative)

  VDU p,0,s;w;             :REM move relative to bottom right of upper bar
  VDU p,0,s;w;             :REM move relative to top right of upper bar
  VDU p,85,-7.5*w;2*w;     :REM draw triangle to bottom left of upper bar (absolute)
  VDU p,81,s;w;            :REM draw triangle to top left of upper bar (relative)

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


BBC BASIC น่ากลัว! นี่ใช้เวลาเกือบสามสิบปีแล้ว!
Tom Chantler

1
@Dommer BBC Basic เปิดตัวครั้งแรกในปี 1981 มากกว่า 20 ปีก่อนที่จะมีการพิมพ์ธนบัตรยูโรครั้งแรก (2002. ) ดังนั้นนี่เป็นวิธีเดียวที่คุณสามารถวาดเครื่องหมายยูโรขนาดใหญ่บนเครื่องได้! หรือคุณสามารถ redefine อักขระ ASCII nเพื่อเป็นสัญลักษณ์ยูโรกับบิตแมป 8x8 VDU 23,n,30,33,120,32,120,30,30,0เช่นนี้ จากข้อมูลของ Wikipedia บีบีซีเบสิคยังคงพัฒนาส่วนใหญ่เป็นอุปกรณ์พกพา
ระดับแม่น้ำเซนต์

แน่นอน! ฉันคิดว่าเราได้รับของเราในปี 1984 ฉันจำได้ว่าวาดภาพสไปรต์เจ๋ง ๆ บนกระดาษกราฟและจากนั้นก็หาตัวแทนที่เป็นเลขฐานสองของพวกเขาออกมาเพราะฉันแน่ใจว่าคุณได้ทำไปแล้ว เมื่อทราบแล้วฉันเพิ่งวาดสัญลักษณ์ยูโรของคุณด้วยมือ มันดีมากเมื่อพิมพ์ผิดได้รับการแก้ไขและค่า antepenultimate เปลี่ยนจาก 30 เป็น 33 ฉันเห็นจากโปรไฟล์ของคุณคุณยังใช้โลโก้ซึ่งนำฉันกลับไปที่โรงเรียนประถมอีกครั้ง เป็นเรื่องดีที่ได้เรียนรู้ BBC Basic ที่ยังคงใช้งานอยู่ในปัจจุบัน ถ้ามันเป็นสิ่งที่ดีพอสำหรับเรา ...
ทอม Chantler

เพียงเพื่อเพิ่มบิตแมป 8x8 บีบีซีพื้นฐานอาจจะทำมากขึ้น "เอียง" (ในการรักษาที่มีโลโก้ขนาดใหญ่) VDU 23,n,30,33,124,32,120,33,30,0โดยเปลี่ยนไป ขอบคุณสำหรับการเดินทางลงช่องทางหน่วยความจำ
Tom Chantler

25

HTML, 250 249 248 242 244 234 229

<svg viewBox=-7.5,-6,12,12
onload=this.style.height=prompt()><clipPath
id=c><path
d=M5-6,1.8,1.5,3.8,3.2V6H-9.4L-7.1,.5-7.5-.5-5.2-6>
</clipPath><g
clip-path=url(#c) fill=none stroke=#000><circle
r=5.5 /><path
d=M-8,1h15M-8-1h15>

ขณะนี้ใช้เฉพาะเนื้อหา SVG เท่านั้น แต่ต้องอาศัยการแยกวิเคราะห์ lax HTML อย่างเข้มงวดและต้องใช้เป็น HTML SVG ที่เข้มงวดจะต้องใช้ไบต์มากขึ้น

ลองมัน!


13
(-: ǝɯoʇǝuıɟsʞoo⅂
ossifrage

1
ใช่ฉันคิดในพิกัด PostScript ซึ่งเป็นอีกทางหนึ่งรอบ! สลับแกน y ทันที
โทมัสดับเบิลยู

3
ทำงานสำหรับฉัน (Chrome 34) </svg>ได้โดยไม่ต้องต่อท้าย Oh, และมาร์กอัปที่เป็นที่น่ากลัว ฉันหวังว่าคุณจะละอายใจตัวเอง ;-)
Ilmari Karonen

2
@IlmariKaronen ฉันรู้สึกละอายใจ ;-) ฉันมักจะชอบ XHTML ที่สะอาดมากกว่า HTML อย่างไรก็ตามถ้าฉันทิ้งร่องรอย</svg>ไว้ฉันจะเห็นวงกลมไม่ใช่เส้น (ในไฟล์แบบสแตนด์อโลนไม่ใช่ในมาร์กอัพ JS Bin อาจเพิ่ม)
Thomas W.

1
คุณสามารถย่อevt.targetให้เหลือthisขนาด 6 ไบต์ได้
แปรงสีฟัน

17

CSS, 512 494 ไบต์

<style>*,:after,:before{position:absolute;width:20;content:"";background:#fff}#a{margin:150;height:20;border:2px solid;border-radius:20px}#a:after{width:10;height:10;bottom:0;right:-8}p{top:7;left:-6;width:29;height:2;border:solid;border-width:2 0;transform:skewX(-23deg);margin:0;background:0}p:before{width:2;height:4;bottom:-3;left:-.5}p:after{width:16;height:16;bottom:-3;right:-8}</style><div id=a><p><script>document.getElementById('a').style.transform='scale('+(prompt()/24)+')'</script>

ไม่ใช่คำตอบที่เล็กที่สุดโดยธรรม แต่มีขนาดเล็กที่สุดเท่าที่ฉันจะได้รับแม้จะเรียก css-minification-fu ทั้งหมดของฉัน

คำเตือน:

โค้ดด้านบนที่มี 'px' ปล้นทั้งหมดทำงานใน Firefox & IE แต่ไม่ใช่ Chrome & Safari ซึ่งเป็นเรื่องเกี่ยวกับยูนิตของพวกเขา :)

ฉันต้องเพิ่ม px อีกครั้งเพื่อให้ jsfiddle ทำงาน:

http://jsfiddle.net/9A3J9/

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

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

รหัส ungolfed:

 <style>
*,:after,:before{
    position:absolute;
    width:20;
    content:"";
    background:#fff
}
#a{
    margin:150;
    height:20;
    border:2px solid;
    border-radius:20px
}
#a:after{
    width:10;
    height:10;
    bottom:0;
    right:-8
}
p{
    top:7;
    left:-6;
    width:29;
    height:2;
    border:solid;
    border-width:2 0;
    transform:skewX(-23deg);
    margin:0;
    background:0
}
p:before{
    width:2;
    height:4;
    bottom:-3;
    left:-.5
}
p:after{
    width:16;
    height:16;
    bottom:-3;
    right:-8
}
</style>

<div id=a><p>

<script>
document.getElementById('a').style.transform='scale('+(prompt()/24)+')'
</script>

3
ว้าว! ว่าskewXเคล็ดลับที่จะได้รับ upvote ของฉันคนเดียว
จัดการ

นั่นคือสิ่งที่ฉันเริ่มเขียนเมื่อวานนี้ จุดเท็จกับคุณแล้ว
Einacio

การตั้งค่ารหัสบน div และการใช้getElementByIdลด 6 อักขระ และจากนั้นคุณสามารถใช้รหัสใน css เพื่อลดอีก 2
Einacio

นอกจากนี้pแท็กปิดสามารถละเว้นได้หากไม่มีเนื้อหาเพิ่มเติมหลังจากนั้น (ตามข้อมูลจำเพาะ) และฉันจะตรวจสอบด้วยว่าเบราว์เซอร์ปิดอัตโนมัติdiv(ห้ามโดยสเป็คหรือไม่มันทำงานในซอบน FF)
Einacio

@einacio คำแนะนำที่ดี! เราลงไปที่ 494 B. ขอบคุณ :)
caitriona

16

PostScript + Ghostscript 137 + 6 = 143 (ไบนารี), 209 + 6 = 215 ไบต์

เวอร์ชัน golfed พร้อมโทเค็นไบนารี:

$ hexdump -C euro_golfed.ps 
00000000  68 20 31 32 20 92 36 92  38 92 8b 37 2e 35 20 36  |h 12 .6.8..7.5 6|
00000010  92 ad 35 20 36 0a 31 2e  38 20 2d 31 2e 35 0a 33  |..5 6.1.8 -1.5.3|
00000020  2e 38 20 2d 33 2e 32 0a  33 2e 38 20 2d 36 0a 2d  |.8 -3.2.3.8 -6.-|
00000030  39 2e 34 20 2d 36 0a 2d  37 2e 31 20 2d 2e 35 0a  |9.4 -6.-7.1 -.5.|
00000040  2d 37 2e 35 20 2e 35 0a  2d 35 2e 32 20 36 92 6b  |-7.5 .5.-5.2 6.k|
00000050  37 7b 92 63 7d 92 83 35  2e 35 92 14 30 92 6f 2d  |7{.c}..5.5..0.o-|
00000060  38 20 2d 31 0a 2d 38 20  31 92 6b 32 7b 31 35 20  |8 -1.-8 1.k2{15 |
00000070  30 92 85 92 6b 7d 92 83  30 20 30 20 35 2e 35 20  |0...k}..0 0 5.5 |
00000080  30 20 33 36 30 92 05 92  a7                       |0 360....|
00000089

ดาวน์โหลดไฟล์ไบนารีที่เขียนด้วยมือ

รุ่น ASCII:

h 12 div dup scale
7.5 6 translate
5 6
1.8 -1.5
3.8 -3.2
3.8 -6
-9.4 -6
-7.1 -.5
-7.5 .5
-5.2 6
moveto
7{lineto}repeat
clip newpath
5.5 0
-8 -1
-8 1
moveto
2{15 0 rlineto moveto}repeat
0 0 5.5 0 360 arc
stroke

บันทึกเป็นeuro.psและเรียกใช้ด้วย Ghostscript เช่น

gs -dh=80 euro.ps

เครื่องหมายยูโร 80 คะแนนนำเสนอโดย Ghostscript

gs -dh=20 euro.ps

เครื่องหมายยูโร 20 คะแนนนำเสนอโดย Ghostscript

เนื่องจากไม่มีสิ่งเช่นพิกเซลใน PostScript ความสูงนั้นจึงถูกตีความเป็นจุดแทน ฉันคำนวณ +6 สำหรับสวิตช์บนบรรทัดคำสั่ง


1
ฉันจะเอาชนะขนาดไฟล์ที่คอมไพล์ได้อย่างไร : D ... โทเค็นไบนารีเหล่านั้นทำงานอย่างไร มันไม่เหมือนกับการคอมไพล์โค้ดด้วยมือใช่ไหม?
Martin Ender

DCบรรทัดไม่ตัดลายเส้นแนวนอนอย่างถูกต้อง มุมฉากลงจากที่Dไม่ได้ตัดรูปร่าง 'วงกลม' ในตำแหน่งที่เหมาะสมลดลง :( ดูเหมือนว่าคำตอบ SVG ของคุณจะเหมือนกัน
user2846289

+ ขอบซ้ายของลายเส้นแนวนอนไม่ได้จัดแนว
2846289

@ m.buettner ชื่อ PostScript ที่สำคัญที่สุดสามารถแสดงโดยใช้ลำดับสองไบต์ นี่ไม่ใช่การคอมไพล์อย่างที่คุณจะคอมไพล์โปรแกรม C หรือ Java มันจะผ่านกระบวนการแยกวิเคราะห์เช่นเดียวกับโปรแกรม PostScript หากคุณดูเลขฐานสิบหกหรือเปิดไฟล์ไบนารีในโปรแกรมแก้ไขข้อความคุณจะเห็นว่ามันเกือบจะเหมือนกับรุ่น ASCII แต่ชื่อส่วนใหญ่จะถูกแทนที่ด้วยลำดับสองไบต์
Thomas W.

@VadimR คุณมีตาที่คมชัด! ฉันเดาว่าฉันแลกเปลี่ยนความแม่นยำมากเกินไปสำหรับความกะทัดรัด (การปัดเศษมากเกินไป) ฉันอาจต้องเพิ่มตัวเลข
Thomas W.

13

Python - เต่า - 517

import turtle,sys
from math import *
q=sqrt
h=int(sys.argv[1])/24
t=turtle.Turtle()
z=t.begin_fill
y=t.end_fill
x=t.goto
w=t.towards
v=t.fd
u=t.circle
r=t.seth
o=t.setx
n=t.xcor
t.pu()
x(10*h,0)
t.left(90)
t.circle(10*h,40)
z()
A=w(0,-12*h)
B=2/sin(A*pi/180)
u(10*h,280)
r(-90)
C=n()/h
v((q(144-C*C)-q(100-C*C))*h)
D=w(0,0)
r(D+90)
u(-12*h,D+135.42)
y()
F=2*pi/9
G=h*cos(F)/(5*sin(F)+6)
x(45*G,-3*h)
z()
o(-15*h)
r(A)
v(B*h)
o(45*G+15*h+n())
y()
x(65*G,h)
z()
o(-15*h)
r(A)
v(B*h)
o(65*G+15*h+n())
y()
t.ht()
input()

python % 100และpython % 500ตามลำดับ:


3
คุณสามารถบันทึกอักขระจำนวนมากได้โดยกำจัดทางลัดบางส่วนที่คุณกำหนด คุณใช้เพียงcครั้งเดียวดังนั้นมันจะสั้นกว่าที่จะเรียกใช้math.cosและฉันคิดว่าอาจมีคนอื่น ๆ ที่คุณสามารถใช้ตัวย่อเพื่อตัดความยาวโดยรวม
AJMansfield

1
คุณสามารถโกนอักขระได้หกตัวโดยใช้from math import *แล้ววางส่วนmath.นำหน้า
alexwlchan

3
คุณกำหนดu=t.circleแต่ไม่กี่บรรทัดในภายหลังคุณลืมสลับt.circle(...)สาย
Alconja

2
เต่าวาด€ ช่างเป็นเวลาที่ยังมีชีวิตอยู่
นิด

13

PHP, 432 435 367 356 334 ไบต์

(แก้ไข: เห็นได้ชัดว่า IJ และ GH ควรจะขนานกับ BCDE ตอนนี้คงที่)

สคริปต์นี้แสดงผลภาพ SVG แต่จะแสดงtext/htmlตามค่าเริ่มต้น ฉันคิดว่าเบราว์เซอร์ส่วนใหญ่จะถือว่านี่เป็นหน้าเว็บ HTML ที่มีภาพ SVG ฝังอยู่ ดูเหมือนว่าจะใช้ได้สำหรับฉันต่อไป

ความสูงของรูปภาพถูกส่งเป็นพารามิเตอร์สตริงแบบสอบถาม (หมายเหตุ: จำนวนไบต์รวมอักขระขึ้นบรรทัดใหม่ที่ท้ายบรรทัด 3 ซึ่งจำเป็นสำหรับการดำเนินการนี้อย่างถูกต้อง)

<?php $x=$_GET['x']/12;$a=$x*5;$b=$x*6;$c=$x*7;$d=$x*12.4884;$e=$x*2.2863;$f=$x*5.5;$g=$x*.4157;$h=$x*6.5;$i=$x*7.5;$j=$x*12;$k=$x*11.3302;$l=$x*9.1628;$m=$x*8;$s=$x*12;echo<<<Q
<svg width="$s" height="$s"><clipPath id="c"><path d="M$d 0H$e L0 $f L$g $h L0 $i V$s H$k V$m H$l z"/></clipPath><g clip-path="url(#c)" fill="none" stroke="#000" stroke-width="$x"><circle cx="$i" cy="$b" r="$f"/><path d="M0 $a H$k M0 $c H$k"/></g></svg>
Q;

รุ่นที่ปรับปรุง ( 367 356 334 ไบต์):

preg_replace_callback()เป็นวิธีที่มีประสิทธิภาพมากขึ้นในการปรับค่าตัวเลข รหัสนี้สร้างผลลัพธ์เช่นเดียวกับรุ่นเดิม (แก้ไข: การลดลงเพิ่มเติมขอบคุณEinacio )

<?php
echo preg_replace_callback('/[\d\.]+/',function($m){return$m[0]*$_GET['x']/12;},'<svg width=12 height=12><clipPath id=c><path d=M12.4884,0H2.2863L0,5.5,0.4157,6.5,0,7.5V12H11.3302V8H9.1628z /></clipPath><g clip-path=url(#c) fill=none stroke=black stroke-width=1><circle cx=7.5 cy=6 r=5.5 /><path d=M0,5H11M0,7H11 /></g></svg>');

เอาท์พุท:

euro.php? x = 60

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

euro.php? x = 200

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


widthและheightไม่จำเป็นที่นี่ และคุณต้องระบุสิ่งที่xmlnsจะให้แสดงในเบราว์เซอร์ส่วนใหญ่ (ทดสอบ Firefox และ Chrome แม้ว่าจะใช้ประเภท MIME ที่เหมาะสมของ SVG ก็ตามพวกเขาทั้งสองแสดงเป็น XML ไม่ใช่ SVG) ideone.com/JkqVL0 (ลบค่า hardcoded x สำหรับโซลูชัน 369 ไบต์)
Tim S.

@TimS ไม่มันจะทำงานไม่ถูกต้องหากคุณเรียกใช้โค้ด PHP ที่ ideone และคัดลอกผลลัพธ์ไปยังไฟล์ SVG แต่ถ้าคุณจริงเผยแพร่สคริปต์บนเว็บเซิร์ฟเวอร์, PHP จะ (ค่าเริ่มต้น) แสดงผลลัพธ์ที่มีประเภท MIME text/htmlของ Chrome และ Firefox ไม่มีปัญหากับเรื่องนี้แม้ว่าฉันเพิ่งค้นพบว่า Safari นั้นค่อนข้างน่าสงสัยมากกว่า
ossifrage คลื่นไส้

Ah! ผมเห็นตอนนี้เคล็ดลับ: text/htmlด้วยการ<svg>...ถูกตีความว่าเป็นไฟล์ HTML ที่มีsvgองค์ประกอบซึ่งไม่จำเป็นต้องxmlnsแต่ไม่จำเป็นและwidth heightผมคิดว่าในแง่ของไฟล์ SVG xmlnsซึ่งความต้องการที่เหมาะสม รหัสของคุณใช้ได้
Tim S.

ในรหัสที่สองถ้าคุณใช้ 24 แทน 12 คุณจะไม่ลด 1 ไบต์สำหรับแต่ละค่า x.5 หรือไม่
Einacio

@Einacio ใช่! :-) แต่น่าเสียดายที่ฉันยังได้รับไบต์ที่ "5", "6", "7" และ "8" แต่ละครั้ง ความยาวที่ได้จะเท่ากันทุกประการ
ossifrage คลื่นไส้

9

sh, 8604

ฉันคิดว่าบางคนอาจทำได้ดีกว่านี้ แต่เรามาเริ่มต้นกัน

echo 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|base64 -d|unxz>e.svg;echo \<img src=e.svg height=$1\>>e.htm;firefox e.htm

3
สิ่งนั้นจะไม่เกิดขึ้นภายใต้ช่องโหว่มาตรฐานของการเข้ารหัสเอาต์พุตหรือไม่?
user80551

4
สิ่งนี้อยู่ภายใต้หมวดหมู่ "ช่องโหว่มาตรฐาน"
Igglyboo

2
@Igglyboo: เป็นอย่างไร
Ry-

18
นี่คือคำตอบที่ยาวมากสำหรับความท้าทายในการเล่นกอล์ฟ :-)
อัล

2
@Igglyboo ไม่เห็นด้วย .svg เป็นแบบเวกเตอร์ดังนั้นจึงสามารถปรับขนาดได้อย่างไม่มีที่สิ้นสุด - และโดย$1พารามิเตอร์อินพุต
บาดเจ็บทางดิจิตอล

9

HTML5, 395

==> ลองออนไลน์

<canvas id=c><script>_='function e,t,n){c.savtranslate,trotatn?0:.42)}v=docuEleById("c"c=vContex"2d"scalw=(v.width=v.height=promp))/12,w76,1arc(56--114.2,6,66-13,6.-   2,1 11.5)c.clearRec2restor-7mov-71lin6,.5,strokt(   .5--e(0,);1,ment.geteTo(';for(Y in $='  ')with(_.split($[Y]))_=join(pop());eval(_)</script>

รหัสที่บีบอัดโดยใช้JSCrush

นี่คือรหัสที่ไม่มีการบีบอัด:

<canvas id=c>
<script>
v=document.getElementById('c');
c=v.getContext('2d');
function r(){c.rotate(0.42)}
function t(x,y){c.save();c.translate(x,y)}
c.scale(w=(v.width=v.height=prompt())/12,w);
t(7.5,6);
c.arc(0,0,5.5,0,6);
c.stroke();
c.moveTo(-7.5,-1);c.lineTo(6,-1);
c.moveTo(-7.5,1);c.lineTo(6,1);
c.stroke();
c.clearRect(4.2,0,6,6);
t(0,6);r();
c.clearRect(0,-11,3,6.2);
c.restore();
t(-7.5,-0.5);r();
c.clearRect(-1,-2,1,2);
c.restore();
t(-7.5,1.5);r();
c.clearRect(-1,-1.5,1,1.5)
</script>

สิ่งนี้สามารถลดลงเป็น 378 โดยการเล่นกอล์ฟแหล่งที่มาก่อนที่จะใช้ความสนใจ: jsfiddle.net/_nderscore/EUBG8
nderscore

นี่คือ JavaScript ไม่ใช่ HTML ฉันเหนื่อยกับคนที่ไม่เข้าใจวิธีการทำงาน
เต่า

1
ใช่เพราะ<canvas>แท็กคือ JavaScript ... HTML5 มักใช้เพื่อไม่เขียน HTML / CSS / JS ไม่ใช่ว่าคนไม่เข้าใจโปรแกรมเมอร์มักขี้เกียจ (อย่างน้อยฉันก็เป็น) ความคิดเห็นของคุณค่อนข้างรุนแรง
Michael M.

@Mig ฉันคิดว่า HTML + CSS + JS ชื่อ DHTML?
kinokijuf

6

PostScript, 270

7 7 แปล
/ ลิตร {} LineTo def
/ o {0 0} def
o 6 44.85 165.52 ส่วนโค้ง
-7.08 1.5 ลิตร
-7.5 .5 l
o 6 175.22 184.74 ส่วนโค้ง
-7.08 -.5 l
-7.5 -1.5 l
o 6 194.48 309.67 ส่วนโค้ง
o 5 320 197.46 arcn
1.87 -1.5 ล
2.29.5.5 l
o 5 185.74 174.26 arcn
2.7 .5 l
3.12 1.5 ลิตร
o 5 162.54 40 arcn
เติม closepath

นี่เป็นเพียงการกำหนดโครงร่างโดยการผนวกองค์ประกอบของเส้นทางตามพิกัดที่ฉันคำนวณด้วยความช่วยเหลือของ GeoGebra แล้วเติมโครงร่าง

ฉันบันทึกสองสามตัวอักษรโดยเพิ่มทางลัดสำหรับlineto( /l{lineto}def) และต้นกำเนิดของวงกลม ( /o{0 0}def)

หากต้องการระบุขนาดอื่นให้เพิ่มคำสั่งของฟอร์มหลังบรรทัดว่างบรรทัดแรกheight width scale

เมื่อเรียกใช้ด้วยตนเองจะเป็นการดึงเครื่องหมายยูโรที่มุมซ้ายล่างของหน้าขนาดหน้าเริ่มต้น เพียงบันทึกเป็นanything.psและดูด้วยโปรแกรมดูเอกสาร

นี่คือภาพของมันที่ขนาดเริ่มต้น rasterized ถึง 90 พิกเซลต่อนิ้วเล็กน้อย:

ขนาดเริ่มต้นที่ 90 ppi

ที่ 4x ขนาด:

ขนาด 4x ที่ 90 ppi

คุณสามารถดาวน์โหลดต้นฉบับเพื่อความเพลิดเพลินในการรับชมของคุณ


2
มันอ่านอาร์กิวเมนต์เพื่อกำหนดขนาดของสัญญาณหรือไม่?
อัล

@ n.1 โอ้ขอโทษฉันไม่ได้อ่านสเป็กส่วนนั้น ฉันจะแก้ไขมันหลังอาหารเย็น
AJMansfield

โปรดเพิ่มภาพหน้าจอของไฟล์ที่แสดงผล
อัล

1
@ n.1 ฉันได้เพิ่มรูปภาพ
AJMansfield

5

PHP (ไม่มี SVG), 628 597 ไบต์

ขอบคุณAsksAnywayสำหรับทางลัดที่ดีสำหรับฟังก์ชั่น (เช่น$c = print; $c('Hello world!');)

<?php header('Content-type:image/png');$h=$_GET['h'];$i=imagecreatetruecolor($h*1.1,$h*1.1);$c=imagecolorallocate;$b=$c($i,0,0,0);$w=$c($i,255,255,255);imagefill($i,0,0,$w);$l=$h*.7;$t=$h*.55;$u=$h/12;$e=imagefilledellipse;$e($i,$l,$t,$h,$h,$b);$e($i,$l,$t,$h*5/6,$h*5/6,$w);$f=imagefilledpolygon;$f($i,array($l+$u*5,$t+$u*1.5,$l-$u*7.5,$t+$u*1.5,$l-$u*7.125,$t+$u*0.5,$l+$u*4,$t+$u*.5,$l+$u*4,$t-$u*.5,$l-$u*7.5,$t-$u*.5,$l-$u*7.125,$t-$u*1.5,$l+$u*5,$t-$u*1.5),8,$b);$f($i,array($l+$u*4.24,$t-$u*4.24,$l+$u*1.84,$t+$u*1.5,$l+$u*3.84,$t+$u*3.26,$l+$u*3.84,$t+$u*4.62,$h*2,$t,),5,$w);imagepng($i);

โทรfile.php?h=200จากเบราว์เซอร์ของคุณเพื่อดูภาพ

พิกัดจะขึ้นอยู่กับการวัดที่ดำเนินการกับ GIMP

100 พิกเซล:

€ 100 พิกเซล

200 พิกเซล:

€ 200 พิกเซล

เลเยอร์เพิ่มทีละขั้นตอน:

# GIF

รหัสที่ไม่ได้รับการตอบโต้ (ส่วนที่เป็นเศษส่วนรหัส golfed มีค่าที่ปัดเศษ)

<?php
header('Content-type: image/png');

$h = $_GET['h'];

$i = imagecreatetruecolor($h * 1.1,$h * 1.1);

$c = imagecolorallocate;

# black
$b = $c($i,0,0,0);
# white
$w = $c($i,255,255,255);

imagefill($i,0,0,$w);

$l = $h * .7; # distance between left and center of the circle
$t = $h * .55; # distance between top and center of the circle

# one "unit", as defined by the specs
$u = $h / 12;

$e = imagefilledellipse;
# disk is black
$e($i, $l, $t, $h, $h, $b);
# inner disk is white
$e($i, $l, $t, $h * (5 / 6), $h * (5 / 6), $w);

$f = imagefilledpolygon;
# draw 2 bars in black
$f($i, array(
# bottom bar
$l + $u * 5, $t + ($u * 1.5), # bottom right
$l-$u * 7.5, $t + ($u * 1.5), # bottom left
$l-$u * 7.125, $t + ($u * 0.5), # top left
$l + $u * 4, $t + ($u * 0.5), # top right
# top bar
$l + $u * 4, $t - ($u * 0.5), # bottom right
$l-$u * 7.5, $t - ($u * 0.5), # bottom left
$l-$u * 7.125, $t - ($u * 1.5), # top left
$l + $u * 5, $t - ($u * 1.5) # top right
), 8, $b);

# hide right parts of bars and circle by drawing white
$f($i, array(
$l + $u * 6 * (212 / 300), $t - ($u * 6 * (212 / 300)), # right of the disk
$l + $u * 6 * (92 / 300), $t + ($u * 6 * (74 / 300)), # left = bottom right of bottom bar
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (163 / 300)), # bottom of the circle
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (231 / 300)), # bottom of the circle too
$h * 2, $t, # some point at the right of the image (outside the image)
), 5, $w);

imagepng($i);

4

เครื่องมือบรรทัดคำสั่ง Bash + ImageMagick + linux ขนาด 460 ไบต์

base64 -d<<<H4sIADBMaVMAAy1Ru27DMAz8FUJdBVsk9QziLFo8uD/QrUDSOIDTBo1Rt39fUsl0POp0PEr7+88Zfq/L530w87redn2/bVu3cff1fe7JOdeLwsB2Oa7zYDw7A/Ppcp5XJWQO+9v7OsN9/VtOg/m4LMvuRS4ZOA7m1VkseQpBoQZvyXlQQPeA2JpEjVEGURL7EePkLCU3Rqw5Wo4EmLALVgaC9BUrk392OAWt0HUBPHrb+NQq4i5UzigeSU6Zsii5xOYiWLE0BCT1Z89QVKLD2dPEIbdEBasINWIDaiDxG2BjslpBXXTk5CeWFkYa1a2KuS0OMBfJ8RgdKzMr03DRP5Ojy5O8sE2ksdU1g+pcu+SqvILUWddNCBHbCIxvpj/s9ZsO/xXfC57OAQAA|zcat|convert -scale $1 svg:- png:-|xview stdin

นี้เป็นเทคนิคเดียวกับของ @ minitech คำตอบ แต่ข้อมูล .svg มาจากที่นี่ซึ่งเป็นที่สั้นมาก: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg ImageMagick แปลงข้อมูลเวกเตอร์เป็น. png data ที่สเกลที่ร้องขอและไปยัง xview

เอาท์พุทสำหรับ./euro.sh 30:

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

เอาท์พุทสำหรับ./euro.sh 300:

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


7
ทำไมเวอร์ชั่นใหญ่ถึงไม่เต็ม
โคลจอห์นสัน

2
คุณจะส่งออกภาพไปยัง stdin ได้อย่างไร?
phuclv

@ LưuVĩnhPhúcคุณไม่สามารถ "เอาท์พุท" เป็นอินพุตมาตรฐาน เขาแค่ส่งตัวละครไปให้base64ซึ่งเป็นโปรแกรมที่ถอดรหัสมันเป็นโทเค็นไบนารี (แทนไฟล์ svg อย่างเห็นได้ชัด) ซึ่งเขาทำสิ่งต่าง ๆ มากขึ้น
tomsmeding

2
@ tomsmeding ฉันเชื่อว่าพวกเขาสับสนกับชื่อหน้าต่างว่า "stdin"
mniip

@ ColeJohnson ฉันคิดว่าเวอร์ชันไม่เต็ม แต่ในรุ่นขนาดเล็กเส้นด้านในและด้านนอกจะแสดงใกล้พอที่จะปรากฏเป็นของแข็ง ต้องบอกว่ามีนามแฝงแปลก ๆ เกิดขึ้นกับ ImageMagick ที่ฉันไม่เข้าใจ - แต่ฉันคิดว่าภาพที่สร้างขึ้นนั้นใกล้พอสำหรับ code-golf ;-)
Digital Trauma

2

POV-Ray (370 ไบต์)

ฉันไม่สามารถหาวิธีแสดงพื้นที่แนวตั้งเดียวกันและรักษาอัตราส่วนภาพในเวลาเดียวกันได้ดังนั้นฉันจึงตัดสินใจปรับความสูงที่ถูกต้องและขึ้นอยู่กับผู้ใช้ในการแสดงในรูปแบบ 4: 3 เท่านั้น

camera{angle 9 location 102*z right x*8 up y*6 look_at 0}
light_source{99*z color 1}
plane{z,0 pigment{color rgb 1}}
#declare b=difference{box{<-5,-.5,1>,<8,.5,1>}box{-2,2 rotate-67*z translate 9.4*x}}
difference{union{torus{5.5,.5 rotate 90*x}object{b translate y}object{b translate -y}}box{<-3.83,-5,-3>,<-7,0,3>}box{<0,7,3>,<-4,-2,-3>rotate 23*z translate-2.5*x}}

ทำงานด้วย povray.exe /RENDER euro.pov -w600 -h800

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


2

กำลังประมวลผล 232 ไบต์

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

void E(int h){scale(h/12,h/12);noFill();strokeWeight(1);arc(7.5,6,11,11,0.7,PI*2-0.7,OPEN);noStroke();fill(0);shearX(-PI/6);rect(3.2,4.5,9,1);rect(4.4,6.5,8,1);shearX(PI/6);fill(255);rect(11,6,9,6);triangle(8.75,6,12.25,6,12.25,0);}

Ungolfed + โปรแกรมทั้งหมด

void setup()
{
  size(575, 500);
}

void draw()
{
  background(255);
  E(height);
  noLoop();
}

void E(int h)
{
  scale(h/12,h/12);
  //Main "C"
  noFill();
  strokeWeight(1);
  arc(7.5,6,11,11,0.7,PI*2-0.7,OPEN);
  //settings for other shapes
  noStroke();
  //the two bars
  fill(0);
  shearX(-PI/6);
  rect(3.2,4.5,9,1);
  rect(4.4,6.5,8,1);
  //bottom cut of "C"
  shearX(PI/6);
  fill(255);
  rect(11,6,9,6);
  //top cut of "C"
  triangle(8.75,6,12.25,6,12.25,0);
}

เอาท์พุต

กำลังประมวลผลร่างของยูโร


1
คุณสามารถกอล์ฟโดยใช้1แทนOPENเช่นเดียวกับการเปลี่ยนแปลง255ในbackgroundและfillเรียกร้องให้-1
Kritixi Lithos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.