画出欧元符号


61

目标是根据以下规范输出或显示带有€(欧元)符号的图像(忽略符号的边框)。

€符号

来源:http : //en.wikipedia.org/wiki/File : Euro_Construction.svg

规则:

  • 程序/脚本必须将符号的高度(以像素为单位)作为参数(符号周围的空白是可选的)
  • 符号不能被绘制为或从字符,直接(它禁止print所述图像中)或间接(计算8364然后在HTML页面显示它)
  • 输出不需要保存到任何文件,可以显示然后将其显示为屏幕截图
  • 禁止使用标准“漏洞”
  • 最短的代码胜出

7
棘手的!现在该回顾我的几何/三角学了。我看到很难推论出一些坐标。
Michael M.

5
我不得不查找“兼收并蓄”的产品
数字创伤

2
我真的很希望得到LaTeX + TikZ的答案:)
科尔·约翰逊

12
没有欧元,这个问题将不复存在,从而再次证明了“货币问题”的真相
托马斯·约翰逊

1
我不知道什么是印刷上可用的,而且我不是印刷师。如果您想要一个完美的€符号,只需使用€字符。但这不是这个问题的目的。我没想到像素完美的图像。如果您不喜欢这个问题,可以随意添加另一个规则不同的问题。
AL

Answers:


22

PostScript / GhostScript,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

优化说明:

首先,我将第一个解决方案转换为一些更简单的子路径的并集,而不是限制整个事物的一个路径。我借用了Thomas的输入参数方法,这比我以前的方法要好得多。

然后我将所有坐标乘以10,然后将所有内容四舍五入,以得到整数坐标。我还对角度进行了四舍五入,并将两个大的角度转换为等效的负角度。这方便地使每个数字都介于-128和127之间。

然后我标记了一切。每个运算符都可以用两个字节的序列表示。并且由于每个数字都可以由一个带符号的字节表示,因此每个数字只能变成两个字节。我唯一不能使用的部分是h开头,但是也只有两个字节,只是h和后跟一个空格。

运行为:

gs -dh=200 euro.ps

200点高

gs -dh=80 euro.ps

80点高

gs -dh=20 euro.ps

高20点


新:甚至更短的版本!

使用编码的用户路径,我设法将程序大小减少了几个字节。这些程序中的每一个都等效于第一个程序,产生相同的输出:

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

您不需要空格,h因为二进制标记是自定界的。顺便说一句,你是怎么编码的?我是用一个标准的十六进制编辑器完成的,这很乏味。
Thomas W.

2
@ n.1标记化文件的工作原理与常规PostScript文件完全相同,您甚至可以在同一文件中混合使用二进制标记和标准纯文本PostScript。每个二进制标记都直接对应于一个运算符或其他对象,因此您可以轻松地替换或插入操作,甚至将代码段复制到另一个程序。有关标记化形式的确切详细信息,请参见《PostScript语言参考手册》(红皮书)的3.12节。编码的用户路径在4.6.2中描述。
AJMansfield

1
因此,@ n.1我使用了十六进制编辑器来编写文件。令牌定界符字节通常对应于ISO-latin-1和其他固定宽度编码中的控制字符,但是如果编辑器以UTF-8或其他可变宽度编码来解释它,则您将得到类似的东西另一个包含二进制数据的文件。
2014年

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默认情况下不会对每个像素进行采样。可以通过添加另一个选项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
  ]
);

请注意,在高尔夫球版中,我将坐标系缩放了2倍以避免.5s,但是事实证明,字符数实际上是相同的。

这是我如何计算公式的说明。我将形状分为两个区域。一个包含环和条纹,并在BCDE斜率处向右切开,在IJGH斜率处向左切开(稍后会详细介绍)。另一个包含相同的环,但只是在point 的x坐标处被切除D。这两个区域的条件与组合||,在此充当集合联合。

圆环仅定义为5 < r < 6,其中r是到原点的距离。尽管(x²+y²)更容易解决,所以我一直25 < x² + y² < 36在获取环中的所有点。

条纹介于±.5和之间±1.5。通过取y的模数,我们可以同时处理两个条纹,因此(无限长)条纹恰好满足.5 < |y| < 1.5。同样,要使用条纹和戒指的结合,我只是使用||

有趣的事情可能是如何获得“蒙版”。Point Dx坐标为5 cos 40°,因此遮罩的下边缘(仅与环结合使用)正好为x < 5 cos 40°。可以通过设置相交将其&&应用于逻辑。

其他面具是真正棘手的部分。首先,让我们获得的斜率BCDE。我们可以轻松地分别构造点CD,as (0, -6)5 (cos 40°, sin 40°)。沿直线指向的向量为D - C = (5 cos 40°, 5 sin 40° + 6)。要在右侧应用遮罩,我只需要弄清该点是位于该线的左侧还是右侧(我们称其为line vector p)。我可以通过采取矢量从摸不着头脑C,以我的兴趣点,并投射到一个向量垂直p。投影的符号会告诉我该点在哪一侧。在2D中获取垂直向量非常简单:翻转坐标并反转其中之一的符号。那是d我代码中的变量:(-5 sin 40° - 6, 5 cos 40°)。从C到兴趣点的向量q = (x, y)q - C = (x, y + 6)。投影只是之间的标量积(或点积)qd。我选择的方式d恰好指向左侧,所以我想要d.(q-C) > 0。此条件适用于右侧面罩。

对于左手面具,我可以使用基本相同的想法。斜率是相同的,因此也是如此d。我只需要从条纹的左下角而不是从偏移我的​​点即可C。那些具有坐标(-7.5, 0.5)(上部条纹)和(-7.5, -1.5)(下部条纹)。因此,这将需要针对两个条纹的两个独立规则。但是,请注意,受下遮罩影响的所有点都在下条纹中,因此具有负y。并且受上遮罩影响的所有点都为正y。因此,我可以简单地切换我使用偏移量Sign[y]1正,-1y。所以我的补偿点变成(-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会画一个单位圆。我将为实际数学添加一个解释(今晚晚些时候)。
马丁·恩德2014年

1
没有圆角的代码的长度是多少?我认为您目前的代码最短,但是我不能接受带有圆角的答案,这对其他没有圆角的答案是不公平的。请严格遵守规格。谢谢
AL

@ n.1除非您不赞成Thomas W.的PostScript答案,否则它的答案肯定会更短,因为它是二进制的,或者是因为它过于四舍五入。但是,固定分辨率需要14个字符,因此我的回答仍然比他短。我会编辑。
马丁·恩德

1
@ThomasW。你去!
马丁·恩德

29

英国广播公司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(更改原点)和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

非高尔夫代码

在高尔夫球代码中,只有一个VDU语句,但是在非高尔夫球代码中,为了清楚起见,我将其分解为多个。另外,由于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 BASIC。太棒了!这花了我将近三十年!
汤姆·钱特勒

1
@Dommer BBC Basic于1981年首次发行,距发行第一张欧元纸币(2002年)已有20多年的历史。因此,这是在这种机器上绘制大型欧元符号的唯一方法!或者,您可以将ASCII字符重新定义n为带有8x8位图的欧元符号,如下所示:VDU 23,n,30,33,120,32,120,30,30,0。根据Wikipedia的说法,BBC Basic仍在开发中,主要用于移动设备。
Level St

确实!我想我们是1984年获得的。我记得在方格纸上绘制很酷的精灵,然后算出它们的二进制表示形式,因为我敢肯定您也做过。在哪张纸上,我只是手工绘制了您的欧元符号。固定错字并且将倒数第二个值从30更改为33后,这非常好。我从您的个人资料中看到,您还使用了LOGO,这又使我回到了小学时代。得知今天仍在使用BBC Basic真是太好了。如果对我们足够好……
汤姆·钱特勒

只需添加一下,通过将BBC Basic 8x8位图更改为,可以使其更“斜体”(与较大的徽标保持一致)VDU 23,n,30,33,124,32,120,33,30,0。感谢您的记忆之旅。
汤姆·钱特勒

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⅂–
吱吱作响的ossifrage,

1
是的,我在考虑PostScript坐标,反之亦然!现在交换y轴。
Thomas W.

3
为我工作(Chrome 34),即使没有尾随</svg>。哦,这种标记太可怕了。我希望你为自己感到羞耻。;-)
Ilmari Karonen 2014年

2
@IlmariKaronen我 as 愧;-)。通常,我什至更喜欢干净的XHTML而不是HTML。无论如何,如果我</svg>不去尾随,我只会看到圆圈而不是线条(在独立文件中,可能不会在标记JS Bin中添加)。
Thomas W.

1
您可以缩短evt.targetthis,节省6个字节。
牙刷2014年

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: 在此处输入图片说明

非公开代码:

 <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

这正是我昨天开始写的。虚假的话给你
埃纳西奥2014年

在div上设置一个id并使用getElementById减少6个字符。然后您可以使用CSS中的ID再减少2个
Einacio 2014年

同样,如果p结束标记后没有更多内容,则可以省略结束标记(按规范)。并且我还要检查浏览器是否自动关闭div(尽管规范禁止,但它在FF上
无济于事

@einacio很棒的建议!我们
只有

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点,由Ghostscript渲染

gs -dh=20 euro.ps

欧元符号20点,由Ghostscript渲染

由于PostScript中没有象素之类的东西,因此该高度用点来解释。我为命令行上的开关计算了+6。


1
恩,我应该如何击败已编译的文件大小。:D ...这些二进制标记如何工作​​?基本上不是像手动编译代码吗?
马丁·恩德

DC线不能正确剪切水平条纹。从垂直向下D,在正确的地方不剪“圆圈”形状,降低:(貌似同样是你的SVG的答案了。
user2846289

+水平条纹的左边缘未对齐。
user2846289 2014年

@ m.buettner最重要的PostScript名称可以使用两个字节的序列表示。这并不是像编译C或Java程序那样真正地进行编译。它将经历与任何PostScript程序相同的解析过程。如果查看hexdump或在文本编辑器中打开二进制文件,则可以看到它与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 % 100python % 500分别为:


3
您可以摆脱定义的一些快捷键,从而节省大量字符。您只使用c一次,因此仅以as调用它实际上会更短math.cos,而且我认为可能还有其他一些您可以省略来缩短总长度。
2014年

1
您可以通过from math import *删除math.前缀来删除六个字符。
alexwlchan 2014年

3
您定义了u=t.circle,但过了几行之后,您却忘记了t.circle(...)调出电话。
阿尔孔贾2014年

2
乌龟画€。多么活着的时间。
尼特

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和Chrome;即使发送了SVG的正确MIME类型,它们都将其呈现为XML,而不是SVG)。ideone.com/JkqVL0(删除369字节解决方案的硬编码x值)
蒂姆·S。

@TimS。不,如果您在ideone上运行PHP代码并将结果复制到SVG文件中,它将无法正常工作。但是,如果您实际上是在Web服务器上发布脚本,则PHP(默认情况下)将以MIME类型提供结果text/html。Chrome和Firefox对此没有任何问题,尽管我刚刚发现Safari更具固定性。
吱吱作响的ossifrage,2014年

啊! 我现在看到了窍门:text/htmlwith <svg>...被解释为带有svg元素的HTML文件,该元素不需要the,xmlns但需要widthand height。我在考虑一个SVG文件,它需要适当的xmlns。您的代码很好。
蒂姆·S。

在第二个代码上,如果您使用24而不是12,是否不会在每个x.5值上减少1个字节?
艾纳西奥(Einacio)2014年

@Einacio是的!:-)不幸的是,每次出现“ 5”,“ 6”,“ 7”和“ 8”时,我也会获得一个字节。结果长度完全相同。
吱吱作响的ossifrage,2014年

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

4
这绝对属于“标准漏洞”类别。
Igglyboo,2014年

2
@Igglyboo:如何?
Ry-

18
对于代码高尔夫球挑战来说,这是一个很长的答案。:-)
AL

2
@Igglyboo不同意。.svg是基于矢量的,因此可以无限缩放-并由$1输入参数决定。
Digital Trauma 2014年

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,2014年

这是JavaScript,而不是HTML。我厌倦了人们不了解它是如何工作的。
乌龟

1
是的,因为<canvas>标记是JavaScript ... HTML5通常用于不编写HTML / CSS / JS。并不是人们不理解它,程序员经常是懒惰的(至少我是)。您的评论似乎有些刺耳。
Michael M.

@Mig我以为HTML + CSS + JS被称为DHTML?
kinokijuf 2014年

6

PostScript,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升
-7.5 -1.5公升
o 6 194.48 309.67弧
o 5320 197.46 arcn
1.87 -1.5公升
2.29 -.5升
o 5 185.74 174.26 arcn
2.7 .5升
3.12 1.5升
o 5 162.54 40 arcn
封闭路径填充

这只是通过根据我在GeoGebra的帮助下计算出的坐标附加路径元素来定义轮廓,然后填充轮廓。

通过添加lineto/l{lineto}def)快捷方式和圆的原点(),我节省了一些字符/o{0 0}def

要指定其他大小,请在第一个空白行之后添加一个格式的命令。height width scale

单独运行时,这会在默认页面大小的页面的左下角绘制欧元符号。只需将其另存为anything.ps并使用文档查看器查看即可。

这是默认大小的图像,栅格化为每英寸90像素多一点:

默认大小为90 ppi

4倍尺寸时:

90 ppi时为4倍大小

您也可以下载原始文件以自己欣赏。


2
它会读取任何参数来定义符号的大小吗?
AL 2014年

@ n.1哦,对不起,我没有阅读规范的那部分。晚饭后我会解决的。
2014年

请添加渲染文件的屏幕截图。
AL 2014年

1
@ n.1我添加了图像。
AJMansfield 2014年

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

非高尔夫代码(带分数,高尔夫球代码具有四舍五入的值)

<?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数据,并通过管道传输到xview。

输出为./euro.sh 30

在此处输入图片说明

输出为./euro.sh 300

在此处输入图片说明


7
为什么没有填写大版本?
科尔·约翰逊

2
如何将图像输出到stdin?
phuclv 2014年

@LưuVĩnhPhúc您不能“输出”到标准输入。他只是将大量字符发送到base64,这是一个程序,该程序将其反编译为二进制令牌(显然代表svg文件),并用它做更多的工作。
断定

2
@tomsmeding我相信他们对窗口标题为“ stdin”感到困惑。
mniip 2014年

@ColeJohnson我认为这两个版本都没有填充,但是在小版本上,内部和外部线条都呈现得足够接近以显示实心。话虽如此,但ImageMagick显然发生了一些我不完全了解的奇怪的混叠现象-但我认为生成的图像足够接近代码高尔夫;-)
Digital Trauma 2014年

2

POV射线(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);}

非高尔夫+整个程序

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.