Vẽ ký hiệu €


61

Mục tiêu là xuất hoặc hiển thị hình ảnh có ký hiệu € (euro) theo các thông số kỹ thuật sau (bỏ qua đường viền của dấu hiệu).

Ký €

Nguồn: http://en.wikipedia.org/wiki/File:Euro_Con cản.svg

Quy tắc:

  • Chương trình / tập lệnh phải lấy chiều cao của dấu hiệu bằng pixel làm đối số (không gian trống xung quanh dấu hiệu là tùy chọn)
  • Các dấu hiệu không thể được vẽ như hoặc từ một nhân vật, trực tiếp (nó cấm printcác trong ảnh) hoặc gián tiếp (tính 8364sau đó hiển thị nó trong một trang HTML)
  • Đầu ra không cần phải lưu vào bất kỳ tập tin nào, nó có thể được hiển thị sau đó chỉ hiển thị dưới dạng ảnh chụp màn hình
  • Lỗ hổng tiêu chuẩn của người Bỉ bị cấm
  • Mã ngắn nhất sẽ thắng

7
Khó khăn ! Đã đến lúc xem lại hình học / lượng giác của tôi. Tôi thấy một số tọa độ khá khó để suy luận.
Michael M.

5
Tôi đã phải tra cứu "khoa học"
Chấn thương kỹ thuật số

2
Tôi thực sự hy vọng câu trả lời của LaTeX + TikZ :)
Cole Johnson

12
Không có đồng Euro, vấn đề này sẽ không tồn tại, do đó một lần nữa chứng minh sự thật của "vấn đề Mo tiền mo"
Thomas Johnson

1
Tôi không biết cái gì có thể sử dụng được theo kiểu chữ và tôi không phải là người đánh máy. Nếu bạn muốn có một ký hiệu € hoàn hảo, chỉ cần sử dụng ký tự €. Nhưng đó không phải là mục tiêu của câu hỏi này. Tôi không mong đợi hình ảnh hoàn hảo pixel. Vui lòng thêm một câu hỏi khác với các quy tắc khác nếu bạn không thích câu hỏi này.
AL

Câu trả lời:


22

PostScript / GhostScript, 100

(96 cho chương trình, 4 cho tiền tố chuyển đổi dòng lệnh)

Chơi golf đầy đủ và token hóa bằng tay:

$ 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

Bạn có thể lấy một bản sao ở đây , để xem của riêng bạn.

Sau khi xem câu trả lời của @ ThomasW và xem xét chương trình của tôi một cách cẩn thận, tôi nhận ra rằng tôi có thể làm điều đó tốt hơn nữa.

Phiên bản mã thông báo tương đương với điều này:

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

Giải thích về tối ưu hóa:

Trước hết, tôi đã chuyển đổi giải pháp đầu tiên của mình thành một tập hợp của một số đường dẫn đơn giản hơn, thay vì một đường dẫn bao quanh toàn bộ. Tôi đã mượn phương pháp của Thomas để nhập một tham số, tốt hơn nhiều so với những gì tôi đã có.

Sau đó, tôi nhân tất cả các tọa độ với 10 và làm tròn mọi thứ để chỉ cho tôi tọa độ nguyên. Tôi cũng làm tròn các góc, và chuyển đổi hai góc lớn thành các góc âm tương đương. Điều này thuận tiện làm cho mọi số duy nhất rơi vào giữa -128 và 127.

Và sau đó tôi đã token hóa mọi thứ . Mỗi toán tử có thể được biểu diễn với một chuỗi hai byte mỗi. Và bởi vì mỗi số có thể được biểu diễn bằng một byte được ký duy nhất, mỗi số cũng chỉ trở thành hai byte. Phần duy nhất tôi không thể làm điều đó là hlúc bắt đầu, nhưng nó cũng chỉ có hai byte, chỉ là hvà một khoảng trắng sau nó.

Chạy nó như:

gs -dh=200 euro.ps

Cao 200 pt

gs -dh=80 euro.ps

Cao 80 pt

gs -dh=20 euro.ps

20 pt cao


Mới: Ngay cả phiên bản ngắn hơn!

Sử dụng đường dẫn người dùng được mã hóa, tôi đã quản lý để giảm kích thước chương trình xuống một vài byte. Mỗi chương trình này tương đương với chương trình đầu tiên, tạo ra đầu ra giống hệt nhau:

92 byte:

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

Điều này tương đương với:

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

Và một giải pháp khó hiểu hơi trực quan giúp tiết kiệm thêm một ký tự, chỉ với 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

Điều này tương đương với:

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
Công việc tuyệt vời Tôi đoán tôi sẽ phải tìm hiểu tất cả về mã thông báo nhị phân.
Thomas W.

@ThomasW. Mặc dù tôi chưa hoàn thành Tôi vẫn đang đọc qua tài liệu chuỗi đường dẫn được mã hóa ...
AJMansfield

Bạn không cần dung lượng sau hvì mã thông báo nhị phân tự phân định. BTW, làm thế nào bạn mã hóa nó? Tôi đã làm điều đó với một trình soạn thảo hex tiêu chuẩn, rất tẻ nhạt.
Thomas W.

2
Các tệp mã thông báo @ n.1 hoạt động chính xác giống như các tệp PostScript thông thường và thậm chí bạn có thể trộn lẫn các mã thông báo nhị phân và PostScript văn bản tiêu chuẩn trong cùng một tệp. Mỗi mã thông báo nhị phân tương ứng trực tiếp với một toán tử hoặc đối tượng khác, vì vậy bạn có thể dễ dàng thay thế hoặc chèn các hoạt động hoặc thậm chí sao chép đoạn mã vào chương trình khác. Chi tiết chính xác về hình thức mã thông báo có thể được tìm thấy trong Hướng dẫn tham khảo ngôn ngữ PostScript (sách đỏ) trong phần 3.12. Đường dẫn người dùng được mã hóa được mô tả trong 4.6.2.
AJMansfield

1
@ n.1 Tôi đã sử dụng trình soạn thảo hex để ghi tệp, vì lý do đó. Các byte phân cách mã thông báo thường tương ứng với các ký tự điều khiển trong ISO-latin-1 và mã hóa độ rộng cố định khác, nhưng nếu trình soạn thảo diễn giải nó trong UTF-8 hoặc mã hóa độ rộng biến đổi khác, bạn sẽ nhận được những thứ như vậy, giống với bất kỳ tập tin khác bao gồm dữ liệu nhị phân.
AJMansfield

50

Toán học, 193 183 177 173 169 166 byte

Yay, toán học! Tôi đang vẽ khu vực thỏa mãn một tập hợp bất đẳng thức (khá phức tạp) nhất định:

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->#]&

Cách sử dụng là e[height], vd e[100]:

nhập mô tả hình ảnh ở đây

Hoặc e[200]:

nhập mô tả hình ảnh ở đây

Bạn có thể nhận thấy rằng các cạnh sắc nét hơn được làm tròn một chút. Đó là bởi vì khu vực chỉ có thể được vẽ bằng cách lấy mẫu các điểm trong không gian và Mathicala không lấy mẫu từng pixel theo mặc định. Độ phân giải lấy mẫu có thể được tăng lên bằng cách thêm tùy chọn khác PlotPoints->#(sử dụng một mẫu trên mỗi pixel), thêm 14 ký tự . Tôi không khuyên bạn nên chạy nó với tùy chọn đó, vì nó làm tăng đáng kể thời gian chạy và hầu như không làm tăng sự hấp dẫn trực quan hơn #/4hoặc hơn thế. Do đó, (sau khi được OP phê duyệt), nó không được tính vào điểm số.

Đây là một phiên bản hơi vô căn cứ:

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

Lưu ý rằng trong phiên bản chơi gôn, tôi đã điều chỉnh hệ tọa độ theo hệ số 2 để tránh .5s, nhưng hóa ra số lượng ký tự thực sự giống hệt nhau.

Đây là một lời giải thích cho cách tôi làm việc ra công thức. Tôi chia hình thành hai vùng. Một cái chứa vòng và các sọc và được cắt ở bên phải với BCDEđộ dốc và bên trái với các sườn IJGH(nhiều hơn về sau). Cái kia chứa cùng một vòng, nhưng đơn giản là bị cắt ở tọa độ x của điểm D. Các điều kiện cho hai khu vực được kết hợp với ||, hoạt động như một liên minh tập hợp ở đây.

Vòng chỉ được định nghĩa là 5 < r < 6, rkhoảng cách từ điểm gốc. dễ dàng hơn để làm việc mặc dù ( x²+y²), vì vậy tôi đang sử dụng 25 < x² + y² < 36để có được tất cả các điểm trong vòng.

Các sọc nằm giữa ±.5±1.5. Chúng ta có thể xử lý cả hai sọc cùng một lúc, bằng cách lấy mô đun của y , vì vậy các sọc (có độ dài vô hạn) chỉ cần thực hiện .5 < |y| < 1.5. Một lần nữa, để kết hợp các sọc và vòng, tôi chỉ sử dụng ||.

Điều thú vị có lẽ là làm thế nào để có được "mặt nạ". Điểm Dcó tọa độ x5 cos 40° , vì vậy mặt nạ chăm sóc cạnh dưới (chỉ kết hợp với vòng) là vừa x < 5 cos 40°. Điều này có thể được áp dụng thông qua giao điểm thiết lập chuyển thành &&logic.

Các mặt nạ khác là phần thực sự khó khăn. Đầu tiên, hãy để độ dốc của BCDE. Chúng ta có thể dễ dàng xây dựng các điểm CD, (0, -6)5 (cos 40°, sin 40°), tương ứng. Các vector chỉ dọc theo dòng là chỉ D - C = (5 cos 40°, 5 sin 40° + 6). Để áp dụng mặt nạ ở bên phải, tôi chỉ cần tìm ra nếu một điểm nằm ở bên trái hoặc bên phải của dòng đó (hãy gọi vectơ dòng p). Tôi có thể tìm ra điều này bằng cách lấy vectơ từ Cđiểm quan tâm của tôi và chiếu nó lên một vectơ vuông góc với p. Dấu hiệu của hình chiếu sẽ cho tôi biết phía bên là điểm. Lấy vectơ vuông góc khá đơn giản trong 2D: lật tọa độ và đảo ngược dấu hiệu của một trong số chúng. Đó là biến dtrong mã của tôi:(-5 sin 40° - 6, 5 cos 40°). Các vectơ từ Cđến một điểm quan tâm q = (x, y)q - C = (x, y + 6). Hình chiếu chỉ là sản phẩm vô hướng (hoặc sản phẩm chấm) giữa qd. Cách tôi chọn dnó xảy ra để chỉ về bên trái, vì vậy tôi muốn d.(q-C) > 0. Điều kiện này áp dụng mặt nạ bên tay phải.

Đối với mặt nạ bên trái, tôi có thể sử dụng cùng một ý tưởng. Độ dốc là như nhau và do đó là như vậy d. Tôi chỉ cần bù điểm của tôi từ các góc dưới bên trái của sọc thay vì từ C. Những người có tọa độ (-7.5, 0.5)(sọc trên) và (-7.5, -1.5)(sọc dưới). Vì vậy, điều đó sẽ kêu gọi hai quy tắc độc lập cho hai sọc. Tuy nhiên, lưu ý rằng tất cả các điểm bị ảnh hưởng bởi mặt nạ dưới nằm ở dải dưới và do đó có y âm . Và tất cả các điểm bị ảnh hưởng bởi mặt nạ trên có y dương . Vì vậy, tôi chỉ có thể chuyển tôi bù đắp sử dụng Sign[y]đó là 1cho dương và -1cho tiêu cực y. Vì vậy, điểm bù của tôi trở thành(-7.5, -0.5 + Sign[y]). Nếu không, mặt nạ hoạt động giống như mặt nạ bên tay phải. Tất nhiên, lần này chiếu cần phải âm. Vì vậy, ngây thơ đó sẽ là một cái gì đó giống như RH-projection > 0 && LH-projection < 0(đó cũng là những gì tôi ban đầu có trong mã). Nhưng chúng ta có thể rút ngắn điều này, bởi vì nhân một số dương và một số âm phải đưa ra một số âm, vì vậy nó chỉ là RH * LH < 0( các phép chiếu tương ứng ở đâu RHLHlà gì).

Đó là nó. Đặt tất cả lại với nhau dẫn đến cấu trúc logic sau:

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

Để rõ ràng, tọa độ trong lời giải thích của tôi đề cập đến sơ đồ xây dựng được đưa ra trong thử thách. Như đã đề cập ở trên, mã của tôi thực sự nhân tất cả chúng bằng cách 2- tôi đã thay đổi nó để lưu byte, nhưng số byte thực sự giống hệt nhau và tôi không thể bận tâm để hoàn nguyên thay đổi một lần nữa. Ngoài ra số nguyên trông đẹp hơn.


1
Tôi còn khá mới đối với Mathematica, vì vậy tôi đánh giá cao một số nhận xét về mã của bạn!
Thomas W.

2
@ThomasW. tốt, các công cụ Mathicala thực tế chỉ là một cuộc gọi RegionPlotmà chỉ đơn giản là màu sắc trong tất cả các điểm trong không gian thỏa mãn một điều kiện nhất định. Vì vậy, cho nó x^2+y^2<1sẽ vẽ một vòng tròn đơn vị. Tôi sẽ thêm một lời giải thích cho các toán học thực tế mặc dù (sau tối nay).
Martin Ender

1
Độ dài của mã với các cạnh không tròn là gì? Tôi nghĩ rằng bạn có mã ngắn nhất tại thời điểm này, nhưng tôi không thể chấp nhận câu trả lời của bạn với các góc được làm tròn, sẽ không công bằng cho các câu trả lời khác không được làm tròn góc. Hãy làm theo đúng các thông số kỹ thuật. Cảm ơn
AL

@ n.1 Trừ khi bạn không đủ điều kiện trả lời PostScript của Thomas W. bởi vì nó là nhị phân hoặc vì nó được làm tròn quá mạnh mẽ, câu trả lời của anh ấy chắc chắn ngắn hơn. Tuy nhiên, việc sửa độ phân giải mất 14 ký tự, vì vậy câu trả lời của tôi vẫn là ngắn nhất sau câu trả lời của anh ấy. Tôi sẽ chỉnh sửa.
Martin Ender

1
@ThomasW. bạn đi đi
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;

tải xuống trình giả lập tại http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

Trong BBC cơ bản, tất cả các đồ họa được xử lý ở mức thấp bằng cách sử dụng các ký tự điều khiển ASCII dành riêng cho máy (nhưng một số lệnh cấp cao cũng có sẵn cho các lệnh phổ biến để thuận tiện.) Các lệnh được sử dụng ở đây là 22 (thay đổi chế độ hiển thị) 29 (thay đổi gốc) và 25, tương đương với câu lệnh PLOT, có tham số hành động bổ sung (vẽ đường thẳng, đường tròn, tam giác, v.v. trong nền / tiền cảnh với di chuyển tương đối / tuyệt đối) trước các tham số X và Y.

Vì vậy, tất cả những gì tôi phải làm là gửi một tải các ký tự đến bộ điều khiển VDU. các giá trị kết thúc bằng dấu chấm phẩy là 16 bit. những người khác là 8 bit. Tổng số byte được gửi đến bộ điều khiển VDU là 91 , mặc dù bản thân nó sẽ không đủ điều kiện làm câu trả lời vì trong giai đoạn đó kích thước được mã hóa cứng.

Vị trí rõ ràng cho nguồn gốc là trung tâm của vòng tròn, nhưng thực sự có nhiều lệnh hơn liên quan đến việc sản xuất các thanh. Vì vậy, tôi đã chuyển gốc từ 1,5 xuống dưới cùng của thanh dưới, điều này làm giảm số lượng phân số và số âm cần thiết. Nó vẫn nằm trên đường thẳng đứng với tâm của vòng tròn, điều này rất quan trọng vì đường E bắt đầu từ đường thẳng đứng này.

Trên thực tế, tôi chỉ phải tính 3 số trong bản vẽ: góc trong cùng trên cùng của hình chữ C (5 cos 40, 5 sin 40 + 1.5) = (3.8302,3.1394 + 1.5) = khoảng (12 / 3.1, 4.6) và độ dốc của dòng E: x / y = 3.8302 / (6 + 3.1394) = 0.4157 = khoảng 1 / 2.4

Vì tôi chỉ có phiên bản đánh giá miễn phí (diễn giải), tôi lấy chiều cao biểu tượng làm đầu vào của người dùng. Nếu bạn mua phiên bản đầy đủ (29,99GBP), bạn có thể biên dịch và sau đó đọc dòng lệnh với w=VAL(@cmd$)/12.

Mã bị đánh cắp

Trong mã đánh gôn, chỉ có một câu lệnh VDU, nhưng trong mã không được mã hóa, tôi chia nó thành nhiều phần để rõ ràng. Ngoài ra, bởi vì BBC cơ bản là ít endian, sự kết hợp p,0,có thể được đánh gôn p;nhưng tôi đã để nó không rõ ràng.

  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)

nhập mô tả hình ảnh ở đây


BBC CƠ BẢN. Tuyệt vời! Điều này đưa tôi trở lại gần ba mươi năm!
Tom Chantler

1
@Dommer BBC Basic được phát hành lần đầu tiên vào năm 1981, hơn 20 năm trước khi các tờ tiền Euro đầu tiên được in (2002.) Vì vậy, đây là cách duy nhất bạn có thể vẽ một ký hiệu euro lớn trên một chiếc máy như vậy! Ngoài ra, bạn có thể xác định lại ký tự ASCII nthành biểu tượng đồng euro với bitmap 8x8, như sau : VDU 23,n,30,33,120,32,120,30,30,0. Theo Wikipedia, BBC Basic vẫn đang được phát triển, chủ yếu dành cho thiết bị di động.
Cấp sông St

Thật! Tôi nghĩ rằng chúng tôi đã có được chúng tôi vào năm 1984. Tôi nhớ vẽ các họa tiết thú vị trên giấy biểu đồ và sau đó thực hiện các biểu diễn nhị phân của chúng, vì tôi chắc chắn bạn cũng đã làm như vậy. Trên đó, tôi chỉ cần vẽ biểu tượng Euro của bạn bằng tay. Sẽ rất tốt khi lỗi đánh máy được sửa và giá trị chống cận được thay đổi từ 30 thành 33. Tôi thấy từ hồ sơ của bạn, bạn cũng đã sử dụng LOGO một lần nữa đưa tôi trở lại thời tiểu học. Thật tuyệt khi học BBC Basic vẫn còn được sử dụng cho đến ngày nay. Nếu nó đủ tốt cho chúng ta ...
Tom Chantler

Chỉ cần thêm vào, bitmap BBC Basic 8x8 có thể được tạo ra nhiều chữ "in nghiêng" hơn (phù hợp với logo lớn hơn) bằng cách thay đổi nó thành VDU 23,n,30,33,124,32,120,33,30,0. Cảm ơn chuyến đi xuống làn nhớ.
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>

Mặc dù điều này chỉ sử dụng công cụ SVG, nhưng nó chủ yếu dựa vào phân tích cú pháp HTML lỏng lẻo và phải được phục vụ dưới dạng HTML. SVG nghiêm ngặt sẽ yêu cầu nhiều byte hơn.

Thử nó!


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

1
Vâng, tôi đã suy nghĩ trong tọa độ PostScript, đó là cách khác! Hoán đổi trục y bây giờ.
Thomas W.

3
Làm việc cho tôi (Chrome 34) ngay cả khi không có dấu vết </svg>. Ồ, và đánh dấu đó là khủng khiếp . Tôi hy vọng bạn xấu hổ về bản thân. ;-)
Ilmari Karonen

2
@IlmariKaronen tôi xấu hổ ;-). Thông thường tôi thậm chí thích XHTML sạch hơn HTML. Dù sao, nếu tôi bỏ qua dấu vết </svg>, tôi chỉ thấy vòng tròn không phải là các dòng (trong một tệp độc lập, không phải bên trong đánh dấu JS Bin có thể thêm).
Thomas W.

1
Bạn có thể rút ngắn evt.targettới this, tiết kiệm 6 byte.
Bàn chải đánh răng

17

CSS, 512 494 byte

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

Không phải là câu trả lời nhỏ nhất bằng một chút công bằng, nhưng nhỏ như tôi có thể nhận được ngay cả khi triệu tập tất cả css-minification-fu của tôi

Hãy cẩn thận:

Đoạn mã trên với tất cả các hoạt động được loại bỏ 'px' trong Firefox & IE nhưng không phải là Chrome & Safari, điều khó hiểu hơn về các đơn vị của họ :)

Tôi cũng đã phải thêm lại px's để jsfiddle hoạt động:

http://jsfiddle.net/9A3J9/

100: nhập mô tả hình ảnh ở đây

200: nhập mô tả hình ảnh ở đây

mã không mã hóa:

 <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
skewXThủ thuật đó có thể giúp tôi tăng cường một mình.
manatwork

đó chính xác là những gì tôi bắt đầu viết ngày hôm qua. điểm sai cho bạn sau đó
Einacio

thiết lập id trên div và sử dụng getElementByIdgiảm 6 char. và sau đó bạn có thể sử dụng id trong css để giảm thêm 2
Einacio

Ngoài ra, pthẻ đóng có thể được bỏ qua nếu không có thêm nội dung nào sau nó (theo thông số kỹ thuật). và tôi cũng sẽ kiểm tra nếu các trình duyệt tự động tiết lộ div(hoàn toàn bị cấm bởi thông số kỹ thuật, nó hoạt động trong fiddle trên FF)
Einacio

@einacio gợi ý tuyệt vời! chúng tôi xuống còn 494 B. cảm ơn :)
caitriona

16

PostScript + Ghostscript 137 + 6 = 143 (nhị phân), 209 + 6 = 215 byte

Phiên bản đầy đủ golf với mã thông báo nhị phân:

$ 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

Tải xuống tệp nhị phân được mã hóa bằng tay

Phiên bản 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

Lưu dưới dạng euro.psvà chạy với Ghostscript như

gs -dh=80 euro.ps

Ký hiệu Euro, 80 điểm, được hiển thị bởi Ghostscript

gs -dh=20 euro.ps

Ký hiệu Euro, 20 điểm, được hiển thị bởi Ghostscript

Vì không có thứ gọi là pixel trong PostScript, chiều cao đó được diễn giải theo điểm thay thế. Tôi đã tính +6 cho công tắc trên dòng lệnh.


1
Meh, làm thế nào tôi có thể đánh bại kích thước tập tin biên dịch. : D ... Làm thế nào để các mã thông báo nhị phân hoạt động? Về cơ bản, nó không giống như biên dịch mã?
Martin Ender

DCđường không cắt sọc ngang chính xác. Nằm vuông góc từ Dkhông cắt hình 'vòng tròn' ở đúng vị trí, thấp hơn :(. Cũng giống như câu trả lời SVG của bạn.
user2846289

+ Các cạnh trái của sọc ngang không thẳng hàng.
dùng2846289

@ m.buettner Các tên PostScript quan trọng nhất có thể được thể hiện bằng cách sử dụng chuỗi hai byte. Điều này không thực sự biên dịch như bạn sẽ biên dịch chương trình C hoặc Java. Nó sẽ trải qua quá trình phân tích cú pháp giống như bất kỳ chương trình PostScript nào. Nếu bạn nhìn vào hexdump hoặc mở tệp nhị phân trong trình soạn thảo văn bản, bạn có thể thấy rằng nó gần giống với phiên bản ASCII, nhưng hầu hết các tên được thay thế bằng một chuỗi hai byte.
Thomas W.

@VadimR Bạn có một đôi mắt sắc nét! Tôi đoán rằng tôi đã giao dịch quá nhiều độ chính xác cho sự ngắn gọn (làm tròn quá mạnh mẽ). Tôi có thể phải thêm một số chữ số.
Thomas W.

13

Con trăn - rùa - 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 % 100python % 500tương ứng:


3
Bạn có thể lưu rất nhiều ký tự bằng cách loại bỏ một vài phím tắt bạn xác định. Bạn chỉ sử dụng cmột lần, vì vậy sẽ thực sự ngắn hơn khi chỉ gọi nó như vậy math.cos, và tôi nghĩ có lẽ có những người khác mà bạn có thể không viết tắt để cắt giảm chiều dài tổng thể.
AJMansfield

1
Bạn có thể cạo sáu ký tự bằng cách sử dụng from math import *sau đó bỏ các math.tiền tố.
alexwlchan

3
Bạn xác định u=t.circle, nhưng một vài dòng sau bạn quên trao đổi t.circle(...)cuộc gọi.
Alconja

2
Rùa để vẽ €. Thật là một thời gian để sống.
Nit

13

PHP, 432 435 367 356 334 byte

(Chỉnh sửa: Rõ ràng IJ và GH được cho là song song với BCDE. Hiện đã được sửa)

Kịch bản lệnh này xuất ra một hình ảnh SVG, nhưng sẽ phục vụ nó như text/htmlmặc định. Tôi nghĩ rằng hầu hết các trình duyệt sẽ coi đây là một trang web HTML có chứa hình ảnh SVG được nhúng. Dường như nó hoạt động tốt với tôi.

Chiều cao của hình ảnh được truyền dưới dạng tham số chuỗi truy vấn. (Lưu ý: số byte bao gồm một ký tự dòng mới ở cuối dòng 3, cần thiết để điều này hoạt động chính xác).

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

Phiên bản cập nhật ( 367 356 334 byte):

preg_replace_callback()là một cách hiệu quả hơn để nhân rộng các giá trị số. Mã này tạo ra đầu ra giống như phiên bản gốc. (Chỉnh sửa: Giảm thêm nhờ 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>');

Đầu ra:

euro.php? x = 60

nhập mô tả hình ảnh ở đây

euro.php? x = 200

nhập mô tả hình ảnh ở đây


widthheightkhông cần thiết ở đây. Và bạn cần chỉ định xmlnsđể nó hiển thị trong hầu hết các trình duyệt (đã thử nghiệm Firefox và Chrome; ngay cả với loại MIME phù hợp của SVG được gửi, cả hai đều hiển thị dưới dạng XML, không phải SVG). ideone.com/JkqVL0 (xóa giá trị x được mã hóa cứng cho giải pháp 369 byte)
Tim S.

@TimS. Không, nó sẽ không hoạt động chính xác nếu bạn chạy mã PHP ở chế độ ideone và sao chép kết quả vào tệp SVG. Nhưng nếu bạn thực sự xuất bản tập lệnh trên máy chủ web, PHP sẽ (theo mặc định) sẽ phục vụ kết quả với loại MIME text/html. Chrome và Firefox không có vấn đề gì với điều này, mặc dù tôi mới phát hiện ra rằng Safari có phần rắc rối hơn một chút.
squossish ossifrage

Ah! Bây giờ tôi thấy mẹo: text/htmlvới <svg>...được hiểu là một tệp HTML có một svgphần tử, không cần xmlnsnhưng không cần widthheight. Tôi đã suy nghĩ về một tập tin SVG, cần phải đúng xmlns. Mã của bạn là tốt.
Tim S.

trên mã thứ hai, nếu bạn sử dụng 24 thay vì 12, bạn sẽ không giảm 1 byte trên mỗi giá trị x.5 chứ?
Einacio

@Einacio Vâng! :-) Thật không may, tôi cũng nhận được một byte ở mỗi lần xuất hiện của "5", "6", "7" và "8". Độ dài kết quả là hoàn toàn giống nhau.
squossish ossifrage

9

sh, 8604

Tôi nghĩ ai đó có thể có thể làm tốt hơn, nhưng hãy bắt đầu điều này.

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

3
Điều đó có xảy ra dưới kẽ hở tiêu chuẩn của mã hóa cứng đầu ra không?
user80551

4
Điều này chắc chắn rơi vào loại "sơ hở tiêu chuẩn".
Igglyboo

2
@Igglyboo: Làm sao vậy?
Ry-

18
Đây là một câu trả lời rất dài cho một thử thách golf-code. :-)
AL

2
@Igglyboo Không đồng ý. .svg dựa trên vectơ nên có thể được thu nhỏ vô hạn - và theo $1tham số đầu vào.
Chấn thương kỹ thuật số

9

HTML5, 395

==> Dùng thử trực tuyến

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

Mã được nén bằng JSCrush .

Đây là mã không nén:

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

Điều này có thể giảm xuống còn 378 bằng cách đánh gôn nguồn trước khi áp dụng crush: jsfiddle.net/_nderscore/EUBG8
nderscore

Đây là JavaScript, không phải HTML. Tôi mệt mỏi vì mọi người không hiểu làm thế nào mà làm việc.
Rùa

1
Vâng, bởi vì <canvas>thẻ là JavaScript ... HTML5 thường được sử dụng để không viết HTML / CSS / JS. Không phải mọi người không hiểu điều đó, các lập trình viên thường lười biếng (ít nhất là tôi). Nhận xét của bạn có vẻ hơi khắc nghiệt.
Michael M.

@Mig Tôi nghĩ HTML + CSS + JS được gọi là DHTML?
kinokijuf

6

PostScript, 270

7 7 dịch
/ l {lineto} def
/ o {0 0}
o 6 44,85 165,52 cung
-7,08 1,5 l
-7,5 .5 l
o 6 175,22 184,74 cung
-7,08 -,5 l
-7,5 -1,5 l
o 6 194,48 309,67 cung
o 5 320 197,46 cung
1,87 -1,5 l
2,29 -,5 l
o 5 185,74 174,26 cung
2,7 .5 l
3,12 1,5 l
o 5 162,54 40 cung
điền thông tin

Điều này chỉ xác định phác thảo bằng cách nối thêm các phần tử đường dẫn dựa trên tọa độ tôi đã tính toán với sự trợ giúp của GeoGebra, và sau đó điền vào phác thảo.

Tôi đã lưu một vài ký tự bằng cách thêm các phím tắt cho lineto( /l{lineto}def) và nguồn gốc của vòng tròn ( /o{0 0}def).

Để chỉ định một kích thước khác, hãy thêm một lệnh của biểu mẫu sau dòng trống đầu tiên.height width scale

Khi tự chạy, cái này sẽ vẽ ký hiệu euro ở góc dưới bên trái của trang có kích thước trang mặc định. Chỉ cần lưu nó anything.psvà xem nó với một trình xem tài liệu.

Đây là hình ảnh của nó ở kích thước mặc định, được phóng to tới hơn 90 pixel mỗi inch:

kích thước mặc định ở 90 ppi

Với kích thước 4x:

Kích thước gấp 4 lần ở 90 ppi

Bạn cũng có thể tải về bản gốc cho niềm vui xem của riêng bạn.


2
Nó có đọc bất kỳ đối số để xác định kích thước của dấu hiệu không?
AL

@ n.1 oh, xin lỗi, tôi đã không đọc phần đó của thông số kỹ thuật. Tôi sẽ sửa nó sau bữa tối.
AJMansfield

Vui lòng thêm một ảnh chụp màn hình của tập tin kết xuất.
AL

1
@ n.1 Tôi đã thêm hình ảnh.
AJMansfield

5

PHP (không có SVG), 628 597 byte

Cảm ơn AsksAnyway về các phím tắt đẹp cho các chức năng (ví dụ $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);

Gọi file.php?h=200từ trình duyệt của bạn để xem hình ảnh

Các tọa độ dựa trên các phép đo được thực hiện với GIMP

100 pixel:

€ 100 pixel

200 pixel:

€ 200 pixel

Các lớp được thêm từng bước:

# ẢNH ĐỘNG

Mã không được mã hóa (có phân số, mã được đánh dấu có giá trị làm tròn)

<?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 + công cụ dòng lệnh linux, 460 byte

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

Đây là kỹ thuật tương tự như câu trả lời của @ minitech . Nhưng dữ liệu .svg xuất phát từ đây, ngắn hơn nhiều: http : //commons.wik mega.org/wiki/File:Euro_symbol_black.svg . ImageMagick chuyển đổi dữ liệu vectơ thành dữ liệu .png theo tỷ lệ và đường ống được yêu cầu thành xview.

Đầu ra cho ./euro.sh 30:

nhập mô tả hình ảnh ở đây

Đầu ra cho ./euro.sh 300:

nhập mô tả hình ảnh ở đây


7
Tại sao phiên bản lớn không được lấp đầy?
Cole Johnson

2
Làm thế nào bạn có thể xuất hình ảnh để stdin?
phuclv

@ LưuViênPhúc Bạn không thể "xuất" thành đầu vào tiêu chuẩn. Anh ta chỉ gửi một tải các ký tự đến base64, đó là một chương trình, dịch ngược nó thành các mã thông báo nhị phân (đại diện cho một tệp svg, rõ ràng), mà anh ta làm nhiều thứ hơn.
tomsmeding

2
@tomsmeding Tôi tin rằng họ đã nhầm lẫn với tiêu đề cửa sổ là "stdin".
mniip

@ColeJohnson Tôi nghĩ rằng không có phiên bản nào được lấp đầy, nhưng trên phiên bản nhỏ, các đường bên trong và bên ngoài được hiển thị đủ gần để xuất hiện chắc chắn. Đã nói rằng rõ ràng có một số điều bí danh kỳ lạ xảy ra với ImageMagick mà tôi không hiểu hết - nhưng tôi nghĩ rằng hình ảnh được tạo ra đủ gần với môn đánh gôn ;-)
Chấn thương kỹ thuật số

2

POV-Ray (370 byte)

Tôi không thể tìm ra cách kết xuất cùng một khu vực dọc và duy trì tỷ lệ khung hình cùng một lúc, vì vậy tôi quyết định chọn chiều cao chính xác và tùy theo người dùng chỉ hiển thị ở định dạng 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}}

chạy với povray.exe /RENDER euro.pov -w600 -h800

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


2

Đang xử lý, 232 byte

Việc xử lý không thực sự cho phép tham gia vào các đối số dòng lệnh vì nó rất chuyên dụng để vẽ, nhưng hàm của tôi lấy tham số là chiều cao để bù. Các tọa độ được mã hóa cứng / xấp xỉ từ hình ảnh trên và toàn bộ khung vẽ được chia tỷ lệ dựa trên tham số đầu vào để có được các bản vẽ có kích thước tùy ý.

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 + toàn bộ chương trình

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

Đầu ra

Xử lý phác thảo Euro


1
Bạn có thể chơi gôn bằng cách sử dụng 1thay vì OPENcũng thay đổi 255trong backgroundfillgọi tới-1
Kritixi Lithos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.