Disegna il segno €


61

L'obiettivo è produrre o visualizzare un'immagine con un segno € (euro) secondo le seguenti specifiche (ignorando il bordo del segno).

€ segno

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

Regole:

  • Il programma / script deve assumere l'altezza del segno in pixel come argomento (lo spazio vuoto attorno al segno è facoltativo)
  • Il segno non può essere disegnata come o da un personaggio, direttamente (è vietato printl' nell'immagine) o indirettamente (calcolando 8364poi la visualizzazione in una pagina HTML)
  • L'output non ha bisogno di essere salvato in nessun file, può essere visualizzato e mostrato come uno screenshot
  • Sono vietate le "scappatoie" standard
  • Il codice più corto vince

7
Ingannevole! È tempo di rivedere la mia geometria / trigonometria. Vedo alcune coordinate piuttosto difficili da dedurre.
Michael M.,

5
Ho dovuto cercare "facoltativo"
Digital Trauma,

2
Spero davvero in una risposta LaTeX + TikZ :)
Cole Johnson,

12
Senza l'euro, questo problema non esisterebbe, dimostrando quindi ancora una volta la verità dei "problemi di Mo money mo"
Thomas Johnson,

1
Non so cosa sia tipograficamente utilizzabile e non sono un tipografo. Se vuoi un segno € perfetto, usa solo il carattere €. Ma questo non è l'obiettivo di questa domanda. Non mi aspettavo immagini pixel perfette. Sentiti libero di aggiungere un'altra domanda con regole diverse se non ti piace questa.
AL

Risposte:


22

PostScript / GhostScript, 100

(96 per il programma, 4 per il prefisso del commutatore della riga di comando)

Completamente golfizzato e tokenizzato 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

Puoi ottenerne una copia qui , per la tua visione.

Dopo aver visto la risposta di @ ThomasW e aver considerato attentamente il mio programma, mi sono reso conto che avrei potuto farlo ancora meglio.

La versione tokenizzata è equivalente a questa:

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 spiegazione delle ottimizzazioni:

Prima di tutto, ho convertito la mia prima soluzione in un'unione di alcuni percorsi secondari più semplici, piuttosto che in un percorso che circoscrive l'intera cosa. Ho preso in prestito il metodo di Thomas per inserire un parametro, che è molto meglio di quello che avevo avuto.

Quindi ho moltiplicato tutte le coordinate per 10 e arrotondato tutto per darmi solo coordinate intere. Ho anche arrotondato gli angoli e convertito i due grandi in equivalenti angoli negativi. Ciò rende convenientemente ogni singolo numero compreso tra -128 e 127.

E poi ho tokenizzato tutto . Ciascun operatore può essere rappresentato con una sequenza di due byte ciascuno. E poiché ogni numero può essere rappresentato da un singolo byte con segno, ognuno diventa anche solo due byte. L'unica parte con cui non potevo farlo era hall'inizio, ma anche solo due byte, solo uno he uno spazio dopo.

Eseguilo come:

gs -dh=200 euro.ps

200 pt alto

gs -dh=80 euro.ps

80 pt alto

gs -dh=20 euro.ps

Alto 20 pt


Novità: versioni ancora più brevi!

Utilizzando percorsi utente codificati, sono riuscito a ridurre le dimensioni del programma di alcuni byte. Ciascuno di questi programmi è equivalente al primo, producendo un output identico:

92 byte:

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

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

E una soluzione confusa leggermente controintuitiva salva un altro personaggio, per 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

Che equivale 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
Ottimo lavoro! Immagino che dovrò imparare tutto sui token binari.
Thomas W.

@ThomasW. Anche se non ho ancora finito completamente; Sto ancora leggendo la documentazione delle stringhe del percorso codificato ...
AJMansfield,

Dopo non è necessario lo spazio hperché i token binari sono auto-delimitati. A proposito, come l'hai codificato? L'ho fatto con un editor esadecimale standard, che è noioso.
Thomas W.

2
@ n.1 i file tokenizzati funzionano esattamente come i normali file PostScript e puoi anche mescolare token binari e PostScript standard in testo normale nello stesso file. Ogni token binario corrisponde direttamente a un operatore o ad un altro oggetto, quindi puoi facilmente sostituire o inserire operazioni o persino copiare frammenti in un altro programma. I dettagli esatti sul modulo tokenizzato sono disponibili nel Manuale di riferimento del linguaggio PostScript (il libro rosso) nella sezione 3.12. I percorsi utente codificati sono descritti in 4.6.2.
AJMansfield,

1
@ n.1 Ho usato un editor esadecimale per scrivere il file, per questo motivo. I byte del delimitatore token normalmente corrispondono ai caratteri di controllo in ISO-latino-1 e altre codifiche a larghezza fissa, ma se l'editor lo sta interpretando in UTF-8 o un'altra codifica a larghezza variabile, otterrai cose del genere, lo stesso con qualsiasi altro file che include dati binari.
AJMansfield,

50

Mathematica, 193 183 177 173 169 166 byte

Yay, matematica! Sto tramando la regione che soddisfa un certo (piuttosto complicato) insieme di disuguaglianze:

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'utilizzo è e[height], ad esempio e[100]:

inserisci qui la descrizione dell'immagine

Oppure e[200]:

inserisci qui la descrizione dell'immagine

Si può notare che i bordi più nitidi sono leggermente arrotondati. Questo perché la regione può essere tracciata solo campionando i punti nello spazio e Mathematica non campiona ogni pixel per impostazione predefinita. La risoluzione di campionamento può essere aumentata aggiungendo un'altra opzione PlotPoints->#(che utilizza un campione per pixel), che aggiunge 14 caratteri . Non consiglio di eseguirlo con quell'opzione, perché aumenta in modo significativo il runtime e aumenta a malapena l'appeal visivo oltre #/4. Pertanto, (dopo l'approvazione dell'OP) non è incluso nel punteggio.

Ecco una versione leggermente non golfata:

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

Si noti che nella versione golfata, ho scalato il sistema di coordinate di un fattore 2 per evitare la .5s, ma risulta che il conteggio dei personaggi è in realtà identico.

Ecco una spiegazione di come ho elaborato la formula. Ho diviso la forma in due regioni. Uno contiene l'anello e le strisce e viene tagliato a destra con l' BCDEinclinazione ea sinistra con l' inclinazione IJe GH(più avanti). L'altro contiene lo stesso anello, ma viene semplicemente tagliato alla coordinata x del punto D. Le condizioni per le due regioni sono combinate con ||, che qui funge da unione fissa.

L'anello è appena definito come 5 < r < 6, dov'è rla distanza dall'origine. è più facile allenarsi ( x²+y²), quindi sto usando 25 < x² + y² < 36per ottenere tutti i punti sul ring.

Le strisce sono tra ±.5e ±1.5. Possiamo gestire entrambe le strisce contemporaneamente, prendendo il modulo di y , quindi le strisce (di lunghezza infinita) si limitano a soddisfarle .5 < |y| < 1.5. Ancora una volta, per prendere l'unione delle strisce e dell'anello, sto solo usando ||.

La cosa interessante è probabilmente come ottenere le "maschere" però. Il punto Dha una coordinata x di 5 cos 40°, quindi la maschera che si prende cura del bordo inferiore (combinato solo con l'anello) è giusta x < 5 cos 40°. Questo può essere applicato tramite intersezione impostata che si traduce &&in logica.

Le altre maschere sono la parte davvero difficile. Innanzitutto, prendiamo la pendenza di BCDE. Possiamo facilmente costruire punti Ce D, come (0, -6)e 5 (cos 40°, sin 40°), rispettivamente. Il vettore che punta lungo la linea è quindi giusto D - C = (5 cos 40°, 5 sin 40° + 6). Per applicare la maschera a destra, ho solo bisogno di capire se un punto si trova a sinistra o a destra di quella linea (chiamiamo vettore di linea p). Posso capirlo prendendo il vettore dal Cmio punto di interesse e proiettandolo su un vettore perpendicolare a p. Il segno della proiezione mi dirà da che parte sta il punto. Ottenere il vettore perpendicolare è piuttosto semplice in 2D: capovolgere le coordinate e invertire il segno di una di esse. Questa è la variabile dnel mio codice:(-5 sin 40° - 6, 5 cos 40°). Il vettore da Ca un punto di interesse q = (x, y)è q - C = (x, y + 6). La proiezione è solo il prodotto scalare (o punto prodotto) tra qe d. Il modo in cui l'ho scelto dsembra puntare a sinistra, quindi voglio d.(q-C) > 0. Questa condizione si applica alla maschera della mano destra.

Per la maschera per la mano sinistra posso usare sostanzialmente la stessa idea. La pendenza è la stessa e quindi lo è anche d. Devo solo scostare il mio punto dagli angoli in basso a sinistra delle strisce anziché da C. Quelle hanno coordinate (-7.5, 0.5)(striscia superiore) e (-7.5, -1.5)(striscia inferiore). Quindi ciò richiederebbe due regole indipendenti per le due strisce. Tuttavia, si noti che tutti i punti interessati dalla maschera inferiore si trovano nella striscia inferiore e quindi hanno y negativo . E tutti i punti interessati dalla maschera superiore hanno y positivo . Quindi posso semplicemente cambiare il mio offset usando Sign[y]quale è 1positivo e -1negativo y. Quindi il mio punto di offset diventa(-7.5, -0.5 + Sign[y]). Altrimenti la maschera funziona proprio come la maschera della mano destra. Naturalmente, questa volta la proiezione deve essere negativa. Quindi, ingenuamente sarebbe qualcosa del genere RH-projection > 0 && LH-projection < 0(che è anche quello che avevo originariamente nel codice). Ma possiamo accorciare questo, perché moltiplicare un numero positivo e uno negativo deve dare un numero negativo, quindi è giusto RH * LH < 0(dove RHe LHsono le rispettive proiezioni).

Questo è tutto. Mettere tutto insieme porta alla seguente struttura logica:

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

Giusto per essere chiari, le coordinate nella mia spiegazione si riferiscono al diagramma di costruzione fornito nella sfida. Come accennato in precedenza, il mio codice in realtà li moltiplica tutti per 2: l'ho modificato per salvare i byte, ma il conteggio dei byte è in realtà identico e non potrei essere disturbato a ripristinare nuovamente la modifica. Anche i numeri interi sembrano più belli.


1
Sono relativamente nuovo su Mathematica, quindi apprezzerei alcuni commenti sul tuo codice!
Thomas W.

2
@ThomasW. beh, la vera roba Mathematica è solo una chiamata alla RegionPlotquale semplicemente colora in tutti i punti dello spazio che soddisfano una determinata condizione. Quindi darlo x^2+y^2<1disegnerà un cerchio unitario. Aggiungerò una spiegazione per la matematica attuale (più tardi stasera).
Martin Ender,

1
Qual è la lunghezza del codice con bordi non arrotondati? Penso che tu abbia il codice più corto in questo momento, ma non posso accettare la tua risposta con gli angoli arrotondati, sarebbe ingiusto rispetto alle altre risposte che non hanno angoli arrotondati. Seguire rigorosamente le specifiche. Grazie
AL

@ n.1 A meno che tu non stia squalificando la risposta PostScript di Thomas W., perché è binaria o perché è arrotondata in modo troppo aggressivo, la sua risposta è decisamente più breve. Tuttavia, correggere la risoluzione richiede 14 caratteri, quindi la mia risposta è ancora la più breve dopo la sua. Lo modificherò.
Martin Ender,

1
@ThomasW. ecco qua!
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;

scarica l'emulatore su http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

In BBC Basic, tutta la grafica è gestita a basso livello usando caratteri di controllo ASCII specifici della macchina (ma alcuni comandi di alto livello sono disponibili anche per quelli comuni per comodità.) Quelli usati qui sono 22 (cambia modalità di visualizzazione) 29 (cambia origine) e 25, equivalenti all'istruzione PLOT, che accetta un parametro di azione aggiuntivo (disegna linea, cerchio, triangolo, ecc. in background / primo piano con spostamento relativo / assoluto) prima dei parametri X e Y.

Quindi tutto quello che devo fare è inviare un carico di caratteri al controller VDU. i valori terminati in punto e virgola sono 16 bit. gli altri sono a 8 bit. Il numero totale di byte inviati al controller VDU è 91 , anche se questo di per sé non si qualificherebbe come risposta perché da quel momento la dimensione è hardcoded.

Il posto ovvio per l'origine è il centro del cerchio, ma in realtà ci sono più comandi coinvolti nella produzione delle barre. Quindi ho spostato l'origine in basso di 1,5 nella parte inferiore della barra inferiore, il che riduce il numero di frazioni e numeri negativi richiesti. Rimane sulla linea verticale con il centro del cerchio, il che è importante perché la linea E inizia da questa linea verticale.

In realtà, ho dovuto calcolare solo 3 numeri dal disegno: l'angolo interno superiore della forma C (5 cos 40, 5 sin 40 + 1.5) = (3.8302,3.1394 + 1.5) = circa (12 / 3.1, 4.6) e il gradiente della linea E: x / y = 3.8302 / (6 + 3.1394) = 0.4157 = circa 1 / 2.4

Dato che ho solo la versione di valutazione gratuita (interpretata), prendo l'altezza del simbolo come input dell'utente. Se acquisti la versione completa (29.99GBP) puoi compilare e quindi leggere la riga di comando con w=VAL(@cmd$)/12.

Codice Ungolfed

Nel codice golf, c'è solo un'istruzione VDU, ma nel codice non golf l'ho suddiviso in diversi per chiarezza. Inoltre, poiché la BBC di base è un po 'endian, la combinazione p,0,può essere giocata a golf p;ma l'ho lasciata incolume per chiarezza.

  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)

inserisci qui la descrizione dell'immagine


BBC BASIC. Eccezionale! Questo mi riporta indietro di quasi trent'anni!
Tom Chantler,

1
@Dommer BBC Basic è stato rilasciato per la prima volta nel 1981, oltre 20 anni prima della stampa delle prime banconote in euro (2002.) Quindi questo è l'unico modo in cui potresti aver disegnato un grande simbolo dell'euro su una macchina del genere! In alternativa si potrebbe ridefinire caratteri ASCII nad un simbolo di euro con un bitmap 8x8, in questo modo: VDU 23,n,30,33,120,32,120,30,30,0. Secondo Wikipedia, BBC Basic è ancora in fase di sviluppo, principalmente per dispositivi mobili.
Level River St,

Infatti! Penso che abbiamo ottenuto il nostro nel 1984. Ricordo di aver disegnato sprite fantastici su carta millimetrata e poi di aver elaborato le loro rappresentazioni binarie, come sono sicuro che hai fatto anche tu. Su quale nota, ho appena estratto a mano il tuo simbolo dell'euro. È molto buono una volta che l'errore di battitura è stato risolto e il valore antepenultimate è cambiato da 30 a 33. Vedo dal tuo profilo che hai anche usato LOGO che mi riporta ai miei giorni di scuola elementare. È bello sapere che BBC Basic è ancora in uso oggi. Se fosse abbastanza buono per noi ...
Tom Chantler,

Solo per aggiungere, la bitmap BBC Basic 8x8 potrebbe essere resa più "corsiva" (in linea con il logo più grande) cambiandola in VDU 23,n,30,33,124,32,120,33,30,0. Grazie per il viaggio nella 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>

Mentre questo utilizza solo cose SVG, si basa fortemente su analisi HTML lassiste e deve essere servito come HTML. SVG rigoroso richiederebbe molti più byte.

Provalo!


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

1
Sì, stavo pensando in coordinate PostScript, che sono il contrario! Sostituito l'asse y ora.
Thomas W.

3
Lavora per me (Chrome 34) anche senza il finale </svg>. Oh, e quel markup è orribile . Spero ti vergogni di te stesso. ;-)
Ilmari Karonen

2
@IlmariKaronen Io sono vergogno ;-). Di solito preferisco persino XHTML pulito rispetto a HTML. Ad ogni modo, se lascio il trailing </svg>, vedo solo il cerchio e non le linee (in un file autonomo, non all'interno del markup JS Bin potrebbe aggiungere).
Thomas W.

1
È possibile ridurre evt.targeta this, risparmiando 6 byte.
Spazzolino da denti

17

CSS, 512 494 byte

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

Non la risposta più piccola di un bel po ', ma la più piccola che potessi ottenere anche quando convocavo tutta la mia css-minification-fu

Avvertenze:

Il codice sopra con tutte le "px" rimosse funziona in Firefox e IE ma non in Chrome e Safari che sono più agitati sulle loro unità :)

Ho anche dovuto aggiungere nuovamente i px per far funzionare jsfiddle:

http://jsfiddle.net/9A3J9/

100: inserisci qui la descrizione dell'immagine

200: inserisci qui la descrizione dell'immagine

codice ungolfed:

 <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
Wow! Quel skewXtrucco potrebbe ottenere il mio voto da solo.
arte

è esattamente quello che ho iniziato a scrivere ieri. falsi punti a te allora
Einacio

l'impostazione di un ID sul div e l'utilizzo getElementByIdriduce 6 caratteri. e poi puoi usare l'id nel css per ridurne altri 2
Einacio

inoltre, il ptag di chiusura può essere omesso se non ci sono più contenuti dopo (per specifica). e verificherei anche se i browser chiudessero automaticamente div(anche se proibito dalle specifiche, ha funzionato nel violino su FF)
Einacio

@einacio ottimi suggerimenti! siamo scesi a 494 B. grazie :)
caitriona

16

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

Versione completamente giocata a golf con token binari:

$ 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

Scarica il file binario codificato a mano

Versione 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

Salva come euro.psed esegui con Ghostscript come

gs -dh=80 euro.ps

Simbolo dell'euro, 80 punti, reso da Ghostscript

gs -dh=20 euro.ps

Simbolo dell'euro, 20 punti, reso da Ghostscript

Poiché non esiste un pixel in PostScript, l'altezza viene invece interpretata in punti. Ho calcolato +6 per l'interruttore sulla riga di comando.


1
Meh, come dovrei battere la dimensione del file compilato. : D ... Come funzionano quei token binari? Non è sostanzialmente come compilare il codice a mano?
Martin Ender,

DCla linea non taglia correttamente le strisce orizzontali. La perpendicolare verso il basso da Dnon taglia la forma del 'cerchio' nel posto giusto, in basso :(. Sembra che lo stesso sia con la tua risposta SVG.
user2846289

+ I bordi a sinistra delle strisce orizzontali non sono allineati.
user2846289

@ m.buettner I nomi PostScript più importanti possono essere espressi usando una sequenza di due byte. Non si sta davvero compilando come se si compilasse un programma C o Java. Passerà attraverso lo stesso processo di analisi di qualsiasi programma PostScript. Se guardi il hexdump o apri il file binario in un editor di testo puoi vedere che è quasi uguale alla versione ASCII, ma la maggior parte dei nomi sono stati sostituiti da una sequenza di due byte.
Thomas W.

@VadimR Hai un occhio acuto! Immagino di aver scambiato troppa precisione per brevità (arrotondamento troppo aggressivo). Potrei dover aggiungere alcune cifre.
Thomas W.

13

Python - tartaruga - 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 % 100e python % 500rispettivamente:


3
Puoi salvare molti personaggi eliminando alcune delle scorciatoie che definisci. Usi solo cuna volta, quindi in realtà sarebbe più breve invocarlo come math.cos, e penso che ci siano probabilmente altri che potresti non abituare a ridurre la lunghezza complessiva.
AJMansfield,

1
Puoi radere via sei caratteri usando from math import *quindi facendo cadere i math.prefissi.
alexwlchan,

3
Definisci u=t.circle, ma dopo poche righe hai dimenticato di scambiare una t.circle(...)chiamata.
Alconja,

2
Tartaruga per disegnare €. Che momento di essere vivi.
Nit

13

PHP, 432 435 367 356 334 byte

(Modifica: apparentemente IJ e GH dovrebbero essere paralleli a BCDE. Ora risolti)

Questo script genera un'immagine SVG, ma lo servirà come text/htmlimpostazione predefinita. Penso che la maggior parte dei browser lo tratterà come una pagina Web HTML contenente un'immagine SVG incorporata. Sembra funzionare bene per me comunque.

L'altezza dell'immagine viene passata come parametro della stringa di query. (Nota: il conteggio dei byte include un carattere di nuova riga alla fine della riga 3, che è necessario affinché questo funzioni correttamente).

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

Versione aggiornata ( 367 356 334 byte):

preg_replace_callback()è un modo molto più efficiente di ridimensionare i valori numerici. Questo codice produce lo stesso output della versione originale. (Modifica: ulteriori riduzioni grazie 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>');

Produzione:

euro.php? x = 60

inserisci qui la descrizione dell'immagine

euro.php? x = 200

inserisci qui la descrizione dell'immagine


widthe heightnon sono necessari qui. E devi specificare xmlnsche deve essere visualizzato nella maggior parte dei browser (testato Firefox e Chrome; anche con il tipo MIME corretto di SVG inviato, entrambi lo rendono come XML, non SVG). ideone.com/JkqVL0 (rimuovi il valore x hardcoded per una soluzione di 369 byte)
Tim S.

@TimS. No, non funzionerà correttamente se si esegue il codice PHP su ideone e si copiano i risultati in un file SVG. Ma se effettivamente pubblichi lo script su un server web, PHP (per impostazione predefinita) fornirà i risultati con un tipo MIME di text/html. Chrome e Firefox non hanno problemi con questo, anche se ho appena scoperto che Safari è un po 'più pernicioso.
ossifrage schifoso

Ah! Ora vedo il trucco: text/htmlcon <svg>...viene interpretato come un file HTML con un svgelemento, che non ha bisogno del xmlnsma ha bisogno widthe height. Stavo pensando in termini di un file SVG, che ha bisogno del giusto xmlns. Il tuo codice va bene.
Tim S.

sul secondo codice, se usi 24 invece di 12, non riduresti 1 byte su ciascun valore x.5?
Einacio

@Einacio Sì! :-) Sfortunatamente guadagno anche un byte ad ogni occorrenza di "5", "6", "7" e "8". La lunghezza risultante è esattamente la stessa.
ossifrage schifoso

9

sh, 8604

Penso che qualcuno probabilmente possa fare di meglio, ma iniziamo.

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

3
Non rientrerebbe nella scappatoia standard di codifica hard dell'output?
user80551

4
Questo rientra sicuramente nella categoria "scappatoie standard".
Igglyboo,

2
@Igglyboo: come?
Ry,

18
Questa è una risposta molto lunga per una sfida di code-golf. :-)
AL

2
@Igglyboo Disagree. .svg è basato su vettori quindi può essere ridimensionato all'infinito - ed è tramite il $1parametro input.
Digital Trauma,

9

HTML5, 395

==> Provalo online

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

Il codice è compresso usando JSCrush .

Ecco il codice non compresso:

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

Questo può essere ridotto a 378 giocando a golf la fonte prima di applicare la cotta: jsfiddle.net/_nderscore/EUBG8
nderscore

Questo è JavaScript, non HTML. Sono stanco di non capire come funziona.
Tartaruga,

1
Sì, perché il <canvas>tag è JavaScript ... HTML5 è spesso usato per non scrivere HTML / CSS / JS. Non che la gente non lo capisca, i programmatori sono spesso pigri (almeno lo sono). Il tuo commento sembra un po 'duro.
Michael M.,

@Mig Pensavo che HTML + CSS + JS fosse chiamato DHTML?
Kinokijuf,

6

PostScript, 270

7 7 tradurre
/ L {} def lineto
/ 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
riempimento del percorso ravvicinato

Questo definisce semplicemente il contorno aggiungendo elementi del percorso in base alle coordinate che ho calcolato con l'aiuto di GeoGebra e quindi riempie il contorno.

Ho salvato alcuni caratteri aggiungendo scorciatoie per lineto( /l{lineto}def) e l'origine del cerchio ( /o{0 0}def).

Per specificare una dimensione diversa, aggiungere un comando del modulo dopo la prima riga vuota.height width scale

Se eseguito da solo, disegna il simbolo dell'euro nell'angolo in basso a sinistra della pagina con le dimensioni predefinite della pagina. Basta salvarlo come anything.pse visualizzarlo con un visualizzatore di documenti.

Ecco un'immagine delle dimensioni predefinite, rasterizzata a poco più di 90 pixel per pollice:

dimensione predefinita a 90 ppi

A 4x dimensioni:

4x dimensioni a 90 ppi

Puoi anche scaricare l'originale per il tuo piacere di visione.


2
Legge qualche argomento per definire la dimensione del segno?
AL

@ n.1 oh, scusa, non ho letto quella parte delle specifiche. Lo riparerò dopo cena.
AJMansfield,

Aggiungi uno screenshot del file renderizzato.
AL

1
@ n.1 Ho aggiunto immagini.
AJMansfield,

5

PHP (senza SVG), 628 597 byte

Grazie ad AsksAnyway per la scorciatoia per le funzioni (ad es $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);

Chiama file.php?h=200dal tuo browser per vedere l'immagine

Le coordinate si basano su misurazioni eseguite con GIMP

100 pixel:

€ 100 pixel

200 pixel:

€ 200 pixel

Livelli aggiunti passo dopo passo:

# GIF

Codice non golf (con le frazioni, il codice golf ha valori arrotondati)

<?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 + strumenti della riga di comando di Linux, 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

Questa è la stessa tecnica della risposta di @minitech . Ma i dati .svg provengono da qui, che è molto più breve: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick converte i dati vettoriali in dati .png nella scala richiesta e convoglia in xview.

Uscita per ./euro.sh 30:

inserisci qui la descrizione dell'immagine

Uscita per ./euro.sh 300:

inserisci qui la descrizione dell'immagine


7
Perché la versione grande non è completa?
Cole Johnson,

2
come si possono produrre immagini su stdin?
phuclv,

@ LưuVĩnhPhúc Non è possibile "trasmettere" all'input standard. Sta solo inviando un sacco di personaggi a base64, che è un programma, che lo decompone in token binari (che rappresentano un file svg, a quanto pare), con cui fa più cose.
tomsmeding

2
@tomsmeding Credo che fossero confusi dal titolo della finestra "stdin".
mniip,

@ColeJohnson Penso che nessuna delle due versioni sia stata riempita, ma nella versione piccola le linee interne ed esterne sono rese abbastanza vicine da sembrare solide. Detto questo, c'è chiaramente qualcosa di strano aliasing in corso con ImageMagick che non capisco completamente - ma penso che l'immagine generata sia abbastanza vicina per il code-golf ;-)
Digital Trauma

2

POV-Ray (370 byte)

Non sono riuscito a capire come eseguire il rendering della stessa area verticale e preservare le proporzioni allo stesso tempo, quindi ho deciso di scegliere l'altezza corretta e spetta all'utente il rendering solo in 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}}

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

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


2

Elaborazione, 232 byte

L'elaborazione non consente davvero di accettare argomenti da riga di comando poiché è così specializzato per disegnare, ma la mia funzione accetta il parametro come altezza per compensare. Le coordinate sono codificate / approssimate dall'immagine sopra e l'intera tela viene ridimensionata in base al parametro di input per ottenere disegni di dimensioni arbitrarie.

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 + intero programma

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

Produzione

Elaborazione di schizzi Euro


1
Puoi giocare a golf usando 1invece di OPENcambiare il 255in backgrounde fillchiama a-1
Kritixi Lithos
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.