Dessine le signe €


61

L'objectif est de produire ou d'afficher une image avec un signe € (euro) conformément aux spécifications suivantes (en ignorant la bordure du signe).

Signe €

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

Règles:

  • Le programme / script doit prendre la hauteur du signe en pixels en argument (les espaces vides autour du signe sont facultatifs)
  • Le signe ne peut pas être dessiné en tant que ou à partir d'un caractère, directement (il est interdit de printle dans l'image) ou indirectement (en le calculant 8364puis en l'affichant dans une page HTML)
  • La sortie n'a pas besoin d'être sauvegardée dans un fichier, elle peut être affichée puis affichée comme une capture d'écran
  • Les «meurtrières» standard sont interdites
  • Le code le plus court gagne

7
Rusé ! Il est temps de revoir ma géométrie / trigonométrie. Je vois des coordonnées assez difficiles à déduire.
Michael M.

5
Je devais chercher "facultative"
Digital Trauma

2
J'espère vraiment avoir une réponse à LaTeX + TikZ :)
Cole Johnson

12
Sans l'euro, ce problème n'existerait pas, démontrant ainsi une nouvelle fois la vérité des "problèmes de Mo money mo"
Thomas Johnson

1
Je ne sais pas ce qui est utilisable typographiquement et je ne suis pas un typographe. Si vous voulez un signe € parfait, utilisez simplement le caractère €. Mais ce n'est pas le but de cette question. Je ne m'attendais pas à des images parfaites en pixels. N'hésitez pas à ajouter une autre question avec des règles différentes si vous n'aimez pas celle-ci.
AL

Réponses:


22

PostScript / GhostScript, 100

(96 pour le programme, 4 pour le préfixe du commutateur de ligne de commande)

Totalement golfé et marqué à la main:

$ 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

Vous pouvez en obtenir une copie ici , pour votre propre visualisation.

Après avoir vu la réponse de @ ThomasW et examiné attentivement mon programme, j'ai réalisé que je pouvais le faire encore mieux.

La version tokenisée est équivalente à ceci:

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

Une explication des optimisations:

Tout d'abord, j'ai converti ma première solution en une union de sous-chemins plus simples, plutôt qu'en un seul chemin circonscrivant tout. J'ai emprunté la méthode de Thomas pour entrer un paramètre, ce qui est bien meilleur que ce que j'avais eu.

Ensuite, j'ai multiplié toutes les coordonnées par 10 et tout arrondi pour ne me donner que des coordonnées entières. J'ai également arrondi les angles et converti les deux grands en angles négatifs équivalents. Ainsi, chaque nombre tombe entre -128 et 127.

Et puis j'ai tokenisé tout . Chaque opérateur peut être représenté avec une séquence de deux octets chacun. Et parce que chaque numéro peut être représenté par un seul octet signé, chacun aussi devient seulement deux octets. La seule partie avec laquelle je ne pouvais pas faire cela était le hdébut, mais ce n'est aussi que deux octets, juste le het un espace après.

Exécutez-le comme:

gs -dh=200 euro.ps

200 pt de haut

gs -dh=80 euro.ps

80 pt de haut

gs -dh=20 euro.ps

20 pt de haut


Nouveau: des versions encore plus courtes!

En utilisant des chemins d’utilisateur codés, j’ai réussi à réduire la taille du programme de quelques octets. Chacun de ces programmes est équivalent au premier et produit un résultat identique:

92 octets:

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

Ce qui équivaut à:

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

Et une solution déroutante légèrement contre-intuitive enregistre un caractère supplémentaire, pour seulement 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

Ce qui équivaut à:

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
Bon travail! Je suppose que je vais devoir tout apprendre sur les jetons binaires.
Thomas W.

@ThomasW. Bien que je ne sois pas encore complètement fait; Je suis toujours en train de lire la documentation sur les chaînes de chemins codées ...
AJMansfield

Vous n'avez pas besoin d'espace après hcar les jetons binaires sont auto-délimiteurs. BTW, comment l'avez-vous codé? Je l'ai fait avec un éditeur hexadécimal standard, ce qui est fastidieux.
Thomas W.

2
Les fichiers numérisés @ n.1 fonctionnent exactement de la même manière que les fichiers PostScript normaux. Vous pouvez même mélanger des jetons binaires et du texte PostScript standard en texte brut dans le même fichier. Chaque jeton binaire correspond directement à un opérateur ou à un autre objet. Vous pouvez donc facilement remplacer ou insérer des opérations, voire même copier des extraits dans un autre programme. Les détails exacts sur le formulaire à jeton peuvent être trouvés dans le Manuel de référence du langage PostScript (le livre rouge) à la section 3.12. Les chemins d'utilisateur codés sont décrits au 4.6.2.
AJMansfield

1
@ n.1 J'ai utilisé un éditeur hexadécimal pour écrire le fichier, pour cette raison. Les octets de délimiteur de jeton correspondent normalement aux caractères de contrôle dans ISO-latin-1 et dans un autre encodage à largeur fixe, mais si l’éditeur l’interprète en UTF-8 ou dans un autre encodage à largeur variable, vous obtiendrez ce genre de chose autre fichier contenant des données binaires.
AJMansfield

50

Mathematica, 193 183 177 173 169 166 166 octets

Oui, les maths! Je trace la région qui répond à un certain ensemble (plutôt compliqué) d'inégalités:

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

L'utilisation est e[height], par exemple e[100]:

entrez la description de l'image ici

Ou e[200]:

entrez la description de l'image ici

Vous remarquerez peut-être que les bords les plus nets sont légèrement arrondis. En effet, la région ne peut être tracée qu'en échantillonnant les points de l'espace et Mathematica n'échantillonne pas chaque pixel par défaut. La résolution d'échantillonnage peut être augmentée en ajoutant une autre option PlotPoints->#(qui utilise un échantillon par pixel), qui ajoute 14 caractères . Je ne recommande pas de l'exécuter avec cette option, car cela augmente considérablement le temps d'exécution et augmente à peine l'attrait visuel au #/4- delà . Par conséquent (après l’approbation du PO), il n’est pas inclus dans le score.

Voici une version légèrement non-golfée:

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

Notez que dans la version avec golf, j'ai redimensionné le système de coordonnées par un facteur 2 pour éviter le .5s, mais il s'avère que le nombre de caractères est en réalité identique.

Voici une explication de la façon dont j'ai élaboré la formule. J'ai divisé la forme en deux régions. L'un contient l'anneau et les rayures et est coupé à droite avec la BCDEpente et à gauche avec les pentes IJet GH(plus sur cela plus tard). L'autre contient le même anneau, mais est simplement coupé à la coordonnée x du point D. Les conditions pour les deux régions sont combinées avec ||, qui agit ici comme une union.

L'anneau est juste défini comme 5 < r < 6, où rest la distance de l'origine. est plus facile à résoudre que ( x²+y²), alors j’utilise 25 < x² + y² < 36pour obtenir tous les points du ring.

Les rayures sont entre ±.5et ±1.5. Nous pouvons gérer les deux bandes en même temps, en prenant le module de y , de sorte que les bandes (de longueur infinie) remplissent juste .5 < |y| < 1.5. Encore une fois, pour prendre l'union des rayures et de la bague, je ne fais que l'utiliser ||.

La chose intéressante est probablement comment obtenir les "masques" cependant. Le point Dayant une coordonnée x5 cos 40° , le masque prenant en charge le bord inférieur (combiné à l'anneau uniquement) est juste x < 5 cos 40°. Ceci peut être appliqué via l'intersection de set qui se traduit &&en logique.

Les autres masques sont la partie vraiment délicate. D'abord, prenons la pente de BCDE. Nous pouvons facilement construire des points Cet D, comme (0, -6)et 5 (cos 40°, sin 40°), respectivement. Le vecteur qui pointe le long de la ligne est alors juste D - C = (5 cos 40°, 5 sin 40° + 6). Pour appliquer le masque à droite, il suffit de déterminer si un point se trouve à gauche ou à droite de cette ligne (appelons vector line p). Je peux comprendre cela en prenant le vecteur de Cmon point d’intérêt et en le projetant sur un vecteur perpendiculaire à p. Le signe de la projection me dira de quel côté le point est allumé. Obtenir le vecteur perpendiculaire est assez simple en 2D: retournez les coordonnées et inversez le signe de l’un d’eux. C'est la variable ddans mon code:(-5 sin 40° - 6, 5 cos 40°). Le vecteur de Cà un point d'intérêt q = (x, y)est q - C = (x, y + 6). La projection est simplement le produit scalaire (ou produit scalaire) entre qet d. La façon dont j'ai choisi dça arrive de pointer vers la gauche, alors je le veux d.(q-C) > 0. Cette condition applique le masque de droite.

Pour le masque de gauche, je peux utiliser fondamentalement la même idée. La pente est la même et par conséquent d. J'ai juste besoin de décaler mon point par rapport aux coins inférieurs gauche des rayures au lieu de C. Celles-ci ont des coordonnées (-7.5, 0.5)(bande supérieure) et (-7.5, -1.5)(bande inférieure). Cela nécessiterait donc deux règles indépendantes pour les deux bandes. Cependant, notez que tous les points affectés par le masque inférieur se trouvent dans la bande inférieure et ont donc un y négatif . Et tous les points affectés par le masque supérieur ont un y positif . Donc, je peux simplement changer mon offset en utilisant Sign[y]ce qui est 1positif et -1négatif y. Donc, mon point de compensation devient(-7.5, -0.5 + Sign[y]). Sinon, le masque fonctionne exactement comme le masque de droite. Bien sûr, cette fois, la projection doit être négative. Donc, naïvement, cela ressemblerait à quelque chose comme RH-projection > 0 && LH-projection < 0(ce qui est aussi ce que j’avais au départ dans le code). Mais nous pouvons raccourcir ceci, car multiplier un nombre positif et un nombre négatif doit donner un nombre négatif, donc c'est juste RH * LH < 0(où RHet LHsont les projections respectives).

C'est ça. En réunissant tout cela, on aboutit à la structure logique suivante:

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

Pour être clair, les coordonnées de mon explication se réfèrent au schéma de construction donné dans le défi. Comme mentionné ci-dessus, mon code les multiplie tous par 2- je l'ai modifié pour économiser des octets, mais le nombre d'octets est identique et je ne pouvais pas être dérangé pour annuler le changement. De plus, les entiers sont plus beaux.


1
Mathematica étant relativement nouveau dans mon domaine, je vous serais reconnaissant de commenter votre code!
Thomas W.

2
@ThomasW. Eh bien, le contenu de Mathematica n’est qu’un appel à RegionPlottout ce qui colorie tout point de l’espace satisfaisant une condition donnée. Donc, le fait de x^2+y^2<1tracer un cercle d'unités Je vais cependant ajouter une explication pour le calcul (plus tard ce soir).
Martin Ender

1
Quelle est la longueur du code avec des bords non arrondis? Je pense que vous avez le code le plus court en ce moment, mais je ne peux pas accepter votre réponse avec les coins arrondis, ce serait injuste pour les autres réponses qui n'ont pas de coins arrondis. S'il vous plaît suivez strictement les spécifications. Merci
AL

@ n.1 À moins que vous ne disqualifiiez la réponse PostScript de Thomas W., qu'elle soit binaire ou arrondie de manière trop agressive, sa réponse est nettement plus courte. Cependant, résoudre la résolution prend 14 caractères, ma réponse est donc la plus courte après la sienne. Je vais éditer.
Martin Ender

1
@ThomasW. Voilà!
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;

Téléchargez l'émulateur à l' adresse http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

Dans BBC Basic, tous les graphiques sont gérés au niveau inférieur à l’aide de caractères de contrôle ASCII spécifiques à la machine (mais certaines commandes de niveau supérieur sont également disponibles pour les commandes courantes.) Celles utilisées ici sont 22 (changement du mode d’affichage) 29 (changement origine) et 25, équivalent à l’instruction PLOT, qui prend un paramètre d’action supplémentaire (tracer une ligne, un cercle, un triangle, etc. en arrière-plan / avant-plan avec déplacement relatif / absolu) avant les paramètres X et Y.

Donc, tout ce que j'ai à faire, c'est d'envoyer une charge de caractères au contrôleur VDU. les valeurs terminées en point-virgule sont 16 bits. d'autres sont en 8 bits. Le nombre total d'octets envoyés au contrôleur de l'écran de visualisation est de 91 , bien que cela ne soit pas considéré en soi comme une réponse car à ce stade, la taille est codée en dur.

Le lieu évident pour l'origine est le centre du cercle, mais il y a en réalité plus de commandes impliquées dans la production des barres. J'ai donc décalé l'origine de 1,5 au bas de la barre inférieure, ce qui réduit le nombre de fractions et de nombres négatifs requis. Il reste sur la ligne verticale avec le centre du cercle, ce qui est important car la ligne E part de cette ligne verticale.

En fait, il me suffisait de calculer 3 chiffres du dessin: le coin interne supérieur de la forme en C (5 cos 40, 5 sin 40 + 1,5) = (3,8302,3.1394 + 1,5) = environ (12 / 3,1, 4,6) et la pente de la droite E: x / y = 3,8302 / (6 + 3,1394) = 0,4157 = environ 1 / 2,4

Comme je n'ai que la version d'évaluation gratuite (interprétée), je prends la hauteur du symbole en tant qu'entrée de l'utilisateur. Si vous achetez la version complète (29.99GBP), vous pouvez compiler et lire la ligne de commande avec w=VAL(@cmd$)/12.

Code non-liquéfié

Dans le code golfé, il n’ya qu’une déclaration VDU, mais dans le code non golfé, je la décompose en plusieurs pour plus de clarté. En outre, comme la base de la BBC est peu répandue, la combinaison p,0,peut être utilisée, p;mais je l’ai laissée sans couleur pour plus de clarté.

  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)

entrez la description de l'image ici


BBC BASIC. Impressionnant! Cela me prend presque trente ans en arrière!
Tom Chantler

1
@Dommer BBC Basic a été lancé pour la première fois en 1981, plus de 20 ans avant l’impression des premiers billets en euros (2002). C’est donc la seule façon de dessiner un grand symbole de l’euro sur une telle machine! Sinon , vous pouvez redéfinir le caractère ASCII nà un symbole de l' euro avec un bitmap 8x8, comme ceci: VDU 23,n,30,33,120,32,120,30,30,0. Selon Wikipedia, BBC Basic est toujours en cours de développement, principalement pour les appareils mobiles.
Level River St

En effet! Je pense que nous avons eu la nôtre en 1984. Je me souviens d’avoir dessiné des sprites sympas sur du papier millimétré et d’avoir ensuite travaillé sur leurs représentations binaires, comme je suis sûr que vous l’avez également fait. Sur cette note, je viens de dessiner votre symbole de l'euro à la main. C'est très bien une fois que la faute de frappe est corrigée et que la valeur antépénultime passe de 30 à 33. Je vois dans votre profil que vous avez également utilisé LOGO, qui me ramène de nouveau à mes années d'école primaire. Il est bon d'apprendre que BBC Basic est encore utilisé aujourd'hui. Si cela suffisait pour nous ...
Tom Chantler

Ajoutons simplement que le bitmap BBC Basic 8x8 pourrait être rendu plus "italique" (conformément au logo plus grand) en le remplaçant par VDU 23,n,30,33,124,32,120,33,30,0. Merci pour le voyage dans le passé.
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>

Bien que cela n'utilise que des éléments SVG, il s'appuie fortement sur une analyse HTML laxiste et doit être transmis au format HTML. SVG strict nécessiterait beaucoup plus d'octets.

Essayez le!


13
(-: oʇ ǝuıɟ soo⅂
ossifrage

1
Oui, je pensais en coordonnées PostScript, qui sont l'inverse! Échangé l'axe des y maintenant.
Thomas W.

3
Travailler pour moi (Chrome 34), même sans la fuite </svg>. Oh, et ce balisage est horrible . J'espère que tu as honte de toi. ;-)
Ilmari Karonen

2
@IlmariKaronen Je suis honte ;-). D'habitude, je préfère même le XHTML pur au HTML. Quoi qu'il en soit, si je laisse la fin </svg>, je ne vois que le cercle, pas les lignes (dans un fichier autonome, pas à l'intérieur du balisage que JS Bin pourrait ajouter).
Thomas W.

1
Vous pouvez raccourcir evt.targetà this, économisant 6 octets.
Brosse à dents

17

CSS, 512 494 octets

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

Pas la plus petite réponse, mais la plus petite possible, même en convoquant tous mes fichiers css-minification-fu

Mises en garde:

Le code ci-dessus avec tous les «px» supprimés fonctionne dans Firefox et IE, mais pas dans Chrome & Safari, qui sont plus compliqués à propos de leurs unités :)

J'ai également dû rajouter les px pour que jffiddle fonctionne:

http://jsfiddle.net/9A3J9/

100: entrez la description de l'image ici

200: entrez la description de l'image ici

code non-liquéfié:

 <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
Hou la la! Cette skewXastuce pourrait obtenir mon upvote seul.
Manatwork

c'est exactement ce que j'ai commencé à écrire hier. faux points alors
Einacio

définir un identifiant sur la div et utiliser getElementByIdréduit de 6 caractères. et puis vous pouvez utiliser l'ID dans le CSS pour réduire 2 autres
Einacio

de plus, la pbalise de fermeture peut être omise s'il n'y a plus de contenu après celle-ci (par spéc). et je vérifierais également si les navigateurs autoclosent le div(bien qu'interdit par la spécification, cela a fonctionné dans le violon sur FF)
Einacio

@einacio super suggestions! nous sommes à 494 B. merci :)
caitriona

16

PostScript + Ghostscript 137 + 6 = 143 (binaire), 209 + 6 = 215 octets

Version entièrement golfée avec jetons binaires:

$ 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

Télécharger le fichier binaire codé à la main

Version 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

Enregistrer sous euro.pset exécuter avec Ghostscript comme

gs -dh=80 euro.ps

Symbole de l'euro, 80 points, rendu par Ghostscript

gs -dh=20 euro.ps

Symbole de l'euro, 20 points, rendu par Ghostscript

Comme il n’existe pas de pixel en PostScript, cette hauteur est interprétée en points. J'ai calculé +6 pour le commutateur sur la ligne de commande.


1
Meh, comment suis-je censé battre la taille du fichier compilé. : D ... Comment fonctionnent ces jetons binaires? N’est-ce pas fondamentalement comme compiler le code à la main?
Martin Ender

DCla ligne ne coupe pas correctement les rayures horizontales. En bas perpendiculaire à partir de Dne coupe pas la forme 'cercle' au bon endroit, plus bas :(. On dirait que c'est pareil avec votre réponse SVG, aussi.
user2846289

+ Les bords gauches des bandes horizontales ne sont pas alignés.
user2846289

@ m.buettner Les principaux noms PostScript peuvent être exprimés à l'aide d'une séquence de deux octets. Ce n'est pas vraiment une compilation comme vous compileriez un programme C ou Java. Il passera par le même processus d'analyse que n'importe quel programme PostScript. Si vous regardez le fichier hexadécimal ou ouvrez le fichier binaire dans un éditeur de texte, vous constaterez qu'il est presque identique à la version ASCII, mais que la plupart des noms ont été remplacés par une séquence de deux octets.
Thomas W.

@VadimR Vous avez l'oeil vif! Je suppose que j'ai échangé trop de précision pour des raisons de brièveté (arrondi de manière trop agressive). Je pourrais avoir à ajouter quelques chiffres.
Thomas W.

13

Python - tortue - 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 et python % 500 respectivement:


3
Vous pourriez économiser beaucoup de caractères en vous débarrassant de quelques-uns des raccourcis que vous définissez. Vous n'utilisez cqu'une seule fois, donc il serait en fait plus court que de l'invoquer math.cos, et je pense qu'il y en a probablement d'autres que vous pourriez utiliser pour réduire la longueur totale.
AJMansfield

1
Vous pouvez éliminer six caractères en from math import *supprimant les math.préfixes.
alexwlchan

3
Vous définissez u=t.circle, mais quelques lignes plus tard, vous avez oublié d’échanger un t.circle(...)appel.
Alconja

2
Tortue pour tirer le €. Quel temps pour vivre.
Nit

13

PHP, 432 435 367 356 334 octets

(Edit: Apparemment, IJ et GH sont supposés être parallèles à BCDE. Maintenant corrigé)

Ce script génère une image SVG, mais le servira text/htmlpar défaut. Je pense que la plupart des navigateurs considéreront cela comme une page Web HTML contenant une image SVG intégrée. Cela semble fonctionner correctement pour moi de toute façon.

La hauteur de l'image est transmise en tant que paramètre de chaîne de requête. (Remarque: le nombre d'octets inclut un caractère de nouvelle ligne à la fin de la ligne 3, ce qui est nécessaire pour que cela fonctionne correctement).

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

Version mise à jour ( 367 356 334 octets):

preg_replace_callback()est un moyen beaucoup plus efficace de redimensionner les valeurs numériques. Ce code produit la même sortie que la version d'origine. (Edit: Réductions supplémentaires grâce à 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>');

Sortie:

euro.php? x = 60

entrez la description de l'image ici

euro.php? x = 200

entrez la description de l'image ici


widthet heightsont inutiles ici. Et vous devez spécifier le xmlnsrendu dans les navigateurs (Firefox et Chrome testés; même avec le type MIME envoyé par SVG, ils le rendent tous les deux en XML, pas en SVG). ideone.com/JkqVL0 (suppression de la valeur x codée en dur pour une solution de 369 octets)
Tim S.

@TimS. Non, cela ne fonctionnera pas correctement si vous exécutez le code PHP sous ideone et copiez les résultats dans un fichier SVG. Mais si vous publiez réellement le script sur un serveur Web, PHP servira (par défaut) les résultats avec le type MIME text/html. Chrome et Firefox n'ont aucun problème avec cela, bien que je viens de découvrir que Safari est un peu plus pernicieux.
ossifrage délirant

Ah! Je vois maintenant le truc: text/htmlwith <svg>...est interprété comme un fichier HTML avec un svgélément, qui n’a pas besoin de xmlnsmais qui a besoin de widthet height. Je pensais en termes de fichier SVG, qui a besoin du bon xmlns. Votre code est bon.
Tim S.

sur le second code, si vous utilisez 24 au lieu de 12, ne réduisez-vous pas 1 octet sur chaque valeur x.5?
Einacio

@Einacio Oui! :-) Malheureusement, je gagne aussi un octet à chaque occurrence de "5", "6", "7" et "8". La longueur résultante est exactement la même.
ossifrage délirant

9

sh, 8604

Je pense que quelqu'un peut probablement faire mieux, mais commençons.

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

3
Cela ne tomberait-il pas sous la faille habituelle du codage en dur de la sortie?
user80551

4
Cela tombe certainement dans la catégorie "échappatoires standard".
Igglyboo

2
@ Igglyboo: Comment ça?
Ry-

18
C'est une très longue réponse pour un défi code-golf. :-)
AL

2
@Igglyboo Pas d'accord. Le fichier .svg est vectoriel, il peut donc être redimensionné à l'infini - et en fonction du $1paramètre d'entrée.
Trauma numérique

9

HTML5, 395

==> Essayez-le en ligne

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

Le code est compressé à l'aide de JSCrush .

Voici le code non compressé:

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

Cela peut être réduit à 378 en jouant avec la source avant d'appliquer crush: jsfiddle.net/_nderscore/EUBG8
nderscore

Ceci est JavaScript, pas HTML. J'en ai marre que les gens ne comprennent pas comment ça marche.
Tortue

1
Oui, parce que <canvas>tag est JavaScript ... HTML5 est souvent utilisé pour ne pas écrire HTML / CSS / JS. Non pas que les gens ne le comprennent pas, les programmeurs sont juste souvent paresseux (du moins je le suis). Votre commentaire semble un peu dur.
Michael M.

@Mig Je pensais que HTML + CSS + JS s'appelait DHTML?
kinokijuf

6

PostScript, 270

7 7 traduire
/ l {lineto} def
/ o {0 0} def
o 6 44,85 165,52 arc
-7,08 1,5 l
-7,5,5 l
o 6 175.22 184.74 arc
-7,08 -,5 l
-7,5 -1,5 l
o 6 194.48 309.67 arc
o 5 320 197,46 arcn
1,87 -1,5 l
2,29 à 5 l
o 5 185,74 174,26 arcn
2,7,5 l
3,12 1,5 l
o 5 162.54 40 arcn
remblai proche

Ceci définit simplement le contour en ajoutant des éléments de chemin en fonction des coordonnées que j'ai calculées à l'aide de GeoGebra, puis remplit le contour.

J'ai sauvé quelques caractères en ajoutant des raccourcis pour lineto( /l{lineto}def) et l'origine du cercle ( /o{0 0}def).

Pour spécifier une taille différente, ajoutez une commande du formulaire après la première ligne vide.height width scale

Lorsqu'il est exécuté seul, le symbole de l'euro est dessiné dans le coin inférieur gauche de la page avec la taille de page par défaut. Enregistrez-le simplement sous anything.pset visualisez-le avec un visualiseur de documents.

Voici une image de celle-ci à la taille par défaut, pixellisée à un peu plus de 90 pixels par pouce:

taille par défaut à 90 ppp

À la taille 4x:

Taille 4x à 90 ppi

Vous pouvez également télécharger l'original pour votre plus grand plaisir.


2
Est-ce qu'il lit un argument pour définir la taille du signe?
AL

@ n.1 oh, désolé, je n'ai pas lu cette partie de la spécification. Je vais le réparer après le dîner.
AJMansfield

S'il vous plaît ajouter une capture d'écran du fichier rendu.
AL

1
@ n.1 J'ai ajouté des images.
AJMansfield

5

PHP (sans SVG), 628 597 octets

Merci à AsksAnyway pour le joli raccourci pour les fonctions (par exemple $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);

Appelez file.php?h=200depuis votre navigateur pour voir l'image

Les coordonnées sont basées sur des mesures effectuées avec GIMP

100 pixels:

100 € pixels

200 pixels:

€ 200 pixels

Couches ajoutées étape par étape:

# GIF

Code non golfé (avec des fractions, le code golfé a des valeurs arrondies)

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

Outils de ligne de commande Bash + ImageMagick + linux, 460 octets

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

C'est la même technique que la réponse de @ minitech . Mais les données .svg proviennent d'ici, ce qui est beaucoup plus court: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick convertit les données vectorielles en données .png à l'échelle demandée et les tubes en xview.

Sortie pour ./euro.sh 30:

entrez la description de l'image ici

Sortie pour ./euro.sh 300:

entrez la description de l'image ici


7
Pourquoi la grande version n'est-elle pas remplie?
Cole Johnson

2
Comment pouvez-vous afficher des images sur stdin?
phuclv

@ LưuVĩnhPhúc Vous ne pouvez pas "sortir" une entrée standard. Il envoie juste une charge de caractères à base64, qui est un programme qui le décompile en jetons binaires (représentant un fichier svg, apparemment), avec laquelle il fait plus de choses.
Tomsmeding

2
@tomsmeding Je crois qu'ils ont été déroutés par le titre de la fenêtre étant "stdin".
Mniip

@ColeJohnson Je pense que ni la version remplie, mais sur la petite version, les lignes intérieures et extérieures sont rendues suffisamment proches pour apparaître solide. Cela dit, il y a clairement un problème d'aliasing étrange avec ImageMagick que je ne comprends pas bien - mais je pense que l'image générée est suffisamment proche pour le code-golf ;-)
Digital Trauma

2

POV-Ray (370 octets)

Je n'arrivais pas à comprendre comment restituer la même zone verticale tout en préservant les proportions. J'ai donc décidé de choisir la bonne hauteur et de laisser à l'utilisateur le rendu uniquement au format 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}}

courir avec povray.exe /RENDER euro.pov -w600 -h800

entrez la description de l'image ici entrez la description de l'image ici


2

Traitement, 232 octets

Le traitement ne permet pas vraiment de prendre des arguments en ligne de commande car il est tellement spécialisé pour le dessin, mais ma fonction prend le paramètre comme hauteur pour compenser. Les coordonnées sont codées en dur / approximées à partir de l'image ci-dessus, et la trame entière est mise à l'échelle en fonction du paramètre d'entrée pour obtenir des dessins de tailles arbitraires.

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 + programme entier

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

Sortie

Traitement du croquis Euro


1
Vous pouvez 1OPEN255backgroundfill-1
Kritixi Lithos le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.