Dibuja el signo €


61

El objetivo es generar o mostrar una imagen con un signo € (euro) de acuerdo con las siguientes especificaciones (ignorando el borde del signo).

€ signo

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

Reglas:

  • El programa / script debe tomar la altura del signo en píxeles como argumento (el espacio vacío alrededor del signo es opcional)
  • El signo no puede extraerse o de un carácter, directamente (está prohibido printel en la imagen) o indirectamente (calculando 8364anterioridad se muestra en una página HTML)
  • La salida no necesita guardarse en ningún archivo, puede mostrarse y luego mostrarse como una captura de pantalla
  • Las "lagunas" estándar están prohibidas
  • El código más corto gana

77
Difícil ! Es hora de revisar mi geometría / trigonometría. Veo algunas coordenadas bastante difíciles de deducir.
Michael M.

55
Tuve que buscar "facultativo"
Digital Trauma

2
Realmente espero una respuesta de LaTeX + TikZ :)
Cole Johnson

12
Sin el euro, este problema no existiría, demostrando así una vez más la verdad de los "problemas mo mo mo dinero"
Thomas Johnson,

1
No sé qué se puede usar tipográficamente y no soy un tipógrafo. Si quieres un signo € perfecto, solo usa el carácter €. Pero ese no es el objetivo de esta pregunta. No esperaba imágenes perfectas de píxeles. Siéntase libre de agregar otra pregunta con reglas diferentes si no le gusta esta.
AL

Respuestas:


22

PostScript / GhostScript, 100

(96 para el programa, 4 para el prefijo de cambio de línea de comandos)

Totalmente golfizado y tokenizado a mano:

$ 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

Puede obtener una copia aquí , para su propia visualización.

Después de ver la respuesta de @ ThomasW, y considerando mi programa cuidadosamente, me di cuenta de que podía hacerlo aún mejor.

La versión tokenizada es equivalente a esto:

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

Una explicación de las optimizaciones:

En primer lugar, convertí mi primera solución en una unión de algunos subrutas más simples, en lugar de una ruta que circunscribe todo. Tomé prestado el método de Thomas para ingresar un parámetro, que es mucho mejor que el que tenía.

Luego multipliqué todas las coordenadas por 10 y redondeé todo para darme solo coordenadas enteras. También redondeé los ángulos y convertí los dos grandes en ángulos negativos equivalentes. Esto convenientemente hace que cada número caiga entre -128 y 127.

Y luego tokené todo . Cada operador se puede representar con una secuencia de dos bytes cada uno. Y debido a que cada número puede ser representado por un solo byte firmado, cada uno también se convierte en solo dos bytes. La única parte con la que no pude hacer eso fue hal principio, pero también tiene solo dos bytes, solo el hy un espacio después.

Ejecútalo como:

gs -dh=200 euro.ps

200 pt de altura

gs -dh=80 euro.ps

80 pt de altura

gs -dh=20 euro.ps

20 pt de altura


Nuevo: ¡Incluso versiones más cortas!

Utilizando rutas de usuario codificadas, he logrado reducir el tamaño del programa en unos pocos bytes. Cada uno de estos programas es equivalente al primero, produciendo resultados idénticos:

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

Lo que es equivalente a:

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

Y una solución confusa ligeramente contraintuitiva ahorra un personaje más, por solo 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

Que es equivalente a:

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
¡Buen trabajo! Supongo que tendré que aprender todo sobre los tokens binarios.
Thomas W.

@ThomasW. Aunque todavía no he terminado por completo; Todavía estoy leyendo la documentación de cadenas de ruta codificadas ...
AJMansfield

No necesita el espacio después hporque los tokens binarios se delimitan automáticamente. Por cierto, ¿cómo lo codificó? Lo hice con un editor hexadecimal estándar, que es tedioso.
Thomas W.

2
Los archivos tokenizados @ n.1 funcionan exactamente igual que los archivos PostScript normales, e incluso puede mezclar tokens binarios y PostScript de texto plano estándar en el mismo archivo. Cada token binario corresponde directamente a un operador u otro objeto, por lo que puede reemplazar o insertar fácilmente operaciones, o incluso copiar fragmentos a otro programa. Los detalles exactos sobre el formulario tokenizado se pueden encontrar en el Manual de referencia del lenguaje PostScript (el libro rojo) en la sección 3.12. Las rutas de usuario codificadas se describen en 4.6.2.
AJMansfield

1
@ n.1 Usé un editor hexadecimal para escribir el archivo, por esa razón. Los bytes delimitadores de token normalmente corresponden a caracteres de control en ISO-latin-1 y otras codificaciones de ancho fijo, pero si el editor lo interpreta en UTF-8 u otra codificación de ancho variable, obtendrá cosas como esas, lo mismo con cualquier otro archivo que incluye datos binarios.
AJMansfield

50

Mathematica, 193 183 177 173 169 166 bytes

Yay, matemáticas! Estoy trazando la región que satisface un cierto conjunto (bastante complicado) de desigualdades:

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

El uso es e[height], por ejemplo e[100]:

ingrese la descripción de la imagen aquí

O e[200]:

ingrese la descripción de la imagen aquí

Puede notar que los bordes más afilados están ligeramente redondeados. Esto se debe a que la región solo se puede trazar muestreando los puntos en el espacio, y Mathematica no muestrea cada píxel de forma predeterminada. La resolución de muestreo se puede aumentar agregando otra opción PlotPoints->#(que usa una muestra por píxel), que agrega 14 caracteres . No recomiendo ejecutarlo con esa opción, ya que aumenta significativamente el tiempo de ejecución y apenas aumenta el atractivo visual más allá #/4. Por lo tanto, (después de la aprobación del OP) no se incluye en el puntaje.

Aquí hay una versión ungolfed:

e[height_] := (
  angle = 40°;
  d = {-5 Sin[angle] - 6, 5 Cos[angle]};
  RegionPlot[
      (Abs[y] > .5 && Abs[y] < 1.5
        ||
       r > 25 && r < 36)
    &&
      {x, y + 6}.d > 0
    &&
      {x + 7.5, y + .5 - Sign[y]}.d < 0
    ||
      r > 25 && r < 36 && x < 5 Cos[angle] 
    /. r -> x^2 + y^2
    ,
    {x, -7.5, 4.5},
    {y, -6, 6},
    Frame -> False,
    ImageSize -> height
  ]
);

Tenga en cuenta que en la versión de golf, he escalado el sistema de coordenadas en un factor de 2 para evitar la .5s, pero resulta que el recuento de caracteres es realmente idéntico.

Aquí hay una explicación de cómo calculé la fórmula. Dividí la forma en dos regiones. Uno contiene el anillo y las rayas y se corta a la derecha con la BCDEpendiente y a la izquierda con las pendientes IJy GH(más sobre eso más adelante). El otro contiene el mismo anillo, pero simplemente está cortado en la coordenada x del punto D. Las condiciones para las dos regiones se combinan con ||, lo que actúa como una unión establecida aquí.

El anillo se define simplemente como 5 < r < 6, donde restá la distancia desde el origen. Sin embargo x²+y², es más fácil de resolver ( ), así que estoy usando 25 < x² + y² < 36para obtener todos los puntos en el ring.

Las rayas están entre ±.5y ±1.5. Podemos manejar ambas franjas al mismo tiempo, tomando el módulo de y , por lo que las franjas (de longitud infinita) simplemente se cumplen .5 < |y| < 1.5. Nuevamente, para tomar la unión de las rayas y el anillo, solo estoy usando ||.

Sin embargo, lo interesante es probablemente cómo obtener las "máscaras". El punto Dtiene una coordenada x de 5 cos 40°, por lo que la máscara que cuida el borde inferior (combinada solo con el anillo) es justa x < 5 cos 40°. Esto se puede aplicar a través de la intersección establecida que se traduce &&en lógica.

Las otras máscaras son la parte realmente complicada. Primero, obtengamos la pendiente de BCDE. Podemos construir fácilmente puntos Cy D, como (0, -6)y 5 (cos 40°, sin 40°), respectivamente. El vector que apunta a lo largo de la línea es justo D - C = (5 cos 40°, 5 sin 40° + 6). Para aplicar la máscara a la derecha, solo necesito averiguar si un punto se encuentra a la izquierda o a la derecha de esa línea (llamemos al vector de línea p). Puedo resolver esto tomando el vector desde Cmi punto de interés y proyectándolo en un vector perpendicular a p. El signo de la proyección me dirá de qué lado está el punto. Obtener el vector perpendicular es bastante simple en 2D: voltea las coordenadas e invierte el signo de una de ellas. Esa es la variable den mi código:(-5 sin 40° - 6, 5 cos 40°). El vector desde Cun punto de interés q = (x, y)es q - C = (x, y + 6). La proyección es solo el producto escalar (o producto de puntos) entre qy d. La forma en que lo elegí dapunta a la izquierda, así que quiero d.(q-C) > 0. Esta condición aplica la máscara de la mano derecha.

Para la máscara de la izquierda puedo usar básicamente la misma idea. La pendiente es la misma y, por lo tanto, también lo es d. Solo necesito compensar mi punto desde las esquinas inferiores a la izquierda de las rayas en lugar de desde C. Esos tienen coordenadas (-7.5, 0.5)(franja superior) y (-7.5, -1.5)(franja inferior). Entonces eso requeriría dos reglas independientes para las dos franjas. Sin embargo, tenga en cuenta que todos los puntos afectados por la máscara inferior están en la franja inferior y, por lo tanto, tienen una y negativa . Y todos los puntos afectados por la máscara superior tienen y positivo . Entonces, simplemente puedo cambiar mi desplazamiento usando Sign[y]cuál es 1para positivo y -1para negativo y. Entonces mi punto de compensación se convierte en(-7.5, -0.5 + Sign[y]). De lo contrario, la máscara funciona igual que la máscara de la derecha. Por supuesto, esta vez la proyección debe ser negativa. Entonces, ingenuamente sería algo así RH-projection > 0 && LH-projection < 0(que también es lo que originalmente tenía en el código). Pero podemos acortar esto, porque multiplicar un número positivo y uno negativo tiene que dar un número negativo, por lo que es justo RH * LH < 0(dónde RHy LHson las proyecciones respectivas).

Eso es. Poner todo junto lleva a la siguiente estructura lógica:

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

Para ser claros, las coordenadas en mi explicación se refieren al diagrama de construcción dado en el desafío. Como se mencionó anteriormente, mi código en realidad los multiplica a todos por 2: lo cambié para guardar bytes, pero el recuento de bytes es idéntico y no me molesté en revertir el cambio nuevamente. También los enteros se ven mejor.


1
Soy relativamente nuevo en Mathematica, ¡así que agradecería algunos comentarios sobre su código!
Thomas W.

2
@ThomasW. bueno, lo real de Mathematica es solo una llamada a la RegionPlotcual simplemente se colorean todos los puntos en el espacio que satisfacen una condición dada. Entonces darlo x^2+y^2<1dibujará un círculo unitario. Sin embargo, agregaré una explicación para las matemáticas reales (más tarde esta noche).
Martin Ender

1
¿Cuál es la longitud del código con bordes no redondeados? Creo que tiene el código más corto en este momento, pero no puedo aceptar su respuesta con las esquinas redondeadas, sería injusto para las otras respuestas que no tienen esquinas redondeadas. Por favor, siga estrictamente las especificaciones. Gracias
AL

@ n.1 A menos que esté descalificando la respuesta PostScript de Thomas W., porque es binaria o porque está redondeada de manera demasiado agresiva, su respuesta es definitivamente más corta. Sin embargo, arreglar la resolución requiere 14 caracteres, por lo que mi respuesta sigue siendo la más corta después de la suya. Lo editaré
Martin Ender

1
@ThomasW. ahi tienes!
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;

descargue el emulador en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

En BBC basic, todos los gráficos se manejan en el nivel bajo usando caracteres de control ASCII específicos de la máquina (pero algunos comandos de alto nivel también están disponibles para los comunes por conveniencia). Los que se usan aquí son 22 (cambiar el modo de visualización) 29 (cambiar origen) y 25, equivalente a la instrucción PLOT, que toma un parámetro de acción adicional (dibujar línea, círculo, triángulo, etc. en segundo plano / primer plano con movimiento relativo / absoluto) antes de los parámetros X e Y.

Entonces, todo lo que tengo que hacer es enviar una carga de caracteres al controlador VDU. los valores terminados en punto y coma son de 16 bits. otros son de 8 bits. El número total de bytes enviados al controlador VDU es 91 , aunque eso en sí mismo no calificaría como respuesta porque en esa etapa el tamaño está codificado.

El lugar obvio para el origen es el centro del círculo, pero en realidad hay más comandos involucrados en la producción de las barras. Así que cambié el origen hacia abajo 1.5 hacia la parte inferior de la barra inferior, lo que reduce la cantidad de fracciones y números negativos requeridos. Permanece en la línea vertical con el centro del círculo, lo cual es importante porque la línea E comienza desde esta línea vertical.

En realidad, solo tuve que calcular 3 números del dibujo: la esquina interna superior de la forma de C (5 cos 40, 5 sen 40 + 1.5) = (3.8302,3.1394 + 1.5) = aprox (12 / 3.1, 4.6) y El gradiente de la línea E: x / y = 3.8302 / (6 + 3.1394) = 0.4157 = aproximadamente 1 / 2.4

Como solo tengo la versión de evaluación gratuita (interpretada), tomo la altura del símbolo como entrada del usuario. Si compra la versión completa (29.99GBP) puede compilar y luego leer la línea de comando con w=VAL(@cmd$)/12.

Código sin golf

En el código de golf, solo hay una declaración de VDU, pero en el código sin golf lo desgloso en varios para mayor claridad. Además, debido a que BBC basic es poco endian, la combinación p,0,se puede jugar, p;pero la dejé sin pensar por claridad.

  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)

ingrese la descripción de la imagen aquí


BBC BASIC. ¡Increíble! ¡Esto me lleva de vuelta casi treinta años!
Tom Chantler

1
@Dommer BBC Basic se lanzó por primera vez en 1981, más de 20 años antes de que se imprimieran los primeros billetes en euros (2002). ¡Así que esta es la única forma en que podría haber dibujado un gran símbolo del euro en una máquina de este tipo! Como alternativa puede redefinir el carácter ASCII na un símbolo del euro con un mapa de bits de 8x8, así: VDU 23,n,30,33,120,32,120,30,30,0. Según Wikipedia, BBC Basic todavía se está desarrollando, principalmente para dispositivos móviles.
Level River St

¡En efecto! Creo que obtuvimos la nuestra en 1984. Recuerdo dibujar sprites geniales en papel cuadriculado y luego trabajar en sus representaciones binarias, como estoy seguro de que tú también lo has hecho. En esa nota, acabo de dibujar su símbolo del Euro a mano. Es muy bueno una vez que se corrige el error tipográfico y el valor antepenúltimo se cambia de 30 a 33. Veo en su perfil que también ha utilizado LOGO que nuevamente me lleva a mis días de escuela primaria. Es genial saber que BBC Basic todavía está en uso hoy en día. Si fue lo suficientemente bueno para nosotros ...
Tom Chantler

Solo para agregar, el mapa de bits 8x8 de BBC Basic podría hacerse más "en cursiva" (de acuerdo con el logotipo más grande) al cambiarlo a VDU 23,n,30,33,124,32,120,33,30,0. Gracias por el viaje por el carril de la memoria.
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>

Si bien esto solo usa material SVG, depende en gran medida del análisis HTML laxo y debe servirse como HTML. SVG estricto requeriría muchos más bytes.

¡Intentalo!


13
(-: ǝɯ oʇ ǝuıɟ sʞoo⅂
ossifrage aprensivo

1
Sí, estaba pensando en las coordenadas PostScript, que son al revés. Cambió el eje y ahora.
Thomas W.

3
Trabaja para mí (Chrome 34) incluso sin el seguimiento </svg>. Ah, y ese marcado es horrible . Espero que te avergüences de ti mismo. ;-)
Ilmari Karonen

2
@IlmariKaronen Estoy avergonzado ;-). Por lo general, incluso prefiero limpiar XHTML sobre HTML. De todos modos, si dejo de lado el final </svg>, solo veo el círculo, no las líneas (en un archivo independiente, no dentro del marcado que JS Bin podría agregar).
Thomas W.

1
Se puede acortar evt.targeta this, el ahorro de 6 bytes.
Cepillo de dientes

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>

No es la respuesta más pequeña en absoluto, pero lo más pequeña que pude obtener incluso al invocar todos mis css-minification-fu

Advertencias:

El código anterior con todos los 'px' despojados funciona en Firefox e IE, pero no en Chrome y Safari, que son más exigentes con sus unidades :)

También tuve que volver a agregar los px para que el jsfiddle funcione:

http://jsfiddle.net/9A3J9/

100: ingrese la descripción de la imagen aquí

200: ingrese la descripción de la imagen aquí

código sin golf:

 <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
¡Guauu! Ese skewXtruco podría conseguir mi voto a solas.
manatwork

eso es exactamente lo que comencé a escribir ayer. puntos falsos para ti entonces
Einacio

establecer una identificación en el div y usar getElementByIdreduce 6 caracteres. y luego puedes usar la identificación en el CSS para reducir 2 más
Einacio

Además, la petiqueta de cierre se puede omitir si no hay más contenido después (según las especificaciones). y verificaría también si los navegadores cierran automáticamente div(aunque prohibido por las especificaciones, funcionó en el violín en FF)
Einacio

@einacio grandes sugerencias! estamos en 494 B. gracias :)
caitriona

16

PostScript + Ghostscript 137 + 6 = 143 (binario), 209 + 6 = 215 bytes

Versión totalmente golfizada con tokens binarios:

$ 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

Descargar archivo binario codificado a mano

Versión 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

Guardar como euro.psy ejecutar con Ghostscript como

gs -dh=80 euro.ps

Símbolo del euro, 80 puntos, rendido por Ghostscript

gs -dh=20 euro.ps

Símbolo del euro, 20 puntos, rendido por Ghostscript

Como no existe un píxel en PostScript, esa altura se interpreta en puntos. Calculé +6 para el interruptor en la línea de comando.


1
Meh, ¿cómo se supone que voy a superar el tamaño del archivo compilado? : D ... ¿Cómo funcionan esos tokens binarios? ¿No es básicamente como compilar el código a mano?
Martin Ender

DCla línea no corta las rayas horizontales correctamente. Perpendicular hacia abajo Dno corta la forma del 'círculo' en el lugar correcto, más abajo :(. Parece que lo mismo
ocurre

+ Los bordes izquierdos de las rayas horizontales no están alineados.
user2846289

@ m.buettner Los nombres PostScript más importantes se pueden expresar utilizando una secuencia de dos bytes. Esto realmente no se está compilando como si se compilara un programa C o Java. Pasará por el mismo proceso de análisis que cualquier programa PostScript. Si mira el hexdump o abre el archivo binario en un editor de texto, puede ver que es casi lo mismo que la versión ASCII, pero la mayoría de los nombres fueron reemplazados por una secuencia de dos bytes.
Thomas W.

@VadimR ¡Tienes un ojo agudo! Supongo que cambié demasiada precisión por brevedad (redondeo demasiado agresivo). Puede que tenga que agregar algunos dígitos.
Thomas W.

13

Pitón - tortuga - 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 % 100y python % 500respectivamente:


3
Podrías salvar muchos personajes deshaciéndote de algunos de los atajos que definas. Solo se usa cuna vez, por lo que en realidad sería más corto invocarlo como math.cos, y creo que probablemente hay otros que podría abreviar para reducir la longitud total.
AJMansfield

1
Puede eliminar seis caracteres usando y from math import *luego soltando los math.prefijos.
alexwlchan

3
Usted define u=t.circle, pero algunas líneas más tarde olvidó cambiar una t.circle(...)llamada.
Alconja

2
Tortuga para dibujar el €. Qué tiempo para estar vivo.
Nit

13

PHP, 432 435 367 356 334 bytes

(Editar: Aparentemente, se supone que IJ y GH son paralelos con BCDE. Ahora corregido)

Este script genera una imagen SVG, pero la servirá como text/htmlpredeterminada. Creo que la mayoría de los navegadores tratarán esto como una página web HTML que contiene una imagen SVG incrustada. Parece funcionar bien para mí de todos modos.

La altura de la imagen se pasa como un parámetro de cadena de consulta. (Nota: el recuento de bytes incluye un carácter de nueva línea al final de la línea 3, que es necesario para que esto funcione correctamente).

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

Versión actualizada ( 367 356 334 bytes):

preg_replace_callback()es una forma mucho más eficiente de escalar los valores numéricos. Este código produce el mismo resultado que la versión original. (Editar: más reducciones gracias a 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>');

Salida:

euro.php? x = 60

ingrese la descripción de la imagen aquí

euro.php? x = 200

ingrese la descripción de la imagen aquí


widthy heightson innecesarios aquí Y debe especificar xmlnspara que se represente en la mayoría de los navegadores (probado Firefox y Chrome; incluso con el tipo MIME correcto de SVG enviado, ambos lo representan como XML, no SVG). ideone.com/JkqVL0 (elimine el valor de x codificado para una solución de 369 bytes)
Tim S.

@TimS. No, no funcionará correctamente si ejecuta el código PHP en ideone y copia los resultados en un archivo SVG. Pero si realmente publica el script en un servidor web, PHP (por defecto) servirá los resultados con un tipo MIME de text/html. Chrome y Firefox no tienen problemas con esto, aunque acabo de descubrir que Safari es un poco más pernicioso.
aprensivo ossifrage

Ah! Ahora veo el truco: text/htmlwith <svg>...se interpreta como un archivo HTML con un svgelemento, que no necesita el xmlnspero necesita widthy height. Estaba pensando en términos de un archivo SVG, que necesita lo apropiado xmlns. Tu código está bien.
Tim S.

en el segundo código, si usa 24 en lugar de 12, ¿no reduciría 1 byte en cada valor x.5?
Einacio

@Einacio ¡Sí! :-) Desafortunadamente también obtengo un byte en cada aparición de "5", "6", "7" y "8". La longitud resultante es exactamente la misma.
aprensivo ossifrage

9

sh, 8604

Creo que alguien probablemente pueda hacerlo mejor, pero comencemos esto.

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

3
¿No estaría eso bajo el vacío legal de codificar la salida?
user80551

44
Esto definitivamente cae dentro de la categoría de "lagunas estándar".
Igglyboo

2
@Igglyboo: ¿Cómo es eso?
Ry-

18
Esta es una respuesta muy larga para un desafío de código de golf. :-)
AL

2
@Igglyboo No estoy de acuerdo. .svg está basado en vectores, por lo que se puede escalar infinitamente, y es por el $1parámetro de entrada.
Trauma digital

9

HTML5, 395

==> Pruébelo en línea

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

El código se comprime usando JSCrush .

Aquí está el código sin comprimir:

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

Esto se puede reducir a 378 jugando al golf antes de aplicar el enamoramiento: jsfiddle.net/_nderscore/EUBG8
nderscore

Esto es JavaScript, no HTML. Estoy cansado de que la gente no entienda cómo funciona eso.
Tortuga

1
Sí, porque la <canvas>etiqueta es JavaScript ... HTML5 se usa a menudo para no escribir HTML / CSS / JS. No es que la gente no lo entienda, los programadores a menudo son flojos (al menos yo). Tu comentario parece un poco duro.
Michael M.

@Mig ¿Creí que HTML + CSS + JS se llamaba DHTML?
kinokijuf

6

PostScript, 270

7 7 traducir
/ l {lineto} def
/ o {0 0} def
o 6 44.85 165.52 arco
-7,08 1,5 l
-7.5 .5 l
o 6 175.22 184.74 arco
-7.08 -.5 l
-7,5 -1,5 l
o 6 194,48 309,67 arco
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
relleno de camino cerrado

Esto solo define el contorno agregando elementos de ruta basados ​​en coordenadas que calculé con la ayuda de GeoGebra, y luego llena el contorno.

Ahorré algunos caracteres agregando accesos directos para lineto( /l{lineto}def) y el origen del círculo ( /o{0 0}def).

Para especificar un tamaño diferente, agregue un comando del formulario después de la primera línea en blanco.height width scale

Cuando se ejecuta por sí solo, esto dibuja el símbolo del euro en la esquina inferior izquierda de la página del tamaño de página predeterminado. Simplemente guárdelo como anything.psy véalo con un visor de documentos.

Aquí hay una imagen con el tamaño predeterminado, rasterizado a poco más de 90 píxeles por pulgada:

tamaño predeterminado a 90 ppi

A 4x tamaño:

Tamaño 4x a 90 ppi

También puede descargar el original para su propio placer visual.


2
¿Lee algún argumento para definir el tamaño del signo?
AL

@ n.1 oh, lo siento, no leí esa parte de la especificación. Lo arreglaré después de la cena.
AJMansfield

Agregue una captura de pantalla del archivo renderizado.
AL

1
@ n.1 He agregado imágenes.
AJMansfield

5

PHP (sin SVG), 628 597 bytes

Gracias a AsksAnyway por el buen acceso directo para funciones (por ejemplo $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);

Llame file.php?h=200desde su navegador para ver la imagen.

Las coordenadas se basan en mediciones realizadas con GIMP

100 píxeles:

€ 100 píxeles

200 píxeles:

€ 200 píxeles

Capas añadidas paso a paso:

# GIF

Código sin golf (con fracciones, el código de golf tiene valores redondeados)

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

Herramientas de línea de comandos Bash + ImageMagick + linux, 460 bytes

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

Esta es la misma técnica que la respuesta de @minitech . Pero los datos .svg provienen de aquí, que es mucho más corto: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick convierte los datos vectoriales a datos .png a la escala solicitada y las tuberías a xview.

Salida para ./euro.sh 30:

ingrese la descripción de la imagen aquí

Salida para ./euro.sh 300:

ingrese la descripción de la imagen aquí


77
¿Por qué no se llena la versión grande?
Cole Johnson

2
¿Cómo puedes enviar imágenes a stdin?
phuclv

@ LưuVĩnhPhúc No puede "enviar" a la entrada estándar. Simplemente está enviando una carga de caracteres base64, que es un programa, que lo descompila en tokens binarios (que aparentemente representan un archivo svg), con los que hace más cosas.
tomsmeding

2
@tomsmeding Creo que estaban confundidos por el título de la ventana como "stdin".
mniip

@ColeJohnson Creo que ninguna de las versiones está llena, pero en la versión pequeña las líneas internas y externas se muestran lo suficientemente cerca como para parecer sólidas. Habiendo dicho eso, claramente está ocurriendo algo extraño de alias con ImageMagick que no entiendo completamente, pero creo que la imagen generada está lo suficientemente cerca para el golf de código ;-)
Digital Trauma

2

POV-Ray (370 bytes)

No podía entender cómo renderizar la misma área vertical y preservar la relación de aspecto al mismo tiempo, así que decidí elegir la altura correcta y depende del usuario renderizar solo en formato 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}}

corre con povray.exe /RENDER euro.pov -w600 -h800

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí


2

Procesamiento, 232 bytes

El procesamiento realmente no permite tomar argumentos de la línea de comandos ya que es muy especializado para dibujar, pero mi función toma el parámetro como altura para compensar. Las coordenadas están codificadas / aproximadas a partir de la imagen de arriba, y todo el lienzo se escala según el parámetro de entrada para obtener dibujos de tamaños arbitrarios.

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 + programa completo

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

Salida

Procesamiento de croquis en euros


1
Puede jugar al golf usando 1en lugar de OPEN, así cambiando el 255en el backgroundy filllas llamadas a-1
Kritixi Lithos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.