Zeichne das € -Zeichen


61

Das Ziel besteht darin, ein Bild mit einem Euro-Zeichen gemäß den folgenden Spezifikationen auszugeben oder anzuzeigen (wobei der Rand des Zeichens ignoriert wird).

€ unterschreiben

Quelle: http://en.wikipedia.org/wiki/File:Euro_Construction.svg

Regeln:

  • Das Programm / Skript muss die Höhe des Zeichens in Pixel als Argument verwenden (Leerzeichen um das Zeichen sind optional).
  • Das Zeichen kann nicht als oder von einem Zeichen gezogen wird, direkt (es verboten ist , printdie in dem Bild) oder indirekt (Berechnung 8364dann in einer HTML - Seite angezeigt wird )
  • Die Ausgabe muss nicht in einer Datei gespeichert werden, sondern kann nur als Screenshot angezeigt werden
  • Standard "Schlupflöcher" sind verboten
  • Kürzester Code gewinnt

7
Tricky! Es ist Zeit, meine Geometrie / Trigonometrie zu überprüfen. Ich sehe einige Koordinaten, die sich nur schwer ableiten lassen.
Michael M.

5
Ich musste "fakultativ" nachschlagen
Digitales Trauma

2
Ich hoffe wirklich auf eine Antwort von LaTeX + TikZ :)
Cole Johnson

12
Ohne den Euro würde dieses Problem nicht existieren und damit die Wahrheit von "Mo money mo problems" erneut demonstrieren
Thomas Johnson

1
Ich weiß nicht, was typografisch verwendbar ist, und ich bin kein Typograf. Wenn Sie ein perfektes € -Zeichen möchten, verwenden Sie einfach das € -Zeichen. Aber das ist nicht das Ziel dieser Frage. Ich habe keine pixelgenauen Bilder erwartet. Fühlen Sie sich frei, eine weitere Frage mit anderen Regeln hinzuzufügen, wenn Ihnen diese nicht gefällt.
AL

Antworten:


22

PostScript / GhostScript, 100

(96 für das Programm, 4 für das Befehlszeilenoptionspräfix)

Vollständig golfen und handveredelt:

$ 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

Sie können eine Kopie bekommen hier , für die eigene Betrachtung.

Nachdem ich die Antwort von @ ThomasW gesehen und mein Programm sorgfältig geprüft hatte, wurde mir klar, dass ich es noch besser machen konnte.

Die tokenisierte Version ist äquivalent zu:

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

Eine Erklärung der Optimierungen:

Zunächst habe ich meine erste Lösung in eine Vereinigung von einfacheren Unterpfaden umgewandelt, anstatt dass ein Pfad das Ganze umschreibt. Ich habe mir Thomas 'Methode geliehen, einen Parameter einzugeben, der viel besser ist als der, den ich hatte.

Dann multiplizierte ich alle Koordinaten mit 10 und rundete alles ab, um nur ganzzahlige Koordinaten zu erhalten. Ich habe auch die Winkel abgerundet und die beiden großen in äquivalente negative Winkel umgewandelt. Dies führt dazu, dass praktisch jede einzelne Zahl zwischen -128 und 127 liegt.

Und dann habe ich alles symbolisiert . Jeder Operator kann mit jeweils einer Zwei-Byte-Sequenz dargestellt werden. Und weil jede Zahl durch ein einzelnes vorzeichenbehaftetes Byte dargestellt werden kann, werden auch nur zwei Bytes. Das einzige Teil, mit dem ich das nicht machen konnte, war das ham Anfang, aber es sind auch nur zwei Bytes, nur das hund ein Leerzeichen danach.

Führen Sie es aus als:

gs -dh=200 euro.ps

200 pt hoch

gs -dh=80 euro.ps

80 pt hoch

gs -dh=20 euro.ps

20 pt hoch


Neu: Noch kürzere Versionen!

Durch die Verwendung verschlüsselter Benutzerpfade ist es mir gelungen, die Programmgröße um einige Bytes zu reduzieren. Jedes dieser Programme entspricht dem ersten und erzeugt eine identische Ausgabe:

92 Bytes:

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

Welches ist gleichbedeutend mit:

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

Und eine leicht eingängige, verwirrende Lösung spart nur noch 91 Zeichen:

$ 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

Welches ist gleichbedeutend mit:

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
Gute Arbeit! Ich denke, ich muss alles über binäre Token lernen .
Thomas W.

@ThomasW. Obwohl ich noch nicht ganz fertig bin; Ich lese immer noch die Dokumentation der codierten
Pfadzeichenfolgen

Sie brauchen den Platz danach nicht mehr, hda binäre Token selbstbegrenzend sind. Übrigens, wie hast du es codiert? Ich habe es mit einem Standard-Hex-Editor gemacht, was mühsam ist.
Thomas W.

2
@ n.1 Token-Dateien funktionieren genauso wie normale PostScript-Dateien, und Sie können sogar Binärtoken und Standard-PostScript-Text in derselben Datei mischen. Jedes binäre Token entspricht direkt einem Operator oder einem anderen Objekt, sodass Sie Operationen problemlos ersetzen oder einfügen oder sogar Ausschnitte in ein anderes Programm kopieren können. Die genauen Details zum Token-Formular finden Sie im PostScript-Referenzhandbuch (das rote Buch) in Abschnitt 3.12. Codierte Benutzerpfade werden in 4.6.2 beschrieben.
AJMansfield

1
@ n.1 Aus diesem Grund habe ich die Datei mit einem Hex-Editor geschrieben. Die Token-Delimiter-Bytes entsprechen normalerweise Steuerzeichen in ISO-Latin-1 und anderen Codierungen mit fester Breite. Wenn der Editor sie jedoch in UTF-8 oder einer anderen Codierung mit variabler Breite interpretiert, erhalten Sie ähnliche Informationen andere Datei, die Binärdaten enthält.
AJMansfield

50

Mathematica, 193 183 177 173 169 166 Bytes

Ja, Mathe! Ich zeichne die Region, die eine bestimmte (ziemlich komplizierte) Menge von Ungleichungen befriedigt:

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

Verwendung ist e[height]zB e[100]:

Bildbeschreibung hier eingeben

Oder e[200]:

Bildbeschreibung hier eingeben

Möglicherweise stellen Sie fest, dass die schärferen Kanten leicht abgerundet sind. Dies liegt daran, dass der Bereich nur durch Abtasten der Punkte im Raum dargestellt werden kann und Mathematica standardmäßig nicht jedes Pixel abtastet. Die Abtastauflösung kann erhöht werden, indem eine weitere Option hinzugefügt wird PlotPoints->#(bei der ein Abtastwert pro Pixel verwendet wird), bei der 14 Zeichen hinzugefügt werden . Ich empfehle nicht, es mit dieser Option auszuführen, da dies die Laufzeit erheblich verlängert und die visuelle Attraktivität darüber hinaus kaum erhöht #/4. Daher ist es (nach Genehmigung des OP) nicht in der Punktzahl enthalten.

Hier ist eine leicht ungolfederte Version:

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

Beachten Sie, dass ich in der Golf-Version das Koordinatensystem um den Faktor 2 skaliert habe, um das .5s zu vermeiden. Es stellt sich jedoch heraus, dass die Zeichenanzahl tatsächlich identisch ist.

Hier ist eine Erklärung, wie ich die Formel ausgearbeitet habe. Ich habe die Form in zwei Regionen unterteilt. Eine enthält den Ring und die Streifen und nach rechts mit der abgeschnittenen BCDESteigung und nach links mit der IJund GHNeigungen (dazu später mehr). Der andere enthält den gleichen Ring, wird aber einfach an der x- Koordinate des Punktes abgeschnitten D. Die Bedingungen für die beiden Regionen werden mit ||denen kombiniert , die hier als feste Einheit fungieren.

Der Ring ist definiert als 5 < r < 6, wo rist der Abstand vom Ursprung. ist allerdings einfacher zu trainieren ( x²+y²), also benutze ich 25 < x² + y² < 36, um alle Punkte im Ring zu bekommen.

Die Streifen sind zwischen ±.5und ±1.5. Wir können beide Streifen gleichzeitig behandeln, indem wir den Modul von y nehmen , so dass die Streifen (von unendlicher Länge) gerade erfüllen .5 < |y| < 1.5. Nochmals, um die Vereinigung der Streifen und des Rings zu nehmen, benutze ich nur ||.

Das Interessante ist wahrscheinlich, wie man an die "Masken" kommt. Der Punkt Dhat eine x- Koordinate von 5 cos 40°, sodass die Maske, die sich um die untere Kante kümmert (nur in Kombination mit dem Ring), gerade ist x < 5 cos 40°. Dies kann über eine gesetzte Schnittmenge erfolgen, die sich &&in Logik umsetzt.

Die anderen Masken sind der wirklich knifflige Teil. Lassen Sie uns zuerst die Steigung von BCDE. Wir können leicht Punkte Cund Dals (0, -6)bzw. konstruieren 5 (cos 40°, sin 40°). Der Vektor, der entlang der Linie zeigt, ist dann gerade D - C = (5 cos 40°, 5 sin 40° + 6). Um die Maske rechts anzuwenden, muss ich nur herausfinden, ob ein Punkt links oder rechts von dieser Linie liegt (nennen wir den Linienvektor p). Ich kann das herausfinden, indem ich den Vektor von Czu meinem interessierenden Punkt nehme und ihn auf einen Vektor senkrecht zu projiziere p. Das Zeichen der Projektion sagt mir, auf welcher Seite sich der Punkt befindet. Das Erhalten des senkrechten Vektors ist in 2D ziemlich einfach: Drehen Sie die Koordinaten und kehren Sie das Vorzeichen von einem von ihnen um. Das ist die Variable din meinem Code:(-5 sin 40° - 6, 5 cos 40°). Der Vektor von Czu einem Punkt von Interesse q = (x, y)ist q - C = (x, y + 6). Die Projektion ist nur das Skalarprodukt (oder Skalarprodukt) zwischen qund d. Die Art und Weise, wie ich dsie gewählt habe, zeigt zufällig nach links, also möchte ich d.(q-C) > 0. Diese Bedingung gilt für die rechte Maske.

Für die linke Maske kann ich grundsätzlich die gleiche Idee verwenden. Die Steigung ist die gleiche und daher auch d. Ich muss nur meinen Punkt von den unteren linken Ecken der Streifen anstatt von versetzen C. Diese haben Koordinaten (-7.5, 0.5)(oberer Streifen) und (-7.5, -1.5)(unterer Streifen). Das würde also zwei unabhängige Regeln für die beiden Streifen erfordern. Beachten Sie jedoch, dass sich alle von der unteren Maske betroffenen Punkte im unteren Streifen befinden und daher ein negatives y haben . Und alle Punkte, die von der oberen Maske betroffen sind, haben ein positives y . So kann ich einfach meine Offset mit dem Schalter Sign[y]das ist 1für positive und -1für negative y. So wird mein Versatzpunkt(-7.5, -0.5 + Sign[y]). Ansonsten funktioniert die Maske genauso wie die rechte Maske. Diesmal muss die Projektion natürlich negativ sein. Naiv wäre das so etwas wie RH-projection > 0 && LH-projection < 0(was ich auch ursprünglich im Code hatte). Wir können dies jedoch verkürzen, da das Multiplizieren einer positiven und einer negativen Zahl eine negative Zahl ergeben muss. Es ist also nur RH * LH < 0(wo RHund LHsind die jeweiligen Projektionen).

Das ist es. Alles zusammen ergibt die folgende logische Struktur:

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

Um klar zu sein, beziehen sich die Koordinaten in meiner Erklärung auf das Konstruktionsdiagramm, das in der Herausforderung angegeben ist. Wie oben erwähnt, multipliziert mein Code tatsächlich alle mit 2- ich habe ihn geändert, um Bytes zu sparen, aber die Anzahl der Bytes ist tatsächlich identisch, und ich konnte nicht die Mühe machen, die Änderung erneut rückgängig zu machen. Auch ganze Zahlen sehen besser aus.


1
Ich bin relativ neu in Mathematica, daher würde ich mich über einige Kommentare zu Ihrem Code freuen!
Thomas W.

2
@ThomasW. Nun, das eigentliche Mathematica-Zeug ist nur ein Aufruf, mit RegionPlotdem einfach alle Punkte im Raum eingefärbt werden, die eine gegebene Bedingung erfüllen. Wenn Sie x^2+y^2<1es also geben, wird ein Einheitskreis gezeichnet. Ich werde allerdings eine Erklärung für die eigentliche Mathematik hinzufügen (später heute Abend).
Martin Ender

1
Wie lang ist der Code ohne abgerundete Kanten? Ich denke, Sie haben den kürzesten Code in diesem Moment, aber ich kann Ihre Antwort mit den abgerundeten Ecken nicht akzeptieren, es wäre unfair zu den anderen Antworten, die keine abgerundeten Ecken haben. Bitte befolgen Sie genau die Spezifikationen. Danke
AL

@ n.1 Wenn Sie die PostScript-Antwort von Thomas W. nicht disqualifizieren, weil sie binär oder zu aggressiv gerundet ist, ist die Antwort definitiv kürzer. Die Auflösung zu korrigieren dauert jedoch 14 Zeichen, so dass meine Antwort immer noch die kürzeste nach seiner ist. Ich werde bearbeiten.
Martin Ender

1
@ThomasW. los gehts
Martin Ender

29

BBC BASIC, 202

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

Laden Sie den Emulator unter http://www.bbcbasic.co.uk/bbcwin/bbcwin.html herunter

In BBC Basic werden alle Grafiken auf niedriger Ebene mithilfe maschinenspezifischer ASCII-Steuerzeichen verarbeitet (der Einfachheit halber sind jedoch auch einige Befehle auf hoher Ebene für die allgemeinen verfügbar.) Hier werden 22 (Anzeigemodus ändern) 29 (Ändern) verwendet origin) und 25, entsprechend der PLOT-Anweisung, die einen zusätzlichen Aktionsparameter (Linie, Kreis, Dreieck usw. im Hintergrund / Vordergrund mit relativer / absoluter Bewegung zeichnen) vor den X- und Y-Parametern enthält.

Ich muss also nur eine Menge Zeichen an den VDU-Controller senden. mit Semikolon abgeschlossene Werte sind 16 Bit. andere sind 8 bit. Die Gesamtzahl der an den VDU-Controller gesendeten Bytes beträgt 91 , obwohl dies an sich keine Antwort darstellen würde, da die Größe zu diesem Zeitpunkt fest codiert ist.

Der offensichtliche Ort für den Ursprung ist der Mittelpunkt des Kreises, aber es sind tatsächlich mehr Befehle bei der Herstellung der Stäbe beteiligt. Also habe ich den Ursprung um 1,5 nach unten in den unteren Balken verschoben, was die Anzahl der erforderlichen Brüche und negativen Zahlen verringert. Es bleibt auf der vertikalen Linie mit dem Mittelpunkt des Kreises, was wichtig ist, da die Linie E von dieser vertikalen Linie ausgeht.

Eigentlich musste ich nur 3 Zahlen aus der Zeichnung berechnen: die obere innere Ecke der C-Form (5 cos 40, 5 sin 40 + 1,5) = (3,8302,3,1394 + 1,5) = ca. (12 / 3,1, 4,6) und der Gradient der Linie E: x / y = 3,8302 / (6 + 3,1394) = 0,4157 = ungefähr 1 / 2,4

Da ich nur die kostenlose Testversion (interpretiert) habe, nehme ich die Symbolhöhe als Benutzereingabe. Wenn Sie die Vollversion (29.99GBP) kaufen, können Sie die Kommandozeile mit kompilieren und dann lesen w=VAL(@cmd$)/12.

Ungolfed Code

Im Golf-Code gibt es nur eine VDU-Anweisung, aber im nicht-Golf-Code teile ich sie aus Gründen der Klarheit in mehrere auf. Da es sich bei BBC basic um Little Endian handelt, kann die Kombination p,0,auch zum Golfen verwendet werden 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)

Bildbeschreibung hier eingeben


BBC BASIC. Genial! Das bringt mich fast dreißig Jahre zurück!
Tom Chantler

1
@Dommer BBC Basic wurde 1981 veröffentlicht, mehr als 20 Jahre bevor die ersten Euro-Banknoten gedruckt wurden (2002). Nur so hätten Sie also ein großes Euro-Zeichen auf eine solche Maschine zeichnen können! Alternativ können Sie ASCII - Zeichen neu definieren nzu einem Euro - Symbol mit einem 8x8 - Bitmap, wie folgt aus : VDU 23,n,30,33,120,32,120,30,30,0. Laut Wikipedia befindet sich BBC Basic noch in der Entwicklung, hauptsächlich für mobile Geräte.
Level River St

Tatsächlich! Ich glaube, wir haben unsere 1984 bekommen. Ich erinnere mich, dass ich coole Sprites auf Millimeterpapier gezeichnet und dann ihre binären Darstellungen ausgearbeitet habe, wie ich mir sicher bin, dass Sie es auch getan haben. In diesem Sinne habe ich gerade Ihr Euro-Symbol mit der Hand herausgezogen. Es ist sehr gut, wenn der Tippfehler behoben und der vorletzte Wert von 30 auf 33 geändert wurde. Ich sehe, dass Sie in Ihrem Profil auch LOGO verwendet haben, was mich wieder in meine Grundschultage zurückbringt. Es ist großartig zu lernen, dass BBC Basic noch heute verwendet wird. Wenn es für uns gut genug wäre ...
Tom Chantler

Um dies hinzuzufügen, könnte die BBC Basic 8x8-Bitmap (entsprechend dem größeren Logo) kursiver gestaltet werden, indem sie auf geändert wird VDU 23,n,30,33,124,32,120,33,30,0. Vielen Dank für die Reise in die Vergangenheit.
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>

Während dies nur SVG-Inhalte verwendet, stützt es sich stark auf laxes HTML-Parsing und muss als HTML bereitgestellt werden. Strenges SVG würde viel mehr Bytes erfordern.

Versuch es!


13
(-: ǝɯ oǝɯ ǝuıɟ sɟooʞ
zimperlicher

1
Ja, ich habe in PostScript-Koordinaten gedacht, die umgekehrt sind! Vertauschte jetzt die y-Achse.
Thomas W.

3
Arbeite für mich (Chrome 34) auch ohne das Nachziehen </svg>. Oh, und dieser Preisaufschlag ist schrecklich . Ich hoffe, Sie schämen sich. ;-)
Ilmari Karonen

2
@IlmariKaronen Ich bin beschämt ;-). Normalerweise bevorzuge ich sogar sauberes XHTML gegenüber HTML. Auf jeden Fall sehe ich, wenn ich das Nachgestellte weglasse </svg>, nur den Kreis, nicht die Linien (in einer eigenständigen Datei, die nicht im Markup enthalten ist, könnte JS Bin hinzufügen).
Thomas W.

1
Sie können evt.targetbis thiszu 6 Bytes einsparen.
Zahnbürste

17

CSS, 512 494 Bytes

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

Nicht die kleinste Antwort, aber so klein, wie ich sie bekommen könnte, selbst wenn ich alle meine CSS-Minimierungs-Fu herbeirufe

Vorsichtsmaßnahmen:

Der obige Code mit allen 'px' Abzügen funktioniert in Firefox & IE, aber nicht in Chrome & Safari, die in Bezug auf ihre Einheiten umständlicher sind :)

Ich musste auch die PXs neu hinzufügen, um die Jsfiddle zum Laufen zu bringen:

http://jsfiddle.net/9A3J9/

100: Bildbeschreibung hier eingeben

200: Bildbeschreibung hier eingeben

ungolfed code:

 <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
Beeindruckend! Dieser skewXTrick könnte meine Zustimmung alleine bringen.
manatwork

Genau das habe ich gestern angefangen zu schreiben. falsche Punkte für Sie dann
Einacio

Setzen einer ID für das Div und Verwenden von getElementByIdreduziert 6 Zeichen. und dann können Sie die ID in der CSS verwenden, um 2 weitere zu reduzieren
Einacio

Das pschließende Tag kann auch weggelassen werden, wenn kein Inhalt mehr dahinter steht (gemäß Spezifikation). und ich würde auch überprüfen, ob die Browser die automatische Schließung div(obwohl von der Spezifikation verboten, es funktionierte in der Geige auf FF)
Einacio

@einacio tolle Vorschläge! wir sind auf 494 B. danke :)
caitriona

16

PostScript + Ghostscript 137 + 6 = 143 (binär), 209 + 6 = 215 Byte

Vollgolf-Version mit binären Token:

$ 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

Laden Sie eine handcodierte Binärdatei herunter

ASCII-Version:

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

Speichern als euro.psund mit Ghostscript ausführen wie

gs -dh=80 euro.ps

Euro-Zeichen, 80 Punkte, von Ghostscript gerendert

gs -dh=20 euro.ps

Euro-Zeichen, 20 Punkte, von Ghostscript gerendert

Da es in PostScript kein Pixel gibt, wird diese Höhe stattdessen in Punkten interpretiert. Ich habe +6 für den Schalter in der Befehlszeile berechnet.


1
Meh, wie soll ich die kompilierte Dateigröße übertreffen. : D ... Wie funktionieren diese binären Token? Ist es nicht so, als würde man den Code von Hand kompilieren?
Martin Ender

DCLinie schneidet horizontale Streifen nicht richtig. Senkrecht nach unten von Dschneidet nicht "Kreis" -Form an der richtigen Stelle, niedriger :(. Sieht so aus, als ob dies auch bei Ihrer SVG-Antwort der
Fall ist

+ Die linken Ränder der horizontalen Streifen sind nicht ausgerichtet.
user2846289

@ m.buettner Die wichtigsten PostScript-Namen können mit einer Zwei-Byte-Sequenz ausgedrückt werden. Dies ist nicht wirklich so, als würden Sie ein C- oder Java-Programm kompilieren. Es durchläuft den gleichen Parsing-Prozess wie jedes PostScript-Programm. Wenn Sie sich den Hexdump ansehen oder die Binärdatei in einem Texteditor öffnen, können Sie feststellen, dass er fast der ASCII-Version entspricht, die meisten Namen jedoch durch eine Zwei-Byte-Sequenz ersetzt wurden.
Thomas W.

@VadimR Du hast ein scharfes Auge! Ich glaube, ich habe zu viel Präzision gegen Kürze eingetauscht (zu aggressiv gerundet). Möglicherweise muss ich einige Ziffern hinzufügen.
Thomas W.

13

Python - Schildkröte - 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 % 100und python % 500jeweils:


3
Sie können viele Zeichen sparen, indem Sie einige der von Ihnen definierten Verknüpfungen entfernen. Du verwendest es nur ceinmal, also wäre es tatsächlich kürzer, es einfach als aufzurufen math.cos, und ich denke, es gibt wahrscheinlich andere, die du nicht abkürzen könntest, um die Gesamtlänge zu kürzen.
AJMansfield

1
Sie können sechs Zeichen abschneiden, from math import *indem Sie die math.Präfixe verwenden und dann löschen.
Alexwlchan

3
Sie definieren u=t.circle, aber ein paar Zeilen später haben Sie vergessen, einen t.circle(...)Anruf auszutauschen.
Alconja

2
Schildkröte, zum des Euro zu zeichnen. Was für eine Zeit, um am Leben zu sein.
Nit

13

PHP, 432 435 367 356 334 Bytes

(Edit: Anscheinend sollen IJ und GH parallel zu BCDE sein. Jetzt behoben)

Dieses Skript gibt ein SVG-Bild aus, dient jedoch als text/html standardmäßig bereitgestellt. Ich denke, die meisten Browser werden dies als HTML-Webseite behandeln, die ein eingebettetes SVG-Bild enthält. Es scheint auf jeden Fall für mich in Ordnung zu funktionieren.

Die Höhe des Bildes wird als Abfragezeichenfolgenparameter übergeben. (Hinweis: Die Byteanzahl enthält ein Zeilenumbruchzeichen am Ende von Zeile 3, damit dies ordnungsgemäß funktioniert.)

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

Aktualisierte Version ( 367 356 334 Bytes):

preg_replace_callback()ist eine viel effizientere Methode zum Skalieren der numerischen Werte. Dieser Code erzeugt die gleiche Ausgabe wie die Originalversion. (Edit: Weitere Kürzungen dank 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>');

Ausgabe:

euro.php? x = 60

Bildbeschreibung hier eingeben

euro.php? x = 200

Bildbeschreibung hier eingeben


widthund heightsind hier unnötig. Und Sie müssen das angeben, xmlnsdamit es in den meisten Browsern gerendert wird (getestet von Firefox und Chrome; auch wenn der richtige MIME-Typ von SVG gesendet wird, wird es von beiden als XML gerendert, nicht als SVG). ideone.com/JkqVL0 (entfernen Sie den fest codierten x-Wert für eine 369-Byte-Lösung)
Tim S.

@TimS. Nein, es funktioniert nicht richtig, wenn Sie den PHP-Code auf ideone ausführen und die Ergebnisse in eine SVG-Datei kopieren. Wenn Sie das Skript jedoch tatsächlich auf einem Webserver veröffentlichen, stellt PHP die Ergebnisse (standardmäßig) mit einem MIME-Typ von bereit text/html. Chrome und Firefox haben damit keine Probleme, obwohl ich gerade herausgefunden habe, dass Safari etwas wählerischer ist.
zimperlich ossifrage

Ah! Ich sehe jetzt den Trick: text/htmlmit <svg>...wird als HTML-Datei mit einem svgElement interpretiert , das das nicht braucht xmlns, aber braucht widthund height. Ich dachte an eine SVG-Datei, die das richtige braucht xmlns. Ihr Code ist in Ordnung.
Tim S.

Wenn Sie im zweiten Code 24 anstelle von 12 verwenden, würden Sie dann nicht 1 Byte für jeden x.5-Wert reduzieren?
Einacio

@Einacio Ja! :-) Leider erhalte ich auch bei jedem Auftreten von "5", "6", "7" und "8" ein Byte. Die resultierende Länge ist exakt gleich.
Squeamish Ossifrage

9

sh, 8604

Ich denke, jemand kann es wahrscheinlich besser machen, aber lassen Sie uns damit beginnen.

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

3
Würde das nicht unter die übliche Lücke der Hardcodierung der Ausgabe fallen?
user80551

4
Dies fällt definitiv unter die Kategorie "Standardlücken".
Igglyboo

2
@ Igglyboo: Wie so?
Ry

18
Dies ist eine sehr lange Antwort auf eine Code-Golf-Herausforderung. :-)
AL

2
@ Igglyboo Stimme nicht zu. .svg ist vektorbasiert und kann daher unendlich skaliert werden - und zwar über den $1Eingabeparameter.
Digitales Trauma

9

HTML5, 395

==> Online ausprobieren

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

Der Code wird mit JSCrush komprimiert .

Hier ist der unkomprimierte Code:

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

Dies kann durch Golfen der Quelle vor dem Anwenden von Crush auf 378 reduziert werden: jsfiddle.net/_nderscore/EUBG8
nderscore

Dies ist JavaScript, nicht HTML. Ich habe es satt, dass die Leute nicht verstehen, wie das funktioniert.
Tortoise

1
Ja, weil das <canvas>Tag JavaScript ist ... HTML5 wird oft verwendet, um kein HTML / CSS / JS zu schreiben. Nicht, dass die Leute es nicht verstehen, Programmierer sind einfach oft faul (zumindest bin ich das). Ihr Kommentar scheint etwas hart zu sein.
Michael M.

@Mig Ich dachte, HTML + CSS + JS hieß DHTML?
Kinokijuf

6

PostScript, 270

7 7 übersetzen
/ l {lineto} def
/ o {0 0} def
o 6 44,85 165,52 Bogen
-7,08 1,5 l
-7,5,5 l
o 6 175,22 184,74 Bogen
-7.08 -.5 l
-7,5 -1,5 l
o 6 194,48 309,67 Bogen
o 5 320 197,46 arcn
1,87 - 1,5 l
2,29 -,5 l
5 185,74 174,26 arcn
2,7,5 l
3,12 1,5 l
5 162,54 40 arcn
nahe beieinander füllen

Dies definiert lediglich den Umriss, indem Pfadelemente an Koordinaten angehängt werden, die ich mit Hilfe von GeoGebra berechnet habe. Anschließend wird der Umriss ausgefüllt.

Ich habe ein paar Zeichen gespart, indem ich Abkürzungen für lineto( /l{lineto}def) und den Ursprung des Kreises ( /o{0 0}def) hinzugefügt habe .

Fügen Sie nach der ersten leeren Zeile einen Befehl des Formulars hinzu, um eine andere Größe anzugeben .height width scale

Wenn es alleine ausgeführt wird, wird das Euro-Zeichen in der linken unteren Ecke der Seite mit der Standard-Seitengröße gezeichnet. Speichern Sie anything.pses einfach als und zeigen Sie es mit einem Dokumentbetrachter an.

Hier ist ein Bild davon in der Standardgröße, gerastert auf etwas mehr als 90 Pixel pro Zoll:

Standardgröße bei 90 ppi

Bei 4x Größe:

4x Größe bei 90 ppi

Sie können das Original auch für Ihr eigenes Sehvergnügen herunterladen .


2
Liest es ein Argument, um die Größe des Zeichens zu definieren?
AL

@ n.1 oh, sorry, ich habe diesen Teil der Spezifikation nicht gelesen. Ich werde es nach dem Abendessen reparieren.
AJMansfield

Bitte fügen Sie einen Screenshot der gerenderten Datei hinzu.
AL

1
@ n.1 Ich habe Bilder hinzugefügt.
AJMansfield

5

PHP (ohne SVG), 628 597 Bytes

Vielen Dank an AsksAnyway für die nette Abkürzung für Funktionen (zB$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);

Rufen Sie file.php?h=200von Ihrem Browser aus an, um das Bild zu sehen

Die Koordinaten basieren auf Messungen, die mit GIMP durchgeführt wurden

100 Pixel:

100 € Pixel

200 Pixel:

200 € Pixel

Ebenen Schritt für Schritt hinzugefügt:

# GIF

Ungolfed Code (bei Brüchen hat der Golf Code gerundete Werte)

<?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-Befehlszeilentools, 460 Byte

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

Dies ist die gleiche Technik wie die Antwort von @minitech . Aber die .svg-Daten stammen von hier, was viel kürzer ist: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick konvertiert die Vektordaten in .png-Daten im gewünschten Maßstab und leitet sie an xview weiter.

Ausgabe für ./euro.sh 30:

Bildbeschreibung hier eingeben

Ausgabe für ./euro.sh 300:

Bildbeschreibung hier eingeben


7
Warum ist die große Version nicht gefüllt?
Cole Johnson

2
wie kann man bilder nach stdin ausgeben?
Phuclv

@ LưuVĩnhPhúc Sie können nicht auf die Standardeingabe "ausgeben". Er sendet nur eine Menge Zeichen an base64, ein Programm, das es in binäre Token dekompiliert (die anscheinend eine SVG-Datei darstellen), mit denen er mehr erledigt.
Tomsmeding

2
@tomsmeding Ich glaube, sie waren durch den Fenstertitel "stdin" verwirrt.
7.

@ColeJohnson Ich denke, keine der Versionen ist gefüllt, aber bei der kleinen Version werden die inneren und äußeren Linien nahe genug gerendert, um solide zu wirken. Trotzdem gibt es bei ImageMagick ein merkwürdiges Aliasing, das ich nicht ganz verstehe - aber ich denke, das erzeugte Bild ist nah genug für Code-Golf ;-)
Digitales Trauma

2

POV-Ray (370 Byte)

Ich konnte nicht herausfinden, wie derselbe vertikale Bereich gerendert und gleichzeitig das Seitenverhältnis beibehalten werden soll. Daher habe ich mich für die richtige Höhe entschieden, und es liegt beim Benutzer, nur im 4: 3-Format zu rendern

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

renn mit povray.exe /RENDER euro.pov -w600 -h800

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben


2

Verarbeitung, 232 Bytes

Bei der Verarbeitung können Befehlszeilenargumente nicht wirklich berücksichtigt werden, da sie auf das Zeichnen spezialisiert sind, aber meine Funktion verwendet den Parameter als Höhe, um dies zu kompensieren. Die Koordinaten sind vom obigen Bild aus hartcodiert / angenähert, und die gesamte Zeichenfläche wird basierend auf den Eingabeparametern skaliert, um Zeichnungen mit beliebigen Größen zu erhalten.

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 + gesamtes Programm

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

Ausgabe

Verarbeitung von Euro-Skizze


1
Sie können Golf spielen, indem Sie 1stattdessen OPENauch die 255in backgroundund fillAnrufe für-1
Kritixi Lithos
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.