Desenhe o sinal de €


61

O objetivo é produzir ou exibir uma imagem com um sinal de € (euro) de acordo com as seguintes especificações (ignorando a borda do sinal).

Sinal de €

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

Regras:

  • O programa / script deve ter a altura do sinal em pixels como argumento (o espaço vazio ao redor do sinal é opcional)
  • O sinal não pode ser desenhado como ou a partir de um personagem, diretamente (é proibido printo na imagem) ou indiretamente (cálculo 8364, em seguida, exibi-lo em uma página HTML)
  • A saída não precisa ser salva em nenhum arquivo, ela pode ser exibida e mostrada como uma captura de tela
  • “Brechas” padrão são proibidas
  • O código mais curto vence

7
Complicado! É hora de revisar minha geometria / trigonometria. Vejo algumas coordenadas bastante difíceis de deduzir.
Michael M.

5
Eu tive que procurar "facultativo"
Digital Trauma

2
Estou realmente esperando por uma resposta LaTeX + TikZ :)
Cole Johnson

12
Sem o euro, este problema não existe, assim, mais uma vez demonstrando a verdade de "Mo problemas dinheiro mo"
Thomas Johnson

11
Não sei o que é tipograficamente utilizável e não sou tipógrafo. Se você quiser um sinal de € perfeito, use o caractere de €. Mas esse não é o objetivo desta pergunta. Eu não esperava imagens perfeitas em pixels. Sinta-se à vontade para adicionar outra pergunta com regras diferentes, se você não gostar desta.
AL

Respostas:


22

PostScript / GhostScript, 100

(96 para o programa, 4 para o prefixo da chave da linha de comando)

Totalmente jogado e tokenizado à mão:

$ 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

Você pode obter uma cópia aqui , para sua própria visualização.

Depois de ver a resposta de @ ThomasW e considerar meu programa com cuidado, percebi que poderia fazê-lo ainda melhor.

A versão tokenizada é equivalente a isso:

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

Uma explicação das otimizações:

Primeiro, converti minha primeira solução em uma união de alguns subcaminhos mais simples, em vez de um caminho que circunscreve a coisa toda. Peguei emprestado o método de Thomas de inserir um parâmetro, que é muito melhor do que o que eu tinha.

Então multipliquei todas as coordenadas por 10 e arredondei tudo para me fornecer apenas coordenadas inteiras. Também arredondei os ângulos e converti os dois grandes em ângulos negativos equivalentes. Isso convenientemente faz com que cada número fique entre -128 e 127.

E então eu tokenizei tudo . Cada operador pode ser representado com uma sequência de dois bytes cada. E como cada número pode ser representado por um único byte assinado, cada um também se torna apenas dois bytes. A única parte com a qual não pude fazer isso foi hno início, mas também são apenas dois bytes, apenas o hespaço e um espaço após.

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


Novo: versões ainda mais curtas!

Usando caminhos de usuário codificados, consegui reduzir o tamanho do programa em alguns bytes. Cada um desses programas é equivalente ao primeiro, produzindo saída idêntica:

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

O que 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 uma solução confusa um pouco contra-intuitiva salva mais um caractere, por apenas 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

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

11
Ótimo trabalho! Acho que vou ter que aprender tudo sobre tokens binários.
Thomas W.

@ThomasW. Embora eu ainda não tenha terminado completamente; Ainda estou lendo a documentação cordas caminho codificado ...
AJMansfield

Você não precisa do espaço depois, hporque os tokens binários são auto-delimitantes. BTW, como você codificou? Eu fiz isso com um editor hexadecimal padrão, o que é tedioso.
Thomas W.

2
Os arquivos tokenizados @ n.1 funcionam exatamente da mesma maneira que os arquivos PostScript comuns, e você pode até combinar tokens binários e PostScript de texto sem formatação padrão no mesmo arquivo. Cada token binário corresponde diretamente a um operador ou outro objeto, para que você possa substituir ou inserir operações facilmente, ou mesmo copiar trechos para outro programa. Os detalhes exatos sobre o formulário tokenizado podem ser encontrados no Manual de referência da linguagem PostScript (o livro vermelho) na seção 3.12. Caminhos de usuário codificados são descritos em 4.6.2.
AJMansfield

11
@ n.1 Eu usei um editor hexadecimal para escrever o arquivo, por esse motivo. Os bytes do delimitador de token normalmente correspondem aos caracteres de controle ISO-latin-1 e outra codificação de largura fixa, mas se o editor estiver interpretando-o em UTF-8 ou outra codificação de largura variável, você obterá coisas assim, o mesmo com qualquer outro arquivo que inclui dados binários.
AJMansfield

50

Mathematica, 193 183 177 173 173 169 166 bytes

Yay, matemática! Estou tramando a região que satisfaz um certo 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->#]&

O uso é e[height], por exemplo e[100]:

insira a descrição da imagem aqui

Ou e[200]:

insira a descrição da imagem aqui

Você pode notar que as bordas mais nítidas são ligeiramente arredondadas. Isso ocorre porque a região só pode ser plotada amostrando os pontos no espaço, e o Mathematica não mostra cada pixel por padrão. A resolução de amostragem pode ser aumentada adicionando outra opção PlotPoints->#(que usa uma amostra por pixel), que adiciona 14 caracteres . Eu não recomendo executá-lo com essa opção, porque aumenta significativamente o tempo de execução e mal aumenta o apelo visual além #/4disso. Portanto, (após a aprovação do PO), ele não é incluído na pontuação.

Aqui está uma versão ligeiramente não-destruída:

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

Observe que na versão golfed, escalamos o sistema de coordenadas por um fator de 2 para evitar os .5s, mas acontece que a contagem de caracteres é realmente idêntica.

Aqui está uma explicação de como eu elaborei a fórmula. Dividi a forma em duas regiões. Um contém o anel e as listras e é cortado à direita com a BCDEinclinação e à esquerda com as inclinações IJe GH(mais sobre isso mais tarde). O outro contém o mesmo anel, mas é simplesmente cortado na coordenada x do ponto D. As condições para as duas regiões são combinadas com ||, que atua como uma união definida aqui.

O anel é definido apenas como 5 < r < 6, onde restá a distância da origem. é mais fácil trabalhar com isso ( x²+y²), então estou usando 25 < x² + y² < 36para obter todos os pontos no ringue.

As listras estão entre ±.5e ±1.5. Podemos lidar com ambas as faixas ao mesmo tempo, usando o módulo de y , para que as faixas (de comprimento infinito) apenas cumpram .5 < |y| < 1.5. Mais uma vez, para levar a união das listras e do anel, estou apenas usando ||.

O interessante é provavelmente como obter as "máscaras". O ponto Dtem uma coordenada x de 5 cos 40°, então a máscara cuidando da borda inferior (combinada apenas com o anel) é justa x < 5 cos 40°. Isso pode ser aplicado via interseção de conjunto, que se traduz &&em lógica.

As outras máscaras são a parte realmente complicada. Primeiro, vamos pegar a inclinação de BCDE. Podemos facilmente construir pontos Ce D, como (0, -6)e 5 (cos 40°, sin 40°), respectivamente. O vetor apontando ao longo da linha é então apenas D - C = (5 cos 40°, 5 sin 40° + 6). Para aplicar a máscara à direita, só preciso descobrir se existe um ponto à esquerda ou à direita dessa linha (vamos chamar o vetor de linha p). Eu posso descobrir isso levando o vetor do Cmeu ponto de interesse e projetando-o em um vetor perpendicular a p. O sinal da projeção me dirá do lado em que o assunto está. A obtenção do vetor perpendicular é bastante simples em 2D: vire as coordenadas e inverta o sinal de uma delas. Essa é a variável dno meu código:(-5 sin 40° - 6, 5 cos 40°). O vetor de Cum ponto de interesse q = (x, y)é q - C = (x, y + 6). A projeção é apenas o produto escalar (ou ponto) entre qe d. O jeito que eu escolhi disso acontece para apontar para a esquerda, então eu quero d.(q-C) > 0. Esta condição aplica a máscara à direita.

Para a máscara da mão esquerda, posso usar basicamente a mesma idéia. A inclinação é a mesma e, portanto, é d. Eu só preciso deslocar meu ponto dos cantos inferior esquerdo das listras em vez de C. Aquelas possuem coordenadas (-7.5, 0.5)(faixa superior) e (-7.5, -1.5)(faixa inferior). Portanto, isso exigiria duas regras independentes para as duas faixas. No entanto, observe que todos os pontos afetados pela máscara inferior estão na faixa inferior e, portanto, têm y negativo . E todos os pontos afetados pela máscara superior têm y positivo . Então, eu posso simplesmente mudar meu deslocamento usando o Sign[y]que é 1positivo e -1negativo y. Então meu ponto de deslocamento se torna(-7.5, -0.5 + Sign[y]). Caso contrário, a máscara funcionará exatamente como a máscara da direita. Claro, desta vez a projeção precisa ser negativa. Então, ingênuo, seria algo assim RH-projection > 0 && LH-projection < 0(que também é o que eu originalmente tinha no código). Mas podemos encurtar isso, porque multiplicar um número positivo e um negativo tem que dar um número negativo, então é apenas RH * LH < 0(onde RHe quais LHsão as respectivas projeções).

É isso aí. Juntar tudo leva à seguinte estrutura lógica:

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

Só para esclarecer, as coordenadas na minha explicação se referem ao diagrama de construção dado no desafio. Como mencionado acima, meu código multiplica todos eles por 2- eu o alterei para salvar bytes, mas a contagem de bytes é realmente idêntica e não me incomodei em reverter a alteração novamente. Também números inteiros parecem melhores.


11
Sou relativamente novo no Mathematica, por isso gostaria de receber alguns comentários sobre o seu código!
Thomas W.

2
@ThomasW. bem, o material real do Mathematica é apenas uma chamada à RegionPlotqual simplesmente cores em todos os pontos do espaço que satisfazem uma determinada condição. Assim, dar-lhe- x^2+y^2<1á um círculo unitário. Vou adicionar uma explicação para a matemática real (mais tarde esta noite).
Martin Ender

11
Qual é o comprimento do código sem arestas arredondadas? Acho que você tem o código mais curto no momento, mas não posso aceitar sua resposta com os cantos arredondados, seria injusto com as outras respostas que não têm cantos arredondados. Por favor, siga rigorosamente as especificações. Obrigado
AL

@ n.1 A menos que você esteja desqualificando a resposta PostScript de Thomas W., por ser binária ou por ser muito agressiva, sua resposta é definitivamente mais curta. No entanto, corrigir a resolução leva 14 caracteres, então minha resposta ainda é a mais curta depois da dele. Eu vou editar.
Martin Ender

11
@ThomasW. ai está!
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;

faça o download do emulador em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

No básico da BBC, todos os gráficos são manipulados em baixo nível usando caracteres de controle ASCII específicos da máquina (mas alguns comandos de alto nível também estão disponíveis para os comuns por conveniência.) Os usados ​​aqui são 22 (alterar modo de exibição) 29 (alterar origem) e 25, equivalente à instrução PLOT, que usa um parâmetro de ação adicional (desenhar linha, círculo, triângulo, etc. em segundo plano / primeiro plano com movimento relativo / absoluto) antes dos parâmetros X e Y.

Então, tudo o que tenho a fazer é enviar uma carga de caracteres para o controlador VDU. valores terminados em ponto e vírgula são 16 bits. outros são 8 bits. O número total de bytes enviados ao controlador VDU é 91 , embora isso por si só não se qualifique como resposta, porque nesse estágio o tamanho é codificado.

O local óbvio para a origem é o centro do círculo, mas na verdade existem mais comandos envolvidos na produção das barras. Então mudei a origem para 1,5 na parte inferior da barra inferior, o que reduz o número de frações e números negativos necessários. Ele permanece na linha vertical com o centro do círculo, o que é importante porque a linha E começa a partir dessa linha vertical.

Na verdade, eu só tinha que calcular 3 números do desenho: o canto interno superior da forma C (5 cos 40, 5 sin 40 + 1,5) = (3.8302,3.1394 + 1.5) = aprox (12 / 3.1, 4.6) e o gradiente da linha E: x / y = 3.8302 / (6 + 3.1394) = 0.4157 = aproximadamente 1 / 2.4

Como só tenho a versão de avaliação gratuita (interpretada), tomo a altura do símbolo como entrada do usuário. Se você comprar a versão completa (29,99 GBP), poderá compilar e ler a linha de comando w=VAL(@cmd$)/12.

Código ungolfed

No código de golfe, há apenas uma declaração VDU, mas no código não-destruído, eu a decomponho em várias para maior clareza. Além disso, como o básico da BBC é pouco endian, a combinação p,0,pode ser aproveitada, p;mas eu a deixei sem limites para maior clareza.

  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)

insira a descrição da imagem aqui


BBC BASIC. Impressionante! Isso me leva de volta quase trinta anos!
Tom Chantler

11
O @Dommer BBC Basic foi lançado pela primeira vez em 1981, mais de 20 anos antes da impressão das primeiras notas em euro (2002). Portanto, esta é a única maneira de desenhar um grande sinal em uma máquina! Alternativamente, você pode redefinir caracteres ASCII na um símbolo do euro com um bitmap 8x8, como este: VDU 23,n,30,33,120,32,120,30,30,0. Segundo a Wikipedia, o BBC Basic ainda está sendo desenvolvido, principalmente para dispositivos móveis.
Level River St

De fato! Acho que conseguimos o nosso em 1984. Lembro-me de desenhar sprites legais em papel milimetrado e depois elaborar suas representações binárias, como tenho certeza de que você também fez. Na mesma nota, acabei de desenhar seu símbolo do Euro à mão. É muito bom quando o erro de digitação é corrigido e o valor antepenúltimo é alterado de 30 para 33. Vejo no seu perfil que você também usou o LOGO, o que me leva de volta aos meus dias de escola primária. É ótimo saber que o BBC Basic ainda está em uso hoje. Se era bom o suficiente para nós ...
Tom Chantler

Apenas para adicionar, o bitmap da BBC Basic 8x8 pode ficar mais "itálico" (de acordo com o logotipo maior) alterando-o para VDU 23,n,30,33,124,32,120,33,30,0. Obrigado pela viagem pela estrada da memória.
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>

Embora esteja usando apenas material SVG, ele depende muito da análise de HTML negligente e deve ser exibido como HTML. SVG estrito exigiria muito mais bytes.

Tente!


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

11
Sim, eu estava pensando nas coordenadas PostScript, que são o contrário! Trocou o eixo y agora.
Thomas W.

3
Trabalhe para mim (Chrome 34) mesmo sem o final </svg>. Ah, e essa marcação é horrível . Espero que você tenha vergonha de si mesmo. ;-)
Ilmari Karonen

2
@IlmariKaronen Eu estou envergonhado ;-). Normalmente, prefiro XHTML limpo a HTML. De qualquer forma, se eu deixar de fora a trilha </svg>, só vejo o círculo e não as linhas (em um arquivo independente, não dentro da marcação que JS Bin pode adicionar).
Thomas W.

11
Você pode encurtar evt.targetpara this, economizando 6 bytes.
Escova de dentes

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>

Não é a menor resposta por um bom tempo, mas o menor que eu conseguia, mesmo quando convocava todo o meu css-minification-fu

Ressalvas:

O código acima, com todos os 'px' removidos, funciona no Firefox e IE, mas não no Chrome e Safari, que são mais confusos sobre suas unidades :)

Eu também tive que adicionar novamente os px's para fazer o jsfiddle funcionar:

http://jsfiddle.net/9A3J9/

100: insira a descrição da imagem aqui

200: insira a descrição da imagem aqui

código 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
Uau! Esse skewXtruque pode levar o meu voto sozinho.
manatwork

Foi exatamente isso que comecei a escrever ontem. pontos falsos para você então
Einacio 8/14

definir um ID na div e usar getElementByIdreduz 6 caracteres. e então você pode usar o id no css para reduzir mais 2
Einacio

Além disso, a ptag de fechamento pode ser omitida se não houver mais conteúdo após ela (por especificação). e eu iria verificar também se os navegadores autoclose o div(apesar proibido pela especificação, ele trabalhou no violino em FF)
Einacio

@einacio ótimas sugestões! nós estamos para baixo a 494 B. obrigado :)
Caitriona

16

PostScript + Ghostscript 137 + 6 = 143 (binário), 209 + 6 = 215 bytes

Versão totalmente golfe com tokens binários:

$ 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

Baixar arquivo binário codificado manualmente

Versão 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

Salve como euro.pse execute com o Ghostscript como

gs -dh=80 euro.ps

Sinal de euro, 80 pontos, processado por Ghostscript

gs -dh=20 euro.ps

Sinal de euro, 20 pontos, processado por Ghostscript

Como não existe um pixel no PostScript, essa altura é interpretada em pontos. Calculei +6 para o comutador na linha de comando.


11
Meh, como devo vencer o tamanho do arquivo compilado. : D ... Como esses tokens binários funcionam? Não é basicamente como compilar o código manualmente?
Martin Ender

DCa linha não corta listras horizontais corretamente. Perpendicular para baixo de D. Não corta forma 'círculo' no lugar certo, menor :( Parece mesmo é com a sua resposta SVG também.
user2846289

+ As bordas esquerdas das faixas horizontais não estão alinhadas.
User2846289

@ m.buettner Os nomes PostScript mais importantes podem ser expressos usando uma sequência de dois bytes. Isso não é realmente compilado, como você compilaria um programa C ou Java. Ele passará pelo mesmo processo de análise que qualquer programa PostScript. Se você olhar para o hexdump ou abrir o arquivo binário em um editor de texto, poderá ver que é quase o mesmo que a versão ASCII, mas a maioria dos nomes foi substituída por uma sequência de dois bytes.
Thomas W.

@VadimR Você tem um olho afiado! Eu acho que troquei muito da precisão por brevidade (arredondando muito agressivamente). Talvez eu precise adicionar alguns dígitos.
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 % 500respectivamente:


3
Você pode salvar muitos caracteres se livrando de alguns dos atalhos definidos. Você usa apenas cuma vez, portanto seria mais curto invocá-lo como math.cos, e acho que provavelmente há outros que você não poderia abreviar para reduzir o comprimento total.
AJMansfield

11
Você pode cortar seis caracteres usando from math import *e soltando os math.prefixos.
Alexwlchan

3
Você define u=t.circle, mas algumas linhas depois se esquece de trocar uma t.circle(...)chamada.
Alconja

2
Tartaruga para desenhar o €. Que hora de estar vivo.
Nit

13

PHP, 432 435 367 356 334 bytes

(Editar: Aparentemente, IJ e GH devem ser paralelos ao BCDE. Agora corrigidos)

Esse script gera uma imagem SVG, mas a servirá como text/htmlpadrão. Eu acho que a maioria dos navegadores tratará isso como uma página da Web HTML contendo uma imagem SVG incorporada. Parece funcionar bem para mim de qualquer maneira.

A altura da imagem é passada como um parâmetro de sequência de caracteres de consulta. (Nota: a contagem de bytes inclui um caractere de nova linha no final da linha 3, necessário para que isso funcione corretamente).

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

Versão atualizada ( 367 356 334 bytes):

preg_replace_callback()é uma maneira muito mais eficiente de dimensionar os valores numéricos. Este código produz a mesma saída que a versão original. (Editar: Reduções adicionais graças 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>');

Resultado:

euro.php? x = 60

insira a descrição da imagem aqui

euro.php? x = 200

insira a descrição da imagem aqui


widthe heightsão desnecessários aqui. E você precisa especificar a xmlnsrenderização na maioria dos navegadores (Firefox e Chrome testados; mesmo com o tipo MIME adequado do SVG enviado, ambos o renderizam como XML, não SVG). ideone.com/JkqVL0 (remover o valor codificado x para uma solução de 369 bytes)
Tim S.

@TimS. Não, não funcionará corretamente se você executar o código PHP em ideone e copiar os resultados em um arquivo SVG. Mas se você realmente publicar o script em um servidor web, o PHP (por padrão) exibirá os resultados com um tipo MIME de text/html. Chrome e Firefox não têm problemas com isso, embora eu tenha acabado de descobrir que o Safari é um pouco mais exigente.
Ossifrage melindroso

Ah! Eu vejo o truque agora: text/htmlwith <svg>...é interpretado como um arquivo HTML com um svgelemento, que não precisa do xmlnsmas precisa widthe height. Eu estava pensando em termos de um arquivo SVG, que precisa do adequado xmlns. Seu código está bom.
Tim S.

no segundo código, se você usar 24 em vez de 12, não reduziria 1 byte em cada valor x.5?
Einacio

@Einacio Yes! :-) Infelizmente, também ganho um byte em cada ocorrência de "5", "6", "7" e "8". O comprimento resultante é exatamente o mesmo.
Ossifrage melindroso

9

sh, 8604

Eu acho que alguém provavelmente pode fazer melhor, mas vamos começar com isso.

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

3
Isso não estaria sob a brecha padrão de codificar a saída?
User80551

4
Definitivamente, isso se enquadra na categoria "brechas padrão".
Igglyboo

2
@Igglyboo: Como assim?
Ry-

18
Esta é uma resposta muito longa para um desafio de código-golfe. :-)
AL

2
@Igglyboo Discordo. .svg é baseado em vetor, portanto pode ser escalado infinitamente - e é pelo $1parâmetro de entrada.
Digital Trauma

9

HTML5, 395

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

O código é compactado usando JSCrush .

Aqui está o código descompactado:

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

Isso pode ser reduzida a 378 por golfe a fonte antes de aplicar paixão: jsfiddle.net/_nderscore/EUBG8
nderscore

Isso é JavaScript, não HTML. Estou cansado de as pessoas não entenderem como isso funciona.
Tortoise

11
Sim, porque a <canvas>tag é JavaScript ... O HTML5 geralmente é usado para não gravar HTML / CSS / JS. Não que as pessoas não entendam, os programadores geralmente são preguiçosos (pelo menos eu sou). Seu comentário parece um pouco duro.
Michael M.

@IG Pensei que HTML + CSS + JS era chamado DHTML?
Kinokijuf 22/10

6

PostScript, 270

7 7 traduzir
/ l {lineto} def
/ o {0 0} def
o 6 44,85 165,52 arco
-7,08 1,5 l
-7,5 0,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 0,5 l
3,12 1,5 l
o 5 162,54 40 arcn
preenchimento de caminho próximo

Isso apenas define o contorno acrescentando elementos do caminho com base nas coordenadas que calculei com a ajuda do GeoGebra e, em seguida, preenche o contorno.

Salvei alguns caracteres adicionando atalhos para lineto( /l{lineto}def) e a origem do círculo ( /o{0 0}def).

Para especificar um tamanho diferente, adicione um comando do formulário após a primeira linha em branco.height width scale

Quando executado por conta própria, isso desenha o sinal de euro no canto inferior esquerdo da página com o tamanho padrão da página. Apenas salve-o como anything.pse visualize-o com um visualizador de documentos.

Aqui está uma imagem dela no tamanho padrão, rasterizada para pouco mais de 90 pixels por polegada:

tamanho padrão em 90 ppi

No tamanho 4x:

Tamanho 4x a 90 ppi

Você também pode baixar o original para seu próprio prazer.


2
Ele lê algum argumento para definir o tamanho do sinal?
AL

@ n.1 oh, desculpe, eu não li essa parte das especificações. Vou consertar depois do jantar.
AJMansfield

Por favor, adicione uma captura de tela do arquivo renderizado.
AL

11
@ n.1 Adicionei imagens.
AJMansfield

5

PHP (sem SVG), 628 597 bytes

Obrigado a AsksAnyway pelo bom atalho para funções (por exemplo $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);

Ligue file.php?h=200do seu navegador para ver a imagem

As coordenadas são baseadas em medições realizadas com o GIMP

100 pixels:

€ 100 pixels

200 pixels:

€ 200 pixels

Camadas adicionadas passo a passo:

# GIF

Código não golfe (com frações, o código golfado possui valores arredondados)

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

Ferramentas de linha de comando 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

Essa é a mesma técnica da resposta da @ minitech . Mas os dados .svg vêm daqui, que são muito mais curtos: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . O ImageMagick converte os dados vetoriais em dados .png na escala solicitada e os tubos em xview.

Saída para ./euro.sh 30:

insira a descrição da imagem aqui

Saída para ./euro.sh 300:

insira a descrição da imagem aqui


7
Por que a versão grande não é preenchida?
Cole Johnson

2
como você pode gerar imagens para stdin?
Phuclv

@ LưuVĩnhPhúc Você não pode "enviar" para a entrada padrão. Ele está apenas enviando uma carga de caracteres para base64, que é um programa, que o descompila em tokens binários (representando um arquivo svg, aparentemente), com o qual ele faz mais coisas.
tomsmeding

2
@tomsmeding Eu acredito que eles ficaram confusos com o título da janela sendo "stdin".
Mniip

@ColeJohnson Acho que nenhuma versão foi preenchida, mas na versão pequena as linhas interna e externa são renderizadas perto o suficiente para parecerem sólidas. Tendo dito que há claramente alguma coisa aliasing estranho acontecendo com ImageMagick que eu não compreender totalmente - mas acho que a imagem gerada é perto o suficiente para o código-golf ;-)
Digital Trauma

2

Ray POV (370 bytes)

Como não conseguia descobrir como renderizar a mesma área vertical e preservar a proporção ao mesmo tempo, decidi optar pela altura correta e caber ao usuário renderizar apenas no 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}}

correr com povray.exe /RENDER euro.pov -w600 -h800

insira a descrição da imagem aqui insira a descrição da imagem aqui


2

Processando, 232 bytes

O processamento não permite realmente aceitar argumentos de linha de comando, pois é muito especializado em desenho, mas minha função aceita o parâmetro como height para compensar. As coordenadas são codificadas / aproximadas da imagem acima e a tela inteira é dimensionada com base no parâmetro de entrada para obter desenhos de tamanhos arbitrários.

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 inteiro

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

Resultado

Esboço de processamento de euro


11
Você pode golfe usando 1em vez de OPENbem mudar a 255no backgrounde fillchamadas para-1
Kritixi Lithos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.