목표는 다음 사양에 따라 € (유로) 표시가있는 이미지를 출력하거나 표시하는 것입니다 (표시의 경계를 무시).
출처 : http://en.wikipedia.org/wiki/File:Euro_Construction.svg
규칙 :
목표는 다음 사양에 따라 € (유로) 표시가있는 이미지를 출력하거나 표시하는 것입니다 (표시의 경계를 무시).
출처 : http://en.wikipedia.org/wiki/File:Euro_Construction.svg
규칙 :
답변:
(프로그램의 경우 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
gs -dh=80 euro.ps
gs -dh=20 euro.ps
인코딩 된 사용자 경로를 사용하여 프로그램 크기를 몇 바이트 줄였습니다. 이러한 각 프로그램은 첫 번째 프로그램과 동일하며 동일한 출력을 생성합니다.
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
h
이진 토큰은 자체 구분되므로 공백이 필요하지 않습니다 . BTW, 어떻게 코딩 했습니까? 나는 지루한 표준 16 진수 편집기로 그것을했습니다.
예, 수학! 나는 어떤 (심지어 복잡한) 불평등을 만족시키는 지역을 계획하고있다 :
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
]
);
골프 버전에서는 .5
s 를 피하기 위해 좌표계를 2의 배율로 조정 했지만 문자 수는 실제로 동일하다는 것이 밝혀졌습니다.
여기 수식을 어떻게 만들 었는지에 대한 설명이 있습니다. 모양을 두 영역으로 나누었습니다. 하나는 링과 줄무늬를 포함하고 함께 오른쪽으로 차단 BCDE
경사와 함께 왼쪽 IJ
과 GH
슬로프 (나중에 더 많은). 다른 하나는 동일한 고리를 포함하지만 point 의 x 좌표 에서 잘립니다 D
. 두 지역의 조건이와 결합되어 ||
여기서 집합 조합으로 작동합니다.
링은로 정의되며 5 < r < 6
, 여기서 r
원점과의 거리입니다. r²
그래도 해결하기가 더 쉽기 x²+y²
때문에 25 < x² + y² < 36
링의 모든 점을 얻는 데 사용 하고 있습니다.
줄무늬는 ~ 사이 ±.5
에 ±1.5
있습니다. y 의 계수를 취함으로써 두 스트라이프를 동시에 처리 할 수 있으므로 무한 길이의 스트라이프가 충족 .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
. 투영의 표시는 그 점이있는 쪽을 알려줍니다. 수직 벡터를 얻는 것은 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
(여기서 RH
와 LH
각 돌기이다).
그게 다야. 이를 종합하면 다음과 같은 논리적 구조가됩니다.
(
(is_in_circle || is_in_stripe)
&&
is_between_left_and_right_mask
)
||
(
is_in_circle && left_of_edge
)
명확히하기 위해, 나의 설명의 좌표는 도전에 주어진 구성 다이어그램을 참조합니다. 위에서 언급했듯이 내 코드는 실제로 이들 모두를 곱합니다. 2
바이트를 절약하기 위해 변경했지만 바이트 수는 실제로 동일하며 변경 사항을 다시 되돌릴 수는 없습니다. 또한 정수가 더 좋아 보입니다.
RegionPlot
주어진 조건을 만족시키는 공간의 모든 지점에서 단순히 색을 입히는 호출 입니다. 그것을 x^2+y^2<1
주면 단위 원이 그려집니다. 그래도 실제 수학에 대한 설명을 추가하겠습니다 (나중에 오늘 밤).
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)
n
과 같이 8x8 비트 맵을 사용하여 ASCII 문자 를 유로 기호로 재정의 할 수 VDU 23,n,30,33,120,32,120,30,30,0
있습니다. Wikipedia에 따르면 BBC Basic은 주로 모바일 장치 용으로 개발되고 있습니다.
VDU 23,n,30,33,124,32,120,33,30,0
. 메모리 레인을 내려 주셔서 감사합니다.
<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에는 훨씬 더 많은 바이트가 필요합니다.
</svg>
. 아, 그리고 그 마크 업은 끔찍하다 . 부끄러워하길 바랍니다. ;-)
</svg>
않으면 선이 아닌 원만 볼 수 있습니다 (JS Bin이 아닌 독립형 파일에서 추가 할 수 있습니다).
evt.target
하여 단축 할 수 있습니다 this
.
<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를 다시 추가해야했습니다.
100 :
200 :
<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>
skewX
트릭은 내 공감대를 혼자 얻을 수 있습니다.
getElementById
하면 6 문자가 줄어 듭니다. CSS의 id를 사용하여 2를 더 줄일 수 있습니다
p
닫는 태그는 더 이상 내용이 없으면 (사양에 따라) 생략 될 수 있습니다. 그리고 브라우저가 자동 닫기인지 확인합니다 div
(사양에서는 완전히 금지되어 있지만 FF의 바이올린에서 작동했습니다)
이진 토큰이있는 완전 골프 버전 :
$ 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
gs -dh=20 euro.ps
PostScript에는 픽셀과 같은 것이 없으므로 높이는 포인트 단위로 해석됩니다. 커맨드 라인의 스위치에 대해 +6을 계산했습니다.
DC
선이 가로 줄무늬를 올바르게 자르지 않습니다. 에서 아래로 수직 D
. 같은도 당신의 SVG의 대답처럼 바로 이곳에서 '원'의 형상을 절단하지 않는, 낮은 :( 같습니다.
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
각각 :
c
한 번만 사용 하므로 실제로로 호출하는 것이 더 짧을 math.cos
수 있으며 전체 길이를 줄이기 위해 단축 할 수없는 다른 것이있을 것이라고 생각합니다.
from math import *
하고 삭제 하여 6자를 줄일 수 있습니다 math.
.
u=t.circle
했지만 몇 줄 후에는 t.circle(...)
통화 를 교환하는 것을 잊었습니다 .
(편집 : 분명히 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;
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 값 제거)
text/html
. Chrome과 Firefox에는 문제가 없지만 Safari가 조금 더 당황하다는 것을 알았습니다.
text/html
with <svg>...
는 svg
요소가 있는 HTML 파일로 해석되며, 필요하지 않지만 and xmlns
는 필요하다 . SVG 파일과 관련하여 생각하고 있었는데 적절한 파일이 필요합니다 . 코드가 좋습니다. width
height
xmlns
나는 생각하는 사람은 아마 더 잘 할 수 있지만,의이를 시작하자.
echo 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|base64 -d|unxz>e.svg;echo \<img src=e.svg height=$1\>>e.htm;firefox e.htm
$1
입력 매개 변수를 기준으로합니다.
<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>
<canvas>
태그는 JavaScript 이기 때문에 HTML5는 종종 HTML / CSS / JS를 작성하지 않습니다. 사람들이 그것을 이해하지 못하는 것이 아니라 프로그래머들은 종종 게으르다 (적어도 나는). 귀하의 의견은 약간 가혹한 것 같습니다.
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 픽셀을 약간 넘습니다.
4 배 크기 :
기능에 대한 멋진 지름길 (예 :)에 대한 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
이미지를보기 위해 브라우저에서 전화
좌표는 김프로 수행 한 측정을 기준으로합니다.
<?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);
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
:
base64
프로그램은 바이너리 토큰 (svg 파일을 나타내는)을 바이너리 토큰으로 디 컴파일하여 더 많은 일을합니다.
동일한 세로 영역을 렌더링하고 종횡비를 동시에 유지하는 방법을 알 수 없으므로 올바른 높이와 사용자가 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
처리는 그리기에 특화되어 있기 때문에 실제로 명령 줄 인수를 사용할 수는 없지만 내 함수는 매개 변수를 높이로 조정합니다. 좌표는 위의 이미지를 기준으로 하드 코딩 / 근사되며, 전체 캔버스는 임의의 크기의 도면을 얻기 위해 입력 매개 변수를 기반으로 조정됩니다.
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);}
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
대신 OPEN
뿐만 아니라 변화 255
에 background
및 fill
호출에-1