€記号を描く


61

目標は、以下の仕様に従って、ユーロ(ユーロ)記号付きの画像を出力または表示することです(記号の境界は無視します)。

€記号

ソース:http : //en.wikipedia.org/wiki/File : Euro_Construction.svg

ルール:

  • プログラム/スクリプトは、引数としてピクセル単位で記号の高さをとる必要があります(記号の周りの空のスペースはオプションです)
  • 記号は、直接、ようや文字から引き出された(それが禁じられていますすることができない画像の場合)または間接的(計算HTMLページでそれを表示した後)print8364
  • 出力はファイルに保存する必要はありません。スクリーンショットとして表示するだけで表示できます
  • 標準的な「抜け穴」は禁止されています
  • 最短のコードが勝つ

7
トリッキー!ジオメトリ/三角法を確認します。推測するのが非常に難しい座標がいくつかあります。
マイケルM.

5
「通性」を検索する必要がありました
デジタルトラウマ

2
私は本当にLaTeX + TikZの回答を期待しています:)
コールジョンソン

12
ユーロがなければ、この問題は、それによって、再び「MoのマネーMOの問題」の真実を証明、存在しません
トーマス・ジョンソン

1
活版印刷で何が使えるかわかりませんし、タイポグラファーでもありません。完璧な€記号が必要な場合は、€文字を使用してください。しかし、それはこの質問の目標ではありません。私はピクセル完璧な画像を期待していませんでした。この質問が気に入らない場合は、別のルールで別の質問を追加してください。
AL

回答:


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

最適化の説明:

まず、最初のソリューションを、全体を囲む1つのパスではなく、より単純なサブパスの結合に変換しました。私はトーマスのパラメータ入力方法を借りましたが、これは私が持っていた方法よりもはるかに優れています。

次に、すべての座標に10を掛け、すべてを四捨五入して、整数の座標だけにしました。また、角度を四捨五入し、2つの大きな角度を同等の負の角度に変換しました。これにより、すべての数値が-128〜127の範囲に収まります。

そして、私はすべてをトークン化しました。各演算子は、それぞれ2バイトのシーケンスで表すことができます。また、各数値は単一の符号付きバイトで表すことができるため、各数値 2バイトのみになります。私がそれを行うことができなかった唯一の部分hは開始時でしたが、それも2バイトだけで、hその後にスペースがあります。

次のように実行します。

gs -dh=200 euro.ps

高さ200 pt

gs -dh=80 euro.ps

高さ80 pt

gs -dh=20 euro.ps

高さ20 pt


New:さらに短いバージョン!

エンコードされたユーザーパスを使用して、プログラムサイズを数バイト減らすことができました。これらの各プログラムは最初のものと同等であり、同一の出力を生成します。

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人でもう1人のキャラクターを節約します。

$ 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
すごい仕事!バイナリトークンについてすべて学ぶ必要があると思います。
トーマスW.

しゅう まだ完全には終わっていませんが。私はまだ...エンコードされたパス文字列のドキュメントを通じて読んでいます
AJMansfield

hバイナリトークンは自己区切りであるため、その後にスペースは必要ありません。ところで、どのようにコーディングしましたか?標準の16進エディタでそれを行いましたが、これは面倒です。
トーマスW.

2
@ n.1トークン化ファイルは、通常のPostScriptファイルとまったく同じように機能し、バイナリトークンと標準プレーンテキストPostScriptを同じファイルに混在させることもできます。各バイナリトークンは演算子または他のオブジェクトに直接対応しているため、操作を簡単に置換または挿入したり、スニペットを別のプログラムにコピーしたりできます。トークン化されたフォームに関する正確な詳細は、セクション3.12 のPostScript言語リファレンスマニュアル(赤い本)にあります。エンコードされたユーザーパスについては、4.6.2で説明しています。
AJMansfield

1
@ n.1そのため、16進エディタを使用してファイルを書き込みました。トークン区切りバイトは通常、ISO-latin-1およびその他の固定幅エンコーディングの制御文字に対応しますが、エディターがUTF-8または別の可変幅エンコーディングで解釈している場合、そのようなものを取得します。バイナリデータを含むその他のファイル。
AJMansfield

50

Mathematica、193 183 177 173 169 166バイト

イェーイ、数学!特定の(やや複雑な)不等式を満たす領域をプロットしています。

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

使用法はe[height]、たとえばe[100]

ここに画像の説明を入力してください

またはe[200]

ここに画像の説明を入力してください

鋭いエッジがわずかに丸みを帯びていることに気付くかもしれません。これは、領域は空間内の点をサンプリングすることによってのみプロットでき、Mathematicaはデフォルトでは各ピクセルをサンプリングしないためです。サンプリング解像度はPlotPoints->#14文字を追加する別のオプション(ピクセルごとに1つのサンプルを使用)を追加することで増加できます 。このオプションを使用して実行することはお勧めしません。実行時間が大幅に増加し、視覚的な魅力がほとんど向上し#/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
  ]
);

ゴルフバージョンでは、.5s を避けるために座標系を2倍にスケーリングしましたが、文字数は実際には同じであることがわかります。

ここで、私が式をどのように計算したかについて説明します。シェイプを2つの領域に分割しました。一つはリングとストライプが含まれており、右側に遮断さBCDEと傾きと左IJ及びGH傾斜(すなわち後でより)。もう1つは同じリングを含んでいますが、単純にpointのx座標で切断されていDます。2つの領域の条件はで結合され||、ここで集合和として機能します。

リングは、と定義されています5 < r < 6。ここrで、は原点からの距離です。でも簡単に解決できる(x²+y²)ので25 < x² + y² < 36、リング内のすべてのポイントを取得するために使用しています。

ストライプが間にある±.5±1.5yのモジュラスを取得することにより、両方のストライプを同時に処理できるため、(無限の長さの)ストライプはを満たすだけ.5 < |y| < 1.5です。繰り返しますが、ストライプとリングの結合を取るために、私はただ使用してい||ます。

興味深いのは、おそらく「マスク」を取得する方法です。ポイントDx座標は5 cos 40°なので、下端を処理するマスク(リングのみと組み合わせる)はjust 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)です。突起は、間単に内積(又はドット積)であるqd。私がdそれを選んだ方法はたまたま左を指しているので、欲しいd.(q-C) > 0。この条件は、右側のマスクを適用します。

左手のマスクについては、基本的に同じ考えを使用できます。勾配は同じであるため、同じですd。fromの代わりにストライプの左下隅からポイントをオフセットするだけですC。それらには座標(-7.5, 0.5)(上のストライプ)と(-7.5, -1.5)(下のストライプ)があります。そのため、2つのストライプに対して2つの独立したルールが必要になります。ただし、下のマスクの影響を受けるすべてのポイントは下のストライプにあるため、負の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が比較的新しいので、あなたのコードに関するコメントをお願いします!
トーマスW.

2
しゅう まあ、実際のMathematicaのものはRegionPlot、与えられた条件を満たす空間内のすべての点を単純に色付けする呼び出しです。したがって、それx^2+y^2<1を与えると単位円が描かれます。ただし、実際の数学の説明を追加します(今晩)。
マーティンエンダー

1
角が丸くないコードの長さは?現時点であなたは最短のコードを持っていると思いますが、丸い角での回答を受け入れることはできません。角が丸くない他の回答には不公平です。厳密に仕様に従ってください。おかげで
AL

@ n.1トーマスW.のPostScriptの回答を失格にしない限り、バイナリであるか、あまりにもアグレッシブに丸められているため、彼の回答は間違いなく短いです。ただし、解像度の修正には14文字必要なので、私の答えは彼の次に短いです。編集します。
マーティンエンダー

1
しゅう 行くぞ!
マーティンエンダー

29

BBC BASIC、202

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

http://www.bbcbasic.co.uk/bbcwin/bbcwin.htmlからエミュレータをダウンロードしてください

BBCベーシックでは、すべてのグラフィックスはマシン固有のASCII制御文字を使用して低レベルで処理されます(ただし、一部の高レベルコマンドは一般的なものにも便利です)。ここで使用されるものは22(表示モードの変更)29(変更原点)および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ステートメントが1つしかありませんが、ゴルフコードでは、わかりやすくするためにいくつかに分けています。また、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。驚くばかり!これには約30年かかります!
トムチャントラー

1
@Dommer BBC Basicは、最初のユーロ紙幣が印刷される(2002年)の20年以上前の1981年に最初にリリースされました。またはn、次のように、ASCII文字を8x8ビットマップでユーロ記号に再定義できますVDU 23,n,30,33,120,32,120,30,30,0。ウィキペディアによると、BBC Basicは、主にモバイルデバイス向けにまだ開発中です。
レベルリバーセント

確かに!1984年に作成したと思います。グラフ用紙にクールなスプライトを描画し、バイナリ表現を作成したことを覚えています。ちなみに、私はあなたのユーロ記号を手で描きました。タイプミスが修正され、最後から2番目の値が30から33に変更されると、非常に良い結果が得られます。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軸を交換しました。
トーマスW.

3
末尾がなくても、私のために働きます(Chrome 34)</svg>。ああ、そのマークアップは恐ろしいです。あなたが自分を恥じていることを願っています。;-)
イルマリカロネン

2
@IlmariKaronen私恥ずかしいです;-)。通常、HTMLよりもクリーンなXHTMLを好みます。とにかく、末尾を省略した場合</svg>、線ではなく円だけが表示されます(マークアップJS Bin内ではなく、スタンドアロンファイルに追加される可能性があります)。
トーマスW.

1
に短縮evt.targetしてthis、6バイト節約できます。
歯ブラシ

17

CSS、512 494バイト

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

公正な最小の答えではありませんが、すべてのcss-minification-fuを呼び出したときにも得ることができるほど小さい

警告:

すべての「px」が取り除かれた上記のコードは、FirefoxとIEでは機能しますが、ChromeとSafariでは機能しません。

また、jsfiddleを機能させるためにpxを再度追加する必要がありました。

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トリックは、私の賛成票を独り占めする可能性があります。
マナトワーク

それがまさに昨日書き始めたものです。それからあなたへの間違ったポイント
Einacio

divにidを設定して使用getElementByIdすると、6文字が削減されます。その後、あなたは2より減らすためにCSSのIDを使用することができます
Einacio

また、p終了タグは、その後にコンテンツがなくなる場合は省略できます(仕様により)。また、ブラウザが自動クローズするかどうかも確認しますdiv(仕様では禁止されていますが、FFのフィドルで動作しました)
Einacio

@einacio素晴らしい提案!494 Bになりました。ありがとう:)
caitriona

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

Ghostscriptによってレンダリングされたユーロ記号、20ポイント

PostScriptにはピクセルのようなものはないので、その高さは代わりにポイントで解釈されます。コマンドラインでスイッチの+6を計算しました。


1
まあ、どのようにコンパイルされたファイルサイズを打ち負かすことになっています。:D ...これらのバイナリトークンはどのように機能しますか?基本的に手でコードをコンパイルするようなものではありませんか?
マーティンエンダー

DCラインが水平方向のストライプを正しく切断しません。垂直ダウンからD同じことが、あまりにも、あなたのSVGの答えであるように見える:(下、適切な場所で「円」形状をカットしていません。。
user2846289

+横縞の左端が整列していません。
user2846289

@ m.buettner最も重要なPostScript名は、2バイトシーケンスを使用して表現できます。これは、CまたはJavaプログラムをコンパイルするような実際のコンパイルではありません。PostScriptプログラムと同じ解析プロセスを実行します。hexdumpを見るか、テキストエディタでバイナリファイルを開くと、ASCIIバージョンとほぼ同じであることがわかりますが、ほとんどの名前は2バイトシーケンスに置き換えられています。
トーマスW.

@VadimRあなたは鋭い目をしています!簡潔にするために精度をあまりにも取りすぎたと思います(あまりにも積極的に丸めます)。数字を追加する必要があるかもしれません。
トーマス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(...)コールを交換するのを忘れました。
アルコンハ

2
€を描く亀。なんて生きている時間。
NIT

13

PHP、432 435 367 356 334バイト

(編集:どうやらIJとGHはBCDEと並行しているようです。現在修正済みです)

このスクリプトはSVG画像を出力しますがtext/html、デフォルトで提供します。ほとんどのブラウザは、これを埋め込みSVG画像を含むHTML Webページとして扱うと思います。とにかく私にとってはうまくいくようです。

画像の高さはクエリ文字列パラメーターとして渡されます。(注:バイトカウントには、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

ここに画像の説明を入力してください


widthheightここでは不要です。またxmlns、ほとんどのブラウザでレンダリングするためにを指定する必要があります(テスト済みのFirefoxおよびChrome。SVGの適切なMIMEタイプが送信されても​​、両方ともSVGではなくXMLとしてレンダリングします)。ideone.com/JkqVL0(369バイトソリューションのハードコードされたx値を削除)
ティムS.

@TimS。いいえ、ideoneでPHPコードを実行し、結果をSVGファイルにコピーすると、正しく動作しません。しかし、実際にWebサーバーでスクリプトを公開する場合、PHPは(デフォルトで)結果をMIMEタイプで提供しtext/htmlます。ChromeとFirefoxにはこれで問題はありませんが、Safariの方がややこしいことがわかりました。
squeamish ossifrage

あ!私は今、トリックを参照してくださいtext/html<svg>...してHTMLファイルとして解釈されるsvg必要はありません要素、xmlnsしかし必要ないwidthheight。適切なが必要なSVGファイルの観点から考えていましたxmlns。コードは問題ありません。
ティムS.

2番目のコードで、12の代わりに24を使用すると、x.5の各値で1バイト削減されませんか?
アイナシオ

@Einacioはい!:-)残念ながら、「5」、「6」、「7」、「8」が発生するたびに1バイトも増えます。結果の長さはまったく同じです。
squeamish ossifrage

9

sh、8604

誰かがおそらくもっとうまくやれると思いますが、これから始めましょう。

echo /Td6WFoAAATm1rRGAgAhARwAAAAQz1jM4H+YGLhdAB4Py4cR2M5mkQ+DHsr9ezPUf+m32igxdiVmIE0qCW1q9ylwOEETlQiK0Fsdk0viUoZ92eYvWaMHdwLoMvi6YDwnr8S/yxLAdptt59wmMVhiurpONaAjMQ9GMfk6S30qx7jrBFm5ec/+Hn3vgsK40Jb07a6/0rVXAFjJIovBtvKPxLBzhck8dVbcobncgkaX2KwqKMU/iP53UquQVeD8Nge+b3lxQ6sFl9unjQy8r1YpGcimh121n0ukvQ5j+QnWIWoLj0v3NigOOM277wOfPQkw0oxC6AA3EB18EbFisDx4CJQKfK9AGsEYoh+ILP4UnIQrlecXuly9QXblNneSkZ5FNB2XlHBxuYAPnkQl0SU/vOWtozgXSyYgwgGabdR0/K/2m8Tm9xiiqGe+HwD8zzaEOB1anMtUnFRupCUCjyl1QQ8Ca2QkLTEo7S7oPCYh6y2ztXdsIBWCvYEHa0OLIuX3t5s7DraSjYGlbiCQF0mJf4KFFBR5TXwUQxq2YHfhNHRitStzvemCYBAYNbQ3Jv6rVibvg54pYu9hdX0pqQsRABX39jyTDiizCbMOs/mFveZqDUT15nvIjsC1Z9i9fJFA1uHYgVZYZKXELaRD/umATW4sK5ADKUeoFzDYfozSjhVZMe8uZ2QnafbwCHdaDxMDq1qkabmhMV9Xa73iKNZlf/3AXXaQNe2zTLixO2UcXOgW7eJ2HrtOCXqSbWWSlDzDmycDelezms0hK7qleLNapDHZFuvr8MoVvuikKjkAX3Cc1DKnwS5wtWjn6wlx+5Q7LNQjS79ccEo9H/aPQ1mbPwekoefgMdFVYMKXImJV5EGn5p7cw1H/BScuwgzk9dV8vnpnVCz+HqeIG0wSXuBgipP548iAclUncu/NYqe3M5q19PXIsaSed44ScJn97yMdYbpjhb9J/34c1/1nIZMgFjAkAXbaOglmGTNC0VQo7/CubHyXy5OJTiyHqNUfskOTGP1A/Nla3Nag9gzKK7yiTimKbJCaZj5JcviByWuKguR/uAiDLHIAPFS9R96JeNYJEg9JyWjAMU2nSSS3AFDKpNIqNr3NLKd1BLo8JyPpnfCJswwgs1RjsjTk0McOTTeAKfEMhWlEXlNKcCV9eLunwwv7Xx5azMOUpO8KKZ5XBXZZafai1FbQqKY/0RRJ1sa6l/2YEq6hhNuiJ7KqrCM7pwXNFXUriO5o2tUWt/lgHOV0ronovl7yrPp5xUcAudDnNcZP6H9QoDiFjhidBOBsmObzQfCHlS+sMcN1t+sP3JLUxFv5jKCBFT+pjtGyugg4H8EKT4qz/V+LNEKR3FaS9SPxTq0k8sDo6PlxcRfXxkgyJ5stYsqVrLGmkeoGy0OTQ6y1lkmC5+Af9Oo2HvCvW4a4SBMobiZvsTNRzJxTh4k8drMHhYMkT8R+WGT2c9GvPmYwBSjh/NVxrT5twHKpjLB/ZsUU3+mGfkU+H49DNnHxXAla4UL3Ivp4GviWgl65SkyxfCIl678h+nIN07rvgGrSX7bt+wCvsKnIioXR+k7VYv88upJnIcjQepEtkZSCwwX81KTjdugGDt2NnWJM7wAWQjzx+wAOp1k5Lz3dEDpOXlsuOvTuNOY9b0FyBb8HF+cmWaRNKOvmbBvf4yITqthVM8PtKqYEJKwoTEm2ewAGTHcct8y7SMWnWjwdxiS9vFl2i1yWtpon54IY/uiyjyfm4HG1eO/zklccbKCkS5JnCNY1FfqKYxaGzAhjWOmuEgitjtnNJ9m1vFyllOaaWNal/otis6OD5pVG3xWbqgQVxCQZlpZcFlUvFGaQnGeDgGqzGb7mDNCMrMff+1PTjY/oKqPcwBEQl2e+aSYw/WKwJBnicO2G55kFDwfLZivL8Ye+Q1biPrJz6jUoJNVOM6jPCBQXB/1rtZiNIXcFi0oEmTs+rXPE1pijmYKWAac7+U+O00ZOHhKq+RvnpL7Hjim/stmcaDvuS2nMz6Yg8Zf0vhgtDz8OYLUWCSMMAomV8er77ODjjlRl8caLpkv6nO/kUoYoQKXztM+vQDcYujpwIJ95IoLQGrZ8niKRn3+NbfCmeSSPV3NczkBOkdZqa++NLFPV7WENQTNvlMwl8nhHbC7OIrkIitozEye0a7UevgQq4GcBYIRP4x0nMr58zoe0TqaCXL+jsfoeZitanO8y3tDCLGCLwhuuB1K4hMgy623pJCejc2UfB9XYPJqNgqm+GFFsPA1fuuypqQ7TTS/CUcT2iYxa/ksAvA0LhyYkHTll/vZoot06nt+JVnHShH3VJknmeiNku1ZBhq8gcZ3TcIuaNWEtK90P2Ah+CLIBA/k1oNlG289CeH+R5FyflWgV8XTiBDCcVC/zkiENYIW0ajAqvkBWuUvfgV+YEtmwPTVtE8oJu7IDDR5YN15OE4KWL0pnub2qOG/NAXcYxbHmS1sza6la4N+K17WInU/H7ol9INu7bH6WVZD097WHdjbi8UPHsbM88Jr9pmMPKPNlsDZD+ih154RWSLTVcjZA0jSzChqiNm0bW+0EszFDarF4tGauJtDqnRr+0t3QwC56VcRJzrCpJwkcp1NvIKHY11KRJ+mvA0x23KQijA2BPOICPYJ23z7CZLyoIkc51eXgjMVJbg3T1wrXtCMuhkwlcQ1rO8KVg3ajLk4dsyF27LaVjQFkxbHYIxhQXmRGgsMo2cO7bUuwLyYMEDKEQJgsDGj4KQIxLV+MVH5U9+ttKfBDuYc1ZKc1pVcnEWZ5vWRFHlCFfnD9Au0EIgfEu0hzx0e1JpXY73iOyahpo/yKj+FbKzVBPq99RLokDrlcOvBnG492+464GDCbQvdJQtbiYHU8bSHXLyMU38qh1IBlu0ecIKnfL426oKtyZ5TkAPaj5mELf15dRg8V5t2XL4UnjHzUryz1d3KfHcrO14AmP3Ne6YKUAXOx9H3f2xm6N9mEPvC2R9wGgvuTabZ4V9HcTR6EtjXDHzW/ZjrU0JgA5j1t8+6I4DX8mWqC1vQxUMLex5xnJm2vIcxBBf7QceJTTsKq4V0T0a6Mxc9rR9WnS9Yfma4c2Zg0voJqJ4AmkJI9IqWx5Z+WV8Ddfo0ybRM+zuOtBpWwN20Ipn/IEl+FgMp2vb9bJ60umzK6rx/KyfkcK1eT3UdS7ujlOUXSvSol5ctj8E+WEds7KSxZ6jaW33SitKUuhUOFCnE9/Uzg9DSyeSG6p3/TtymeYTUgzGFtHCRtEhQdqlmuLORmEi1WB7lDop+UaiVeZ8cdL8BUtzIrMhCYY+zbsexxUtYY0xUxRIVVGuvry/rZjwfJtIbHhsC0XvhX9ycR/kViYZYkfS240arLfwjxMtBGfpbKcY64hZOQnTA2jFIGZDWrF1frAZV94IYacIb5rIkwwp6+P3fP3kNQ5wMNXtiaJ7PiyWZUHijkNzaT2hkydrJ8cfO+m8N5OUsJPUIOZ/sa7Zx/HmHOGc6CWkSU9rJfCDLxXCTMGL9ubU6RX7Zr++sjXIFGWkVrflysVVdQ8n9ifEyFDeX/r8YoKj2S2T32/jACXwySEsd/rEoYgJcOnHo/NuLnk1LZxt6S9D8GUqy342fzhXaPL7+Xy53/j03+7YlooLsZH+oTtid0ijLlRtSFwQtlJa9uusHfP+GnBrJplJyunwnLTtQ+QC8BgXXB+p5cTiJ3BfYUco/yH+aFcRtQZ0IXRk0z0BN7A1R5fWcnBvgbjJJBNN2RB5MWqtRTctGPJeHPylI4j2Pa2K0qm5pGrFFWof8LcmsQGTtnGm5AUrGBCaVk0WxgZMY1Gqqls3UoeAy3+NWdXHJPz70I9vHvB+CiUhAzGs+B/9YPRrTpS9lMOioHRrRgM7k+WDOFhKs2ZPaxlWk7LqGpf8yISw0U0uYyXYFCJcLIeVYz5yKYGejVaKQEUQOvsxJf7E/SVHcG+o60pe0e0ONCub8ttIw17Cehy96JUO50bD62BkgtepSAg101mFMTo5EfvxSZ5mcJk1dQKRxR5pkHNlmUuPHdrBm/t1HgN/HQ37aNRYrZGWGRgUVMBgZoCHu6ZQ/NLtoFs75pxa8TDZ2N1KVngWCsUI0WT+ouyhRSixloz11fihaHRIaTS5VukEVcXosOzdhlka7YmhWxS0f0y7LfW1ugBxecKuSrBzsFa7hVM/iEYldMSR7ozzhhLGHRnVOc8yECM3CvEgE3qcS86jJA4+tjCW2CViftkQbVQ9xUJZeALqNF6bkFqknmwbiCVGkpNYjon4I46XPUl+7Fm8YLy2+VHTn2uMFhE9vGfqfgIS5PAyMttOB1iFxgljxRpQfI2jqwzEscF0v8IPVnZMrk6Otcrwq0kW27aR2NIElOBq/7Na5WlvFniNITn45BTSCNWm8ijx1VQR/cpRz0TlPwChXj1x6rACGII6hVWcd4MBWL/oOIGW/Yfj6CFuAU7hQrAH/Wk+YF6920XeFTTtzusQnqS/Ha4bE5tLZsPW0Bv53oFohSbBZexHufmkIO4wzfgEsH//T6X8vdCx70gDV5leqt+Wrpbkh6fo8IJptuGjnuH0oPUcTt5e/77Yn/PsPsjqjC7RQhSsDugi4GIbbEN7SdBbS69zg7NeN5lI53gZfN+mjcXCQzhC9J2DmYWmqhJ8XblMbAvcrARtQWBKZuOLSzgRkAToONyWndfTy/n/QpBJPJmF2KkUAncc9t4e8I5zdzClXBKQb6O1AIuDTs/M7mX/MdB2tHEqenLoOD+V9sTdT86Uub0BasAh0R5hvi2Iorm7llfPjy3aGbbogeN4J052oZx1aBTWTbUgX7vi2v6+ijQIMd4WnxYcIgebIZAZIHzjf+e28h3TXHyQIj4ExFH73KtUmbeEBmfmby8mGavm4SmmcMrVtlQflXYa1cpzm4ou9N31ARgxXMBNLbdmeWNSZ7Cjww8SX3ranoZGKofMJ/GUNEW4m/zyDyb9d7QPRIKYc56dWffu/7VhmlqAWrTJPNoi+vJSWe957pRibDGVaxcsHm36AVEffhabj3BsIkFnRGBozsQX+15QkpOqGy/gONQNdzQR7gdHDfo7XqhrbgvTwgNhXNITA39pWovQ+3izHtqSwQp6qKHa79WfPPVTYyZ0C97yUvOsRBWd9upeF6lIycXQYZyqx6YGB36HiyOZi2DNDGN457CZU+41UsLsbrliLrK5jVf8TiGjC/JcYZ6OZ8R2cASh1yK+746LUdQdQt2oRUZBuL5b5aMAuSyFM7AyTR/pL8vUYjGRAsO3jp1HLldgJPK8Sd8BzbbAza9FpPtvZfWXmgRhSqD6cH7hsG6p9579iOtJWNBNDJXnM8KZOICYFYvaiqSy+yFb55Xz4OBO+c9n1+Kru7DVpldr7D+3PZgrvwiVxy3pDC63pIzGkEkCyUNOVB2/a/3cjYgnBOI2rcMqnW4QOkvEjtG0LCQ99R5UJgxAovxs3mJvWI4MTPGVmOKC78jMaltZFSVOQJClEMbxsJ0ZiCBu3LlwKo+eYXfQ541G0+zBD6vGw8TVTwdx/Pv1UvGPOwJyoDJ4wwDxcxUvJgGTEOXS/Uf/VXJYcxPXi5K9bHGCXQx555XTkz63DxHXndKVDifbvW8uVOMLwr0RH36QeAXJmaeOIhUY80lDuvwHH5KSakMoknHbAqbzQRgYovZflW80b2FL1deHFmagseXjj7dQPwVlM6g+JbIH06PoRV/KLnzoTGx/XayzXOntWuNf6M+H8rDJwSTC8B+zGEe0PHPEWi7JmFTXpX5zE7wn3v5kHl9dq9yKof5IUUxOrQgErFxiZjDIptmjfaCiZ6j7gaNdfCLQvOOna4/Z65Nw9M1Uk+/BjrygmO2fansroWxBwCzGmQYHIaMko8+NYesi5Xr8zCptzh00NbPqclbr8Ifc20Uyr2oOcuNL//8mgrDUhw8YdGscmONcc7SgA52V5hh5M8cftXGgYUtyZCa7tmU3bCvBiQXhUA1c3pld8g1Isjncr6BvikWEDwZF5dGSNfnZcvcI/2hwEWhUbq12T3+a8fs9XWPHRHbJ3SCbJF6nGAMmyeDmOqKs41lmQdWwLcGhNicyhgfJrP+wHgnyUavSItqMXfAj/0b/jut1wzgcuxivQzARFCmbODeMCTljqSRIuAHEpC+OPXkz/eZFVRxq4+sIx5CnuDPnu+FAFBAJLlfy+B3gpDGSuHhJzxAVbBQASI6eAAkn0cjokCpBNEEhtOWihPzE37rlSBkFpA6W4/gyhqOQmS8AcyFkrK4DZERHy72p7p0pthswVZpebykXA6fqHw9qJtNzFS3A65Z+Fn4qIqZvxBKIfQDz3GnwnUs2uxZUubU5Dzx5vYVmXvs0WSbFD99m/iYyHWfgVi+SPxjoRW/wx6WEF966pDTwH1IAQhIpQcMO5SfdY51suPqlhquRTIyWnut+laWzca9A1rfj1ODW08jjvRk5zclGNhC6dIOU/2YRr52QIV6uDla4Fhk6P0cspyt4RKJPeazjhQ6iYw3QSgoPrxpcuGhwVKQfm4G3F0LHmuSNxJeMlP5KBACT6z/yyxpLONblrmLX7eoLEpuvuW2Oh2i3ap9NZm29p6f9iS24z91DKqbJoq7kI6D0QWQNPo+V2XvrcJ2LUbHiAysLzxcOoAELuDYqzkhEFTcC00vYHYbx22uHQ6BDmdHWD+pQxLsZI6cbRkKlrGanKXDJ4SzyWgIB6k729GDp7XA91FpBRQ8DVXeGIkzLHnSkYSHD9p5pwtBl9u2xxxmTVfriCDlmfeAKISOVNCWvI5GIaIWc2K2cokE/1ybo/ZCzCl4U7cuKS7mvFaDzcYhTfLfeOpS7DE/ikpG9at1Dx3XVlUKguskbKNYeiqvYctwxQwbzhcfZkDX3cFoZoYlZIT/QeRf+aUDCxDFdf9+ToFntaakEVsg3JJw4iplscbOyzxL9TErqGuEKDKYF6o0dIpco06a49C9ICOQUGxoMnhYHLfi8bo6g8egxWERk8Y/up9F2pnVdz3++jFAb9ODuWvbdOMepygUyIk8Cg6/AV2eBHR1gCvAd+x+b8mSqvnV9UqtQdzsDj5hZNzTERgSfEf9ZBBfwgRChD1Q+f2G0l4ZpYqoeOJVbH2BRubZN0peLfkv0FpydayYg/fxdafPq1DIprP3nDrn9BkPFRGZpmCmpJAF8SoPl+fX/w0a0FySW2ygWxrNwdR5EMNSFBAp/nLMaDZSQ9LxsskgiypkMpLvDt9VrzJs/hdSKv+JDHPuuUf17BWFwGTNg4OImamKEVYWbGXhAmf1NCnsCN41nuUrhYrKpucVerzYUBqwaAj83+W90UNh5jmz5EeZdkMYRE83ij1ClWzQVtwp08wGjX/MqZTVmF0gaJqoRa0BeBtBJGifEUnxfyN1RroM9g0Y7T7CNETwPkBCyMB/jQsFu2OaEzhToBg/0rIOScmuhRD4JSjsbgs5ynZm5ci1JUsbqq8HcBxO0HfnjxZ6wPQlT9hkfH6Ymva1n/XOhArB4l7GItVzvLg1ZImgTf8Nq0sn/nKEARVhSwkgwd791oZ/F9SBGbhU8+wk+x7OeZGIh3LJPVmGzbAPcfcK9WznajPvroiXT5l4MaqOd451yCOthi4BgBVadd8Bq9tNXhQ8AflUWHOUOm3EL90V/ARPFWu96Y325Dw8VwLh0751C5anEYmI7toxBwl0AmAaL9cHFFgLzVr93+8giYfgmcTywXw4tjZJAnIZmlhtBfikAyN9olQpFP7XFAY0KtYOHAeXX+hZPDdGixhaj/0LEHFIs3dNAUFLt+iup+iiDooquvX2ZKOU66j621MQhvML9qNo1EwtmzLyTG3UnSY0YHuifvbqdH+JE9OJAdFA4p7LhTPU3eB1QpXdNx3F/1Epx3EiC+o/uv0aTDj/zmppkPhcok7sxEn2cXkdkaauokaxz57ewlC5ErqzL0KhM5xYcsSM/u4Mi5/9errCGJfqoB9F4NVE12yj21mXv+kqYuakLcn2IE435bDkyf+20ChP3xTyIo5WP1elNQF+AsvZeqvNvthSGhiQfOxwMX1eklBCS0fSsfW77xT67D3G84cpu1tTZegdVEcpoy2fk97NbhNK+HIYH7Lp+qHyBXkdu0cRr6/lZScyUKnKmasdWGOXVgvRUNFOYzKebjyunfFKUJUmzZe9cKFOeZsrimtMzjD9DwAfZlWvP81onaxp9KBtAz4GLOayVxsunKhTQ1I5l3WOPSXPC6PLch/lvPEspFFyEck2FZSjtf1q61get5Iqlr8iNfaerYd0HIWFUTXxT+wnfcetSWnPl305yT6mebfUlCbDd0qH4bOUrzeLY7uH1271UexWAmweoRe6SQCfKdIPU1ufrhfohkIZ6YK0LR6PcJx0oXvtBHC6IiLEmW0c00qbvgRRr6esEUSt07playEseUbdyFSCxGdWdQBTQIvNT0hmUlw93+UwOqT9uMAe7cAkWtXJJVU4egAAdQxmf8BAFCwcLGxxGf7AgAAAAAEWVo=|base64 -d|unxz>e.svg;echo \<img src=e.svg height=$1\>>e.htm;firefox e.htm

3
それは、出力をハードコーディングするという標準的な抜け穴に陥らないでしょうか?
user80551

4
これは間違いなく「標準の抜け穴」カテゴリに該当します。
イグリブー

2
@Igglyboo:どうして?
Ry-

18
これは、コードゴルフの挑戦に対する非常に長い答えです。:
AL

2
@Igglyboo同意しない。.svgはベクトルベースであるため、無限にスケーリングできます- $1入力パラメーターによるものです。
デジタル外傷

9

HTML5、395

==>オンラインで試す

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

コードはJSCrushを使用して圧縮されます。

非圧縮コードは次のとおりです。

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

これはクラッシュを適用する前にソースをゴルフすることで378に減らすことができます:jsfiddle.net/_nderscore/EUBG8
nderscore

これはJavaScriptであり、HTMLではありません。私は人々がそれがどのように機能するか理解していないことにうんざりしています。
カメ

1
ええ、<canvas>タグはJavaScript なので... HTML5はHTML / CSS / JSを記述しないためによく使用されます。人々がそれを理解していないということではなく、プログラマーはしばしば怠け者です(少なくとも私は)。あなたのコメントは少し厳しいようです。
マイケルM.

@Mig HTML + CSS + JSはDHTMLと呼ばれていましたか?
kinokijuf 14年

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 l
o 6 175.22 184.74アーク
-7.08 -.5 l
-7.5 -1.5リットル
o 6 194.48 309.67アーク
o 5 320 197.46 arcn
1.87 -1.5リットル
2.29 -.5 l
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し、ドキュメントビューアーで表示します。

以下は、1インチあたり90ピクセル強にラスタライズされたデフォルトサイズの画像です。

90 ppiのデフォルトサイズ

4xサイズ:

90 ppiで4倍のサイズ

また、オリジナルダウンロードして視聴することもできます。


2
記号のサイズを定義する引数を読み取りますか?
AL

@ n.1ああ、申し訳ありませんが、仕様のその部分は読みませんでした。夕食後に修正します。
AJMansfield

レンダリングされたファイルのスクリーンショットを追加してください。
AL

1
@ n.1画像を追加しました。
AJMansfield 14年

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
どのようにして標準入力に画像を出力できますか?
phuclv

@LưuVĩnhPhúc標準入力に「出力」することはできません。彼は文字の負荷をに送信しているだけですbase64。これはプログラムであり、バイナリトークン(どうやらsvgファイルを表します)に逆コンパイルして、さらに処理を行います。
14年

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、同様に変化255してbackgroundとは、fill呼び出しに-1
KritixiのLithos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.