€ 표시 그리기


61

목표는 다음 사양에 따라 € (유로) 표시가있는 이미지를 출력하거나 표시하는 것입니다 (표시의 경계를 무시).

€ 표시

출처 : http://en.wikipedia.org/wiki/File:Euro_Construction.svg

규칙 :

  • 프로그램 / 스크립트는 부호 의 높이를 인수로 픽셀 단위로 가져야합니다 (기호 주위의 빈 공간은 선택 사항입니다)
  • 기호 또는 문자에서 얻을 수없는, 직접 (금지 된 것 (계산 이미지) 또는 간접적으로 다음 HTML 페이지에 표시)print8364
  • 출력은 어떤 파일로도 저장할 필요가 없으며, 스크린 샷으로 표시 된 다음 표시 할 수 있습니다
  • 표준“허점” 은 금지되어 있습니다
  • 최단 코드 승리

7
까다로운! 이제 기하학 / 삼각법을 검토 할 차례입니다. 일부 좌표를 추론하기가 매우 어렵습니다.
Michael M.

5
"기능적"을 찾아야했습니다
Digital Trauma

2
나는 LaTeX + TikZ 답변을 정말로 기대하고 있습니다 :)
Cole Johnson

12
유로가 없다면,이 문제는 존재하지 않았으며, "Mo money mo problems"의 진실을 다시 한 번 보여줍니다
Thomas Johnson

1
인쇄 상으로 사용할 수있는 것이 무엇인지 알지 못하며 타이포 그래퍼가 아닙니다. 완벽한 € 부호를 원하면 € 문자를 사용하십시오. 그러나 이것이이 질문의 목표는 아닙니다. 나는 완벽한 픽셀 이미지를 기대하지 않았습니다. 이 규칙이 마음에 들지 않으면 다른 규칙으로 다른 질문을 추가하십시오.
AL

답변:


22

포스트 스크립트 / 고스트 스크립트, 100

(프로그램의 경우 96, 명령 행 스위치 접 두부의 경우 4)

완전 골프 및 수동 토큰 화 :

$ 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

최적화에 대한 설명 :

먼저, 첫 번째 솔루션을 전체를 둘러싸는 하나의 경로가 아닌 더 간단한 하위 경로의 통합으로 변환했습니다. 나는 토마스가 매개 변수를 입력하는 방법을 빌 렸는데, 내가 가지고있는 것보다 훨씬 낫습니다.

그런 다음 모든 좌표에 10을 곱하고 정수 좌표를 얻기 위해 모든 것을 반올림했습니다. 또한 각도를 반올림하고 두 개의 큰 각도를 동등한 음의 각도로 변환했습니다. 이것은 편리하게 모든 단일 숫자가 -128에서 127 사이에있게합니다.

그리고 나서 모든 것을 토큰 화했습니다 . 각 연산자는 각각 2 바이트 시퀀스로 표시 될 수 있습니다. 각 숫자는 하나의 부호있는 바이트에 의해 표현 될 수 있기 때문에, 각각의 하나는 또한 두 바이트가된다. 내가 할 수 없었던 유일한 부분 h은 시작 부분이지만 두 바이트만이 h며 그 뒤에 공백이 있습니다.

다음과 같이 실행하십시오.

gs -dh=200 euro.ps

200pt 높이

gs -dh=80 euro.ps

80pt 높이

gs -dh=20 euro.ps

20pt 높이


새로운 기능 : 더 짧은 버전!

인코딩 된 사용자 경로를 사용하여 프로그램 크기를 몇 바이트 줄였습니다. 이러한 각 프로그램은 첫 번째 프로그램과 동일하며 동일한 출력을 생성합니다.

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, 어떻게 코딩 했습니까? 나는 지루한 표준 16 진수 편집기로 그것을했습니다.
Thomas W.

2
@ n.1 토큰 화 된 파일은 일반 PostScript 파일과 정확히 동일하게 작동하며 이진 토큰과 표준 일반 텍스트 PostScript를 동일한 파일에 혼합 할 수도 있습니다. 각 이진 토큰은 연산자 또는 다른 개체에 직접 대응되므로 작업을 쉽게 바꾸거나 삽입하거나 스 니펫을 다른 프로그램으로 복사 할 수 있습니다. 토큰 화 된 양식에 대한 정확한 세부 사항은 3.12 절의 포스트 스크립트 언어 참조 매뉴얼 (빨간색 책)에서 찾을 수 있습니다 . 인코딩 된 사용자 경로는 4.6.2에 설명되어 있습니다.
AJMansfield

1
@ n.1 16 진수 편집기를 사용하여 파일을 작성했습니다. 토큰 구분 기호 바이트는 일반적으로 ISO-latin-1 및 기타 고정 너비 인코딩의 제어 문자에 해당하지만 편집기가 UTF-8 또는 다른 가변 너비 인코딩으로 해석하는 경우 다음과 같은 내용을 얻습니다. 이진 데이터를 포함하는 다른 파일.
AJMansfield

50

매쓰, 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는 기본적으로 각 픽셀을 샘플링하지 않기 때문입니다. 14PlotPoints-># 픽셀 을 추가하는 다른 옵션 (픽셀 당 하나의 샘플을 사용) 을 추가하여 샘플링 해상도를 높일 수 있습니다 . 나는 그 옵션을 사용하여 실행하는 것을 권장하지 않습니다. 런타임을 크게 늘리고 시각적 호소력을 거의 증가시키지 않기 때문 입니다. 따라서 (OP의 승인 후) 점수에 포함되지 않습니다.#/4

다음은 약간 ungolfed 버전입니다.

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

골프 버전에서는 .5s 를 피하기 위해 좌표계를 2의 배율로 조정 했지만 문자 수는 실제로 동일하다는 것이 밝혀졌습니다.

여기 수식을 어떻게 만들 었는지에 대한 설명이 있습니다. 모양을 두 영역으로 나누었습니다. 하나는 링과 줄무늬를 포함하고 함께 오른쪽으로 차단 BCDE경사와 함께 왼쪽 IJGH슬로프 (나중에 더 많은). 다른 하나는 동일한 고리를 포함하지만 point 의 x 좌표 에서 잘립니다 D. 두 지역의 조건이와 결합되어 ||여기서 집합 조합으로 작동합니다.

링은로 정의되며 5 < r < 6, 여기서 r원점과의 거리입니다. 그래도 해결하기가 더 쉽기 x²+y²때문에 25 < x² + y² < 36링의 모든 점을 얻는 데 사용 하고 있습니다.

줄무늬는 ~ 사이 ±.5±1.5있습니다. y 의 계수를 취함으로써 두 스트라이프를 동시에 처리 할 수 있으므로 무한 길이의 스트라이프가 충족 .5 < |y| < 1.5됩니다. 다시, 줄무늬와 반지의 결합을 취하기 위해 나는 단지을 사용하고 ||있습니다.

흥미로운 점은 아마도 "마스크"를 얻는 방법 일 것입니다. 점 Dx 좌표는 5 cos 40°이므로 아래쪽 가장자리를 처리하는 마스크 (링만 결합)는 그냥 x < 5 cos 40°입니다. 이것은 &&논리로 변환되는 교차점을 통해 적용될 수 있습니다 .

다른 마스크는 정말 까다로운 부분입니다. 먼저 기울기를 구해 봅시다 BCDE. 우리는 쉽게 포인트를 구성 할 수 CD같은 (0, -6)5 (cos 40°, sin 40°)각각. 선을 따라 가리키는 벡터는 단지 D - C = (5 cos 40°, 5 sin 40° + 6)입니다. 마스크를 오른쪽에 적용하려면 점이 해당 라인의 왼쪽 또는 오른쪽에 있는지 파악하면됩니다 (콜 라인 벡터 호출 p). 나는에서 벡터를 복용하여 알아낼 수있는 C관심의 내 지점과 벡터에 그것을 투영 수직 으로 p. 투영의 표시는 그 점이있는 쪽을 알려줍니다. 수직 벡터를 얻는 것은 2D에서 매우 간단합니다. 좌표를 뒤집고 그 중 하나의 부호를 뒤집습니다. 그것은 d내 코드 의 변수 입니다.(-5 sin 40° - 6, 5 cos 40°). 에서 C관심 지점 까지의 벡터 q = (x, y)q - C = (x, y + 6)입니다. 투영법은 q과 사이의 스칼라 곱 (또는 점 곱) d입니다. 내가 선택한 방식 d은 왼쪽을 가리 키므로 발생합니다 d.(q-C) > 0. 이 조건은 오른쪽 마스크를 적용합니다.

왼쪽 마스크의 경우 기본적으로 동일한 아이디어를 사용할 수 있습니다. 경사도 동일하므로 동일 d합니다. from 대신 왼쪽 하단 모서리에서 내 지점을 오프셋하면됩니다 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(여기서 RHLH각 돌기이다).

그게 다야. 이를 종합하면 다음과 같은 논리적 구조가됩니다.

(
  (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주면 단위 원이 그려집니다. 그래도 실제 수학에 대한 설명을 추가하겠습니다 (나중에 오늘 밤).
마틴 엔더

1
모서리가 둥글 지 않은 코드의 길이는 얼마입니까? 나는 지금 당신이 가장 짧은 코드를 가지고 있다고 생각하지만 둥근 모서리로 대답을 받아 들일 수는 없습니다. 둥근 모서리가없는 다른 대답에는 불공평합니다. 사양을 엄격히 준수하십시오. 감사합니다
AL

@ n.1 Thomas W.의 PostScript 답변을 실격하지 않는 한, 이진이거나 너무 공격적으로 반올림되므로 그의 대답은 확실히 짧습니다. 그러나 해상도를 수정하는 데 14자가 걸리므로 대답은 여전히 ​​가장 짧습니다. 편집하겠습니다.
Martin Ender

1
@ThomasW. 당신은 간다!
마틴 엔더

29

BBC 베이직, 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 (변경)입니다. X 및 Y 매개 변수 앞에 추가 조치 매개 변수 (상대 / 절대 이동이있는 배경 / 전경의 선, 원, 삼각형 등)를 취하는 PLOT 문과 동일합니다.

그래서 내가해야 할 일은 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.

Ungolfed 코드

골프 코드에는 VDU 문이 하나 뿐이지 만 ungolfed 코드에서는 명확성을 위해 여러 코드로 나눕니다. 또한 BBC 기본은 리틀 엔디안이기 때문에 조합 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 기본. 대박! 거의 30 년이 걸렸습니다!
Tom Chantler

1
@Dommer BBC Basic은 1981 년 첫 유로 지폐가 인쇄되기 20 년 전 (2002 년)에 처음 출시되었습니다. 따라서 이것이 이런 기계에 큰 유로 기호를 그릴 수있는 유일한 방법입니다! 또는 다음 n과 같이 8x8 비트 맵을 사용하여 ASCII 문자 를 유로 기호로 재정의 할 수 VDU 23,n,30,33,120,32,120,30,30,0있습니다. Wikipedia에 따르면 BBC Basic은 주로 모바일 장치 용으로 개발되고 있습니다.
Level River St

과연! 나는 우리가 1984 년에 우리를 얻었다 고 생각합니다. 그래프 용지에 멋진 스프라이트를 그린 다음 바이너리 표현을 수행하는 것을 기억합니다. 어느 쪽에서 유로 기호를 손으로 그렸습니다. 오타가 수정되고 최종 값이 30에서 33으로 변경되면 매우 좋습니다. 프로필에서 LOGO를 사용하여 다시 초등학교 시절로 돌아갈 수 있습니다. BBC Basic이 오늘날에도 여전히 사용되고 있음을 알게되어 기쁩니다. 그것은 우리를 위해 충분라면 ...
톰 챈 틀러

간단히 말해서 BBC Basic 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 만 사용하고 있지만 느슨한 HTML 구문 분석에 크게 의존하며 HTML로 제공되어야합니다. 엄격한 SVG에는 훨씬 더 많은 바이트가 필요합니다.

시도 해봐!


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

1
예, PostScript 좌표에서 생각하고 있었는데, 다른 방향입니다! 이제 y 축을 교체했습니다.
Thomas W.

3
후행 없이도 나를 위해 일하십시오 (Chrome 34) </svg>. 아, 그리고 그 마크 업은 끔찍하다 . 부끄러워하길 바랍니다. ;-)
Ilmari Karonen

2
@IlmariKaronen 나는 생각 ;-) 부끄러워. 일반적으로 HTML보다 깨끗한 XHTML을 선호합니다. 어쨌든, 후행을 남기지 </svg>않으면 선이 아닌 원만 볼 수 있습니다 (JS Bin이 아닌 독립형 파일에서 추가 할 수 있습니다).
Thomas W.

1
6 바이트를 절약 evt.target하여 단축 할 수 있습니다 this.
칫솔

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에서는 작동하지 않습니다.

jsfiddle이 작동하도록 px를 다시 추가해야했습니다.

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트릭은 내 공감대를 혼자 얻을 수 있습니다.
manatwork

바로 내가 어제 작성하기 시작한 것입니다. 그때 당신에게 허위 포인트
Einacio

div에서 id를 설정하고 사용 getElementById하면 6 문자가 줄어 듭니다. CSS의 id를 사용하여 2를 더 줄일 수 있습니다
Einacio

또한 p닫는 태그는 더 이상 내용이 없으면 (사양에 따라) 생략 될 수 있습니다. 그리고 브라우저가 자동 닫기인지 확인합니다 div(사양에서는 완전히 금지되어 있지만 FF의 바이올린에서 작동했습니다)
Einacio

@ einacio 좋은 제안! 우리는
494B

16

PostScript + Ghostscript 137 + 6 = 143 (바이너리), 209 + 6 = 215 바이트

이진 토큰이있는 완전 골프 버전 :

$ 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 포인트

gs -dh=20 euro.ps

유로 스크립트, 20 포인트, Ghostscript로 렌더링

PostScript에는 픽셀과 같은 것이 없으므로 높이는 포인트 단위로 해석됩니다. 커맨드 라인의 스위치에 대해 +6을 계산했습니다.


1
Meh, 컴파일 된 파일 크기를 어떻게 이길까요? : D ...이 바이너리 토큰은 어떻게 작동합니까? 기본적으로 코드를 직접 컴파일하는 것과 같지 않습니까?
마틴 엔더

DC선이 가로 줄무늬를 올바르게 자르지 않습니다. 에서 아래로 수직 D. 같은도 당신의 SVG의 대답처럼 바로 이곳에서 '원'의 형상을 절단하지 않는, 낮은 :( 같습니다.
user2846289

+ 가로 줄무늬의 왼쪽 가장자리가 정렬되지 않았습니다.
user2846289

@ m.buettner 가장 중요한 포스트 스크립트 이름은 2 바이트 시퀀스를 사용하여 표현할 수 있습니다. 이것은 C 또는 Java 프로그램을 컴파일하는 것처럼 실제로 컴파일되지 않습니다. PostScript 프로그램과 동일한 구문 분석 프로세스를 거칩니다. 16 진수 덤프를 보거나 텍스트 편집기에서 이진 파일을 열면 ASCII 버전과 거의 동일하지만 대부분의 이름이 2 바이트 시퀀스로 대체 된 것을 알 수 있습니다.
Thomas W.

@VadimR 당신은 날카로운 눈을 가지고 있습니다! 나는 간결함을 위해 너무 많은 정밀도를 교환했습니다 (너무 적극적으로 반올림). 숫자를 추가해야 할 수도 있습니다.
Thomas W.

13

파이썬-거북이-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 *하고 삭제 하여 6자를 줄일 수 있습니다 math..
alexwlchan

3
을 정의 u=t.circle했지만 몇 줄 후에는 t.circle(...)통화 를 교환하는 것을 잊었습니다 .
Alconja

2
€를 그리는 거북이. 살아있는 시간.
Nit

13

PHP, 432 435 367 356 334 바이트

(편집 : 분명히 IJ와 GH는 BCDE와 평행해야합니다. 이제 수정되었습니다)

이 스크립트는 SVG 이미지를 출력하지만 text/html기본적 으로 이미지를 제공합니다 . 대부분의 브라우저는 이것을 SVG 이미지가 포함 된 HTML 웹 페이지로 취급한다고 생각합니다. 어쨌든 잘 작동하는 것 같습니다.

이미지의 높이는 쿼리 문자열 매개 변수로 전달됩니다. (참고 : 바이트 수에는 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 를 지정해야 합니다 (Firefox와 Chrome에서 테스트했습니다. SVG의 올바른 MIME 유형을 보내더라도 SVG가 아닌 XML로 렌더링합니다). ideone.com/JkqVL0(369 바이트 솔루션의 하드 코딩 된 x 값 제거)
Tim S.

@TimS. 아니요, ideone에서 PHP 코드를 실행하고 결과를 SVG 파일로 복사하면 제대로 작동하지 않습니다. 그러나 실제로 웹 서버에 스크립트를 게시하면 PHP는 기본적으로 MIME 유형으로 결과를 제공합니다 text/html. Chrome과 Firefox에는 문제가 없지만 Safari가 조금 더 당황하다는 것을 알았습니다.
squeamish ossifrage

아! 나는 지금 트릭을 본다 : text/htmlwith <svg>...svg요소가 있는 HTML 파일로 해석되며, 필요하지 않지만 and xmlns는 필요하다 . SVG 파일과 관련하여 생각하고 있었는데 적절한 파일이 필요합니다 . 코드가 좋습니다. widthheightxmlns
Tim S.

두 번째 코드에서 12 대신 24를 사용하면 각 x.5 값에서 1 바이트를 줄이지 않습니까?
Einacio

@Einacio 예! :-) 불행히도 나는 또한 "5", "6", "7"및 "8"이 나타날 때마다 바이트를 얻는다. 결과 길이는 정확히 같습니다.
squeamish 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
이것은 코드 골프 도전에 대한 매우 긴 대답입니다. :-)
AL

2
@Igglyboo 동의하지 않습니다. .svg는 벡터 기반이므로 무한대로 크기를 조정할 수 있으며 $1입력 매개 변수를 기준으로합니다.
Digital Trauma

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>

크러쉬를 적용하기 전에 소스를 골프로 쳐서
nderscore

이것은 HTML이 아닌 JavaScript입니다. 나는 그것이 어떻게 작동하는지 이해하지 못하는 사람들에 질려 있습니다.
Tortoise

1
예, <canvas>태그는 JavaScript 이기 때문에 HTML5는 종종 HTML / CSS / JS를 작성하지 않습니다. 사람들이 그것을 이해하지 못하는 것이 아니라 프로그래머들은 종종 게으르다 (적어도 나는). 귀하의 의견은 약간 가혹한 것 같습니다.
Michael M.

@Mig HTML + CSS + JS가 DHTML이라고 생각했습니다.
kinokijuf

6

포스트 스크립트, 270

7 7 번역
/ l {lineto} def
/ o {0 0} def
o 6 44.85 165.52 호
-7.08 1.5 리터
-7.5 .5 리터
o 6 175.22 184.74 호
-7.08 -.5 l
-7.5 -1.5 리터
o 6 194.48 309.67 호
o 5320 197.46 아크
1.87 -1.5 리터
2.29 -.5 리터
o 5 185.74 174.26 아크
2.7 .5 리터
3.12 1.5 리터
o 5 162.54 40 아크
가까이 채우기

GeoGebra를 사용하여 계산 한 좌표를 기반으로 경로 요소를 추가하여 외곽선을 정의한 다음 외곽선을 채 웁니다.

lineto( /l{lineto}def)에 대한 단축키 와 원의 원점 ( ) 을 추가하여 몇 개의 문자를 저장했습니다 /o{0 0}def.

다른 크기를 지정하려면 첫 번째 빈 줄 뒤에 양식 명령을 추가하십시오 .height width scale

자체적으로 실행될 때 기본 페이지 크기의 페이지 왼쪽 하단에 유로 기호가 그려집니다. 다른 이름으로 저장 anything.ps하고 문서 뷰어로 봅니다.

기본 크기의 이미지는 인치당 90 픽셀을 약간 넘습니다.

90ppi의 기본 크기

4 배 크기 :

90ppi에서 4 배 크기

자신이 보는 즐거움을 위해 원본다운로드 할 수도 있습니다 .


2
부호의 크기를 정의하기 위해 인수를 읽습니까?
AL

@ n.1 아, 죄송합니다. 사양의 해당 부분을 읽지 못했습니다. 저녁 식사 후에 고칠 게요.
AJMansfield

렌더링 된 파일의 스크린 샷을 추가하십시오.
AL

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이미지를보기 위해 브라우저에서 전화

좌표는 김프로 수행 한 측정을 기준으로합니다.

100 픽셀 :

€ 100 픽셀

200 픽셀 :

€ 200 픽셀

단계별로 추가 된 레이어 :

# GIF

Ungolfed 코드 (분수를 사용하면 골프 코드는 반올림 된 값을 가짐)

<?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 's answer 와 동일한 기술 입니다. 그러나 .svg 데이터는 훨씬 짧은이다, 여기에서 온다 : http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick은 요청 된 스케일에서 벡터 데이터를 .png 데이터로 변환하고 xview로 파이프합니다.

에 대한 출력 ./euro.sh 30:

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

에 대한 출력 ./euro.sh 300:

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


7
큰 버전은 왜 채워지지 않습니까?
Cole Johnson

2
stdin으로 이미지를 어떻게 출력 할 수 있습니까?
phuclv

@ LưuVĩnhPhúc 표준 입력으로 "출력"할 수 없습니다. 그는 단지 많은 문자를로 보내는데, base64프로그램은 바이너리 토큰 (svg 파일을 나타내는)을 바이너리 토큰으로 디 컴파일하여 더 많은 일을합니다.
tomsmeding

2
@tomsmeding 나는 그들이 창 제목 "stdin"에 의해 혼란스러워 생각합니다.
mniip

@ColeJohnson 어느 버전도 채워지지 않았다고 생각하지만 작은 버전에서는 내부 및 외부 선이 단색으로 보일 정도로 가깝게 렌더링됩니다. ImageMagick과 관련하여 분명히 이해하지 못하는 이상한 앨리어싱 문제가 있다고 말했지만, 생성 된 이미지가 코드 골프에 충분히 가깝다고 생각합니다
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뿐만 아니라 변화 255backgroundfill호출에-1
Kritixi LITHOS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.