€ işaretini çizin


61

Amaç, aşağıdaki belirtimlere göre (işaret sınırını göz ardı ederek) bir € (euro) işareti içeren bir resim çıkarmak veya göstermektir.

€ işareti

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

Kurallar:

  • Program / betiğin işaretin yüksekliğini argüman olarak piksel cinsinden alması gerekir (işaretin etrafındaki boş alan isteğe bağlıdır)
  • İşareti olarak veya bir karakterden çizilemez, doğrudan (yasak (hesaplama görüntüde) ya da dolaylı olarak , sonra bir HTML sayfası görüntülemeden)print8364
  • Çıktının herhangi bir dosyaya kaydedilmesi gerekmez, görüntülenebilir ve daha sonra ekran görüntüsü olarak gösterilebilir.
  • Standart “boşluklar” yasaktır
  • En kısa kod kazanır

7
Zor! Geometri / trigonometriyi inceleme zamanı geldi. Bazı koordinatları anlamak oldukça zor görüyorum.
Michael M.

5
"Fakültatif" diye bakmak zorunda kaldım
Dijital Travma

2
Ben gerçekten bir LaTeX + TikZ cevabını bekliyorum :)
Cole Johnson

12
Euro olmasaydı, bu sorun olmazdı, ve bir kez daha "Mo money mo problemleri" gerçeğini ortaya koydu
Thomas Johnson

1
Tipografik olarak neyin kullanışlı olduğunu bilmiyorum ve ben tipograf değilim. Mükemmel bir € işareti istiyorsanız, sadece € karakterini kullanın. Ancak bu sorunun amacı bu değil. Mükemmel piksel görüntüler beklemiyordum. Bundan hoşlanmıyorsanız, farklı kurallarla başka bir soru eklemek için çekinmeyin.
AL,

Yanıtlar:


22

PostScript / GhostScript, 100

(Program için 96, komut satırı anahtarı öneki için 4)

Tamamen golf oynadı ve el ile tokenize:

$ 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

Kendi görüntülemen için buraya bir kopya alabilirsin .

@ ThomasW'ın cevabını gördükten ve programımı dikkatlice değerlendirdikten sonra, daha iyi yapabileceğimin farkına vardım.

Belirtilen sürüm buna eşdeğerdir:

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

Optimizasyonların açıklaması:

İlk olarak, ilk çözümümü, her şeyi çevreleyen tek bir yol yerine, daha basit bir alt yol birliğinin birleşimine dönüştürdüm. Thomas'ın sahip olduğumdan çok daha iyi olan bir parametre girme yöntemini ödünç aldım.

Sonra tüm koordinatları 10 ile çarptım ve bana sadece tamsayı koordinatlarını vermek için her şeyi yuvarladım. Ayrıca açıları yuvarladım ve iki büyük olanı eşdeğer negatif açılara dönüştürdüm. Bu, her bir sayının -128 ile 127 arasında düşmesini sağlar.

Ve sonra herşeyi belirledim . Her operatör, her biri iki baytlık bir sekans ile temsil edilebilir. Her sayı bir tek imzalı bayt ile temsil edilebilir çünkü, her biri aynı zamanda sadece iki bayt olur. Bunu yapamayacağım tek kısım hbaşlangıçtı, ama sadece iki byte, hondan sonraki boşluk.

Olarak çalıştır:

gs -dh=200 euro.ps

200 pt yüksek

gs -dh=80 euro.ps

80 pt yüksek

gs -dh=20 euro.ps

20 pt yüksek


Yeni: Daha kısa versiyonlar!

Kodlanmış kullanıcı yollarını kullanarak, program boyutunu birkaç bayt kadar azaltmayı başardım. Bu programların her biri, aynı çıktı üreten, ilk programa eşdeğerdir:

92 bayt:

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

Hangi eşdeğerdir:

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

Ve biraz tersine duyarlı kafa karıştırıcı bir çözüm sadece 91 için, bir karakter daha kaydeder

$ 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

Hangi eşdeğerdir:

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
Harika iş! Ben öğrenmek gerekecek sanırım tüm ikili kodları hakkında.
Thomas W.

@ThomasW. Yine de henüz tamamlanmadıysam; Hala kodlanmış yol dizeleri dokümantasyonunu
okuyorum

Sonra boşluğa ihtiyacınız yok hçünkü ikili semboller kendi kendini sınırlar. BTW, nasıl kodladınız? Bunu sıkıcı olan standart bir hex editörü ile yaptım.
Thomas W.

2
@ n.1 belirtilmiş dosyalar, normal PostScript dosyalarıyla tam olarak aynı şekilde çalışır ve aynı dosyada ikili belirteçleri ve standart düz metin PostScript'i bile karıştırabilirsiniz. Her bir ikili simge doğrudan bir operatöre veya başka bir nesneye karşılık gelir, böylece işlemleri kolayca değiştirebilir veya ekleyebilir, hatta snippet'leri başka bir programa kopyalayabilirsiniz. Tokenlenmiş formla ilgili tam ayrıntılar, Bölüm 3.12'deki PostScript Dil Başvuru El Kitabında (kırmızı kitap) bulunabilir. Kodlanmış kullanıcı yolları 4.6.2'de açıklanmaktadır.
AJMansfield

1
@ n.1 Bu yüzden dosyayı yazmak için bir hex editörü kullandım. Belirteç sınırlayıcı baytları normal olarak ISO-latin-1 ve diğer sabit genişlikli kodlamadaki kontrol karakterlerine karşılık gelir, ancak editör UTF-8 veya başka bir değişken genişlikli kodlamada yorumluyorsa, bunun gibi herhangi bir şekilde ikili veri içeren diğer dosya.
AJMansfield

50

Mathematica, 193 183 177 173 169 166 bayt

Yay, matematik! Belirli (oldukça karmaşık) bir eşitsizlik setini karşılayan bölgeyi çiziyorum:

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

Kullanım e[height], örneğin e[100]:

görüntü tanımını buraya girin

Veya e[200]:

görüntü tanımını buraya girin

Keskin kenarların biraz yuvarlanmış olduğunu fark edebilirsiniz. Bunun nedeni, bölgenin yalnızca uzayda bulunan noktaları örnekleyerek çizilmesi ve Mathematica'nın varsayılan olarak her pikseli örneklememesidir. Örnekleme çözünürlüğü, 14 karakterPlotPoints-># ekleyen başka bir seçenek (piksel başına bir örnek kullanan) eklenerek artırılabilir . Bu seçenekle çalıştırmanızı önermiyorum, çünkü çalışma süresini önemli ölçüde artırıyor ve ötesinde görsel çekiciliği zorlukla artırıyor . Bu nedenle, (OP'nin onaylanmasından sonra) puanlamaya dahil edilmez.#/4

İşte biraz ungolfed versiyonu:

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

Golf versiyonunda, koordinat sistemini .5s'den kaçınmak için 2 kat ölçeklendirdim , ancak karakter sayısının gerçekte aynı olduğu ortaya çıktı.

Formülün nasıl çalıştığımın bir açıklaması. Şekli iki bölgeye ayırdım. Bir halka ve şeritler içerir ve sağa kesiliyor BCDEeğim ve ile sola IJve GHyamaçları (daha sonra ayrıntılı bilgi). Diğeri aynı halkayı içerir, ancak sadece noktanın x koordinatında kesilir D. İki bölge için şartlar ||, burada belirlenmiş bir birliktelik görevi gören ile birleştirilir .

Halka, menşe ile olan mesafenin 5 < r < 6olduğu ryer olarak tanımlanmıştır . Çalışmak daha kolay olsa da ( x²+y²), bu yüzden 25 < x² + y² < 36ringdeki tüm noktaları almak için kullanıyorum .

Şeritler arasındadır ±.5ve ±1.5. Her iki çizgiyi aynı anda y modülünü alarak kaldırabiliriz , böylece şeritler (sonsuz uzunluktaki) tam olarak yerine gelir .5 < |y| < 1.5. Yine, çizgilerin ve halkanın birliğini almak için, sadece kullanıyorum ||.

İlginç olan, muhtemelen "maskeleri" nasıl elde edeceğimizdir. Noktanın Dbir x koordinatı vardır 5 cos 40°, bu yüzden alt kenara bakan maske (sadece halka ile birlikte) tam olarak geçerlidir x < 5 cos 40°. Bu, &&mantıkta çevrilen küme kesişimi ile uygulanabilir .

Diğer maskeler gerçekten zorlu kısımdır. İlk önce, eğimini alalım BCDE. Kolayca noktaları gerçekleştirebilmesi Cve Dyanı (0, -6)ve 5 (cos 40°, sin 40°)sırasıyla. Çizgi boyunca işaret eden vektör o zaman sadece D - C = (5 cos 40°, 5 sin 40° + 6). Maskeyi sağa uygulamak için, yalnızca bir noktanın o çizginin soluna veya sağına mı uzandığını bulmam gerekiyor (hadi çizgi vektörünü arayalım p). Ben vektör'ı alarak bu anlamaya Cilgi benim açımdan ve bir vektör üzerine projelendirme dik için p. Projeksiyonun işareti bana noktanın açık olduğu tarafı söyleyecektir. Dikey vektörün elde edilmesi 2D'de oldukça basittir: koordinatları çevirin ve birinin işaretini ters çevirin. Kodumdaki değişken bu d:(-5 sin 40° - 6, 5 cos 40°). Dan vektör Cilgi bir noktaya q = (x, y)olduğunu q - C = (x, y + 6). Projeksiyon arasındaki sadece skaler ürün (veya nokta ürün) olduğunu qve d. Seçtiğim yol dsola işaret ediyor, bu yüzden istiyorum d.(q-C) > 0. Bu durum sağdaki maskeyi uygular.

Sol maske için temelde aynı fikri kullanabilirim. Eğim aynıdır ve dolayısıyla böyledir d. Sadece amacımı, çizgilerin sol alt köşelerinden ayırmam gerekiyor C. Bunlar koordinatlara (-7.5, 0.5)(üst şerit) ve (-7.5, -1.5)(alt şerit) sahiptir. Böylece bu, iki şerit için iki bağımsız kural gerektirecektir. Ancak, alt maskeden etkilenen tüm noktaların alt şeritte olduğunu ve dolayısıyla negatif y bulunduğunu unutmayın . Üst maskeden etkilenen tüm noktalar pozitifdir . Yani basitçe kullanarak bükülme benim geçiş yapabilirsiniz Sign[y]olan 1pozitif ve -1negatif için y. Böylece ofset noktam olur(-7.5, -0.5 + Sign[y]). Aksi halde, maske sağdaki maske gibi çalışır. Tabii bu sefer projeksiyonun negatif olması gerekiyor. Yani, naif olarak böyle bir şey olurdu RH-projection > 0 && LH-projection < 0(aynı zamanda ilk başta kodda bulunduğum şeydi ). Fakat bunu kısaltabiliriz, çünkü pozitif ve negatif bir sayıyı çarpmak, negatif bir sayı vermek zorundadır, bu yüzden sadece RH * LH < 0( ilgili tahminler nerede RHve LHnerededir).

Bu kadar. Hepsini bir araya getirmek, aşağıdaki mantıksal yapıya yol açar:

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

Açık olmak gerekirse, açıklamamdaki koordinatlar mücadelede verilen yapı şemasına atıfta bulunuyor. Yukarıda da belirtildiği gibi, kodum aslında hepsini ile çarpıyor 2- Baytları kurtarmak için değiştirdim, ancak bayt sayısı aslında aynıydı ve değişikliği tekrar geri almak için canımı sıkmadı. Ayrıca tamsayılar daha iyi görünüyor.


1
Mathematica'da nispeten yeniyim, bu yüzden kodunuzla ilgili bazı yorumlarınızı takdir ediyorum!
Thomas W.

2
@ThomasW. Eh, gerçek Mathematica şeyler sadece RegionPlotuzayda tüm noktaları belirli bir koşulu karşılayan sadece renklendiren bir çağrıdır . Böylece x^2+y^2<1bir birim daire çizer. Gerçek matematik için bir açıklama ekleyeceğim (daha sonra bu gece).
Martin Ender

1
Yuvarlatılmış kenarları olmayan kodun uzunluğu nedir? Şu anda en kısa koda sahip olduğunuzu düşünüyorum, ancak köşeleri yuvarlatılmış olarak cevabınızı kabul edemiyorum, köşeleri yuvarlamayan diğer cevaplar için haksızlık olur. Lütfen kesinlikle özellikleri takip ediniz. Thanks
AL 0

@ n.1 Thomas W.'nin PostScript cevabını diskalifiye etmediğiniz sürece, çünkü ikili ya da çok agresif bir şekilde yuvarlandığı için cevabı kesinlikle daha kısa. Ancak, kararın düzeltilmesi 14 karakter alıyor, bu yüzden cevabım hala ondan en kısa sürüyor. Düzenleyeceğim.
Martin Ender

1
@ThomasW. işte burda!
Martin Ender

29

BBC TEMEL, 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;

emülatörünü http://www.bbcbasic.co.uk/bbcwin/bbcwin.html adresinden indirebilirsiniz.

BBC basic'de, tüm grafikler makineye özgü ASCII kontrol karakterleri kullanılarak düşük seviyede ele alınır (ancak bazı yüksek seviyeli komutlar kolaylık sağlamak için de kullanılabilir.) Burada kullanılanlar 22 (ekran modunu değiştir) 29 (değiştir) orijinli) ve 25, X ve Y parametrelerinden önce ek bir işlem parametresi (arka plan / ön plandaki çizgi, daire, üçgen vb. gibi) ek eylem parametresi alan PLOT ifadesine eşdeğerdir.

Tek yapmam gereken, VDU kontrolöre bir sürü karakter göndermek. noktalı virgülle sonlandırılan değerler 16 bit'tir. diğerleri 8 bit. VDU kontrol cihazına gönderilen toplam bayt sayısı 91'tir , ancak bu kendi başına bir cevap olarak nitelendirilemez çünkü o aşamada boyut büyüklüğü kodlanmıştır.

Menşe için bariz yer, dairenin merkezidir, ancak çubukların yapımında aslında daha fazla komut var. Bu yüzden menşei, alt kısmın altına 1.5 düşürdüm, bu da gereken fraksiyonların sayısını ve gereken negatif sayıları azaltır. E çizgisi bu dikey çizgiden başladığı için önemli olan dairenin merkezi ile birlikte dikey çizgide kalır.

Aslında, çizimden sadece 3 sayı hesaplamak zorunda kaldım: C şeklinin üst iç köşesi (5 cos 40, 5 sin 40 + 1.5) = (3.8302,3.1394 + 1.5) = yaklaşık (12 / 3.1, 4.6) ve E hattının gradyanı: x / y = 3.8302 / (6 + 3.1394) = 0.4157 = yaklaşık 1 / 2.4

Sadece ücretsiz değerlendirme sürümüne (yorumlanmış) sahip olduğum için, sembol yüksekliğini kullanıcı girişi olarak alıyorum. Eğer tam sürümü satın alırsanız (29.99GBP) derleyebilir ve sonra komut satırını okuyabilirsiniz w=VAL(@cmd$)/12.

Ungolfed kod

Golf kodunda, sadece bir VDU cümlesi var, ancak kodlanmamış kodda netlik için birkaç taneye ayırdım. Ayrıca, BBC basic küçük endian olduğundan, kombinasyon p,0,golfe atılabilir, p;ancak netlik için onu ağzı kapalı bıraktım.

  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)

görüntü tanımını buraya girin


BBC TEMEL. Korku veren! Bu beni neredeyse otuz yıl geri götürüyor!
Tom Chantler

1
@Dommer BBC Basic ilk olarak 1981 yılında, ilk Euro notlarının basılmasından 20 yıldan fazla bir süre önce piyasaya sürüldü (2002.) Bu yüzden böyle bir makineye büyük bir euro işareti çizmenizin tek yolu bu! Alternatif ASCII karakter yeniden tanımlamak olabilir nböyle bir 8x8 bitmap bulunan bir euro simgesi için: VDU 23,n,30,33,120,32,120,30,30,0. Wikipedia'ya göre, çoğunlukla mobil cihazlar için, BBC Basic hala geliştirilmektedir.
Seviye River St

Aslında! Sanırım 1984’te bizden biri olduğumuzu düşünüyorum. Grafik kağıda havalı spritler çizdiğimi ve sonra onların ikili gösterimlerini yaptıklarını hatırlıyorum. Hangi notta Euro sembolünüzü elle çizdim. Yazım hatası giderildikten ve sonuç karşıtı değer 30'dan 33'e değiştirilince çok iyidir. Profilinizde, beni tekrar ilkokul günlerime geri götüren LOGO'yu kullandığınızı görüyorum. BBC Basic'in hala kullanımda olduğunu öğrenmek harika. Bizim için yeterince iyiyse ...
Tom Chantler

Sadece eklemek için, BBC Basic 8x8 bitmap değiştirilerek daha "italik" hale getirilebilir (daha büyük logoya uygun olarak) VDU 23,n,30,33,124,32,120,33,30,0. Hafıza şeridi gezisi için teşekkürler.
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>

Bu, yalnızca SVG öğelerini kullanırken, gevşek HTML ayrıştırmaya dayanır ve HTML olarak sunulması gerekir. Sıkı SVG çok daha fazla bayt gerektirir.

Dene!


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

1
Evet, tam tersi olan PostScript koordinatlarında düşünüyordum! Şimdi y eksenini değiştirdim.
Thomas W.

3
Benim için çalışın (Chrome 34) iz bırakmadan bile </svg>. Oh, ve bu işaretleme korkunç . Umarım kendinden utanıyorsundur. ;-)
Ilmari Karonen

2
@IlmariKaronen ben değilim ;-) utanıyorum. Genellikle HTML üzerinden temiz XHTML'yi bile tercih ederim. Her neyse, sondan ayrılırsam </svg>, sadece çizgileri değil (bağımsız bir dosyada, JS Bin'in ekleyebileceği biçimlendirme içinde) daireyi görüyorum.
Thomas W.

1
Sen kısaltabilir evt.targetiçin this6 bayt tasarruf.
Diş fırçası

17

CSS, 512 494 bayt

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

Adil bir cevapla en küçük cevap değil, tüm css-minification-fu'umu toplarken bile alabildiğim kadar küçük

Uyarılar:

Tüm 'px' sıyırıcılı kod, Firefox & IE’de çalışır ancak birimleri hakkında daha titiz olan Chrome ve Safari’de çalışmaz :)

Ayrıca jsfiddle'ın çalışmasını sağlamak için px'leri yeniden eklemek zorunda kaldım:

http://jsfiddle.net/9A3J9/

100: görüntü tanımını buraya girin

200: görüntü tanımını buraya girin

kodlanmamış kod:

 <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
Vaov! Bu skewXnumara, benim tek oyum olabilir.
Manatwork

İşte tam da dün yazmaya başladım. yanlış puanlar size sonra
Einacio

div bir kimliği ayarlamak ve kullanarak getElementById6 char azaltır. ve sonra
css’teki

ayrıca, pbundan sonra başka bir içerik yoksa (spec tarafından) kapatma etiketi atlanabilir. ve tarayıcıların otomatik olarak div
kapanıp kapanmadığını

@einacio harika öneriler! 494 B. ye
düştük

16

PostScript + Ghostscript 137 + 6 = 143 (ikili), 209 + 6 = 215 bayt

İkili jetonlu tamamen golf versiyonu:

$ 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

El kodlu ikili dosyayı indir

ASCII versiyonu:

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

Farklı kaydet euro.psve Ghostscript gibi kullan

gs -dh=80 euro.ps

Euro işareti, 80 puan, Ghostscript tarafından render

gs -dh=20 euro.ps

Euro işaretini, Ghostscript tarafından verilen 20 puan

PostScript'te piksel diye bir şey olmadığından, bu yükseklik bunun yerine noktalarla yorumlanır. Komut satırındaki anahtar için +6 hesapladım.


1
Derlenmiş dosya boyutunu nasıl yenebilirim? : D ... Bu ikili jetonlar nasıl çalışıyor? Temel olarak kodu elle derlemek gibi değil mi?
Martin Ender

DCçizgi yatay çizgileri doğru kesmiyor. Aşağıdan dik bir şekilde D'daire' şeklini doğru yerde kesmiyor, altta :(. Görünüşe göre aynı SVG cevabınızla da aynı
user2846289

+ Yatay çizgilerin sol kenarları hizalı değil.
user2846289

@ m.buettner En önemli PostScript adları, iki baytlık bir sıra kullanılarak ifade edilebilir. Bu bir C veya Java programını derleyeceğiniz gibi derleme değil. Herhangi bir PostScript programı ile aynı ayrıştırma işleminden geçer. Hexdump'a bakarsanız veya ikili dosyayı bir metin düzenleyicide açarsanız, bunun neredeyse ASCII sürümüyle aynı olduğunu görebilirsiniz, ancak çoğu adın iki baytlık bir sıra ile değiştirildiğini görebilirsiniz.
Thomas W.

@VadimR Keskin bir gözünüz var! Sanırım kısalık için çok fazla işlem yaptım (çok agresif bir şekilde yuvarladı). Bazı rakamlar eklemek zorunda kalabilirim.
Thomas W.

13

Python - kaplumbağa - 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 % 100ve python % 500sırasıyla:


3
Tanımladığınız birkaç kısayoldan kurtularak birçok karakter kaydedebilirsiniz. Sadece bir ckez kullanırsınız , bu yüzden sadece onu çağırmak aslında daha kısa olacaktır math.cosve bence genel uzunluğu kısaltmak için kısaltmanız mümkün olacak başkaları da var.
AJMansfield

1
Önekleri kullanarak from math import *bırakarak altı karakteri tıraş edebilirsiniz math..
alexwlchan

3
Tanımlarsınız u=t.circle, ancak birkaç satır sonra t.circle(...)aramayı değiştirmeyi unuttunuz .
Alconja

2
Kaplumbağa € çekmek için. Yaşamak için ne kadar zaman.
Nit

13

PHP, 432 435 367 356 334 bayt

(Düzenleme: Görünüşe göre IJ ve GH BCDE ile paralel olması gerekiyordu. Şimdi düzeltildi)

Bu komut dosyası bir SVG resmi çıkarır, ancak text/htmlvarsayılan olarak gösterecektir . Sanırım çoğu tarayıcı bunu, gömülü bir SVG resmi içeren bir HTML web sayfası olarak görecek. Yine de benim için iyi çalışıyor gibi görünüyor.

Resmin yüksekliği sorgu dizesi parametresi olarak iletilir. (Not: bayt sayısı, satırın sonunda, bunun düzgün çalışması için gerekli olan yeni bir satır karakteri içerir).

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

Güncelleştirilmiş sürüm ( 367 356 334 bayt):

preg_replace_callback()sayısal değerleri ölçeklendirmenin çok daha etkili bir yoludur. Bu kod orijinal sürüm ile aynı çıktıyı üretir. (Düzenleme: Einacio sayesinde daha fazla indirim )

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

Çıktı:

euro.php x = 60

görüntü tanımını buraya girin

euro.php x = 200

görüntü tanımını buraya girin


widthve heightburada gereksiz. Ve xmlnsçoğu tarayıcıda görüntülenmesi için belirtmeniz gerekir (Firefox ve Chrome'u test etmiş; SVG'nin uygun MIME türü gönderilse bile, ikisi de bunu SVG değil, XML olarak oluşturur). ideone.com/JkqVL0 (369 baytlık bir çözüm için sabit kodlu x değerini kaldırın)
Tim S.

@TimS. Hayır, ideone'da PHP kodunu çalıştırıp sonuçları bir SVG dosyasına kopyalarsanız, düzgün çalışmaz. Ancak betiği bir web sunucusunda gerçekten yayınlarsanız, PHP (varsayılan olarak) MIME türünde sonuçları sunar text/html. Chrome ve Firefox'un bu konuda bir sorunu yok, ancak Safari'nin biraz daha titiz olduğunu keşfettim.
pembemsi ossifrage,

Ah! Şimdi hileyi görüyorum: text/htmlwith with <svg>..., ancak ihtiyacı olan ve svgolmayan bir öğeye sahip bir HTML dosyası olarak yorumlanıyor . Uygun olan bir SVG dosyası olarak düşünüyordum . Kodun iyi. xmlnswidthheightxmlns
Tim S.

ikinci kodda, 12 yerine 24 kullanıyorsanız, her x.5 değerinde 1 baytı azaltmaz mıydınız?
Einacio

@Einacio Evet! :-) Ne yazık ki, ayrıca "5", "6", "7" ve "8" olaylarının her birinde bir bayt kazanıyorum. Elde edilen uzunluk tamamen aynıdır.
squishish ossifrage

9

sh, 8604

Ben düşünüyorum birisi muhtemelen daha iyi yapabilirsiniz, ancak en bu başlayalım.

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

3
Bu, çıktının kodlanmasının standart boşlukuna dahil olmaz mıydı?
user80551

4
Bu kesinlikle "standart boşluklar" kategorisine giriyor.
Igglyboo,

2
@ Igloboo: Nasıl yani?
Ry

18
Bu bir kod golf mücadelesi için çok uzun bir cevap. :-)
AL

2
@ Igglyboo Katılıyorum. .svg vektör tabanlıdır, bu nedenle kademesiz ölçeklenebilir - ve $1giriş parametresi tarafından yapılır .
Dijital Travma

9

HTML5, 395

==> Çevrimiçi deneyin

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

Kod JSCrush kullanılarak sıkıştırılmıştır .

Sıkıştırılmamış kod:

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

Bu, crush uygulanmadan önce kaynağın kullanılması ile 378'e
düşürülebilir

Bu JavaScript değil, HTML. İnsanların bunun nasıl çalıştığını anlamadığından bıktım.
Kaplumbağa

1
Evet, çünkü <canvas>etiketi JavaScript ... HTML5 genellikle HTML / CSS / JS yazmamak için kullanılır. İnsanların bunu anlamadığından değil, programcılar genellikle tembeldir (en azından ben). Yorumunuz biraz sert görünüyor.
Michael M.

@Mig HTML + CSS + JS'nin DHTML olarak adlandırıldığını düşündüm.
kinokijuf

6

PostScript, 270

7 7 çeviri
def / l {LineTo}
/ o {0 0} def
o 6 44,85 165,52 ark
-7.08 1,5 l
-7,5, 5 l
o 6 175,22 184,74 ark
-7.08 -.5 l
-7,5 -1,5 l
o 6 194.48 309.67 ark
o 5 320 197.46 arnn
1.87 -1.5 l
2,29,5,5
o 5 185,74 174,26 arcn
2,7,5
3,12 1,5 l
o 5 162,54 40 arnn
kapanış dolgusu

Bu sadece GeoGebra'nın yardımıyla hesapladığım koordinatlara göre yol elemanları ekleyerek ana hatlarını tanımlar ve ardından taslakları doldurur.

lineto( /l{lineto}def) Ve çemberin orijini ( ) için kısayol ekleyerek birkaç karakter kaydettim /o{0 0}def.

Farklı bir boyut belirtmek için , ilk boş satırdan sonra formun bir komutunu ekleyin .height width scale

Kendi başına çalıştırıldığında, bu euro işaretini varsayılan sayfa boyutunda sayfanın sol alt köşesine çizer. Sadece kaydedin anything.psve bir belge görüntüleyiciyle görüntüleyin.

İşte varsayılan boyutta, inç başına 90 pikselden biraz rasterleştirilmiş bir resim:

90 ppi'da varsayılan boyut

4x boyutunda:

90 ppi'de 4x boyut

Orijinali kendi izleme zevkiniz için de indirebilirsiniz .


2
İşaretin boyutunu tanımlamak için herhangi bir argüman okuyor mu?
AL

@ n.1 oh, üzgünüm, şartnamenin o bölümünü okumadım. Akşam yemeğinden sonra tamir edeceğim.
AJMansfield

Lütfen oluşturulan dosyanın ekran görüntüsünü ekleyin.
AL,

1
@ n.1 Resimler ekledim.
AJMansfield

5

PHP (SVG olmadan), 628 597 bayt

AsksAnyway'e teşekkürler, fonksiyonlar için güzel kısayol (örneğin $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);

file.php?h=200Görüntüyü görmek için tarayıcınızdan arayın

Koordinatlar GIMP ile yapılan ölçümlere dayanmaktadır.

100 piksel:

100 piksel

200 piksel:

200 piksel

Katmanlar adım adım eklendi:

# GIF

Ungolfed kod (kesirlerle, golfed kodun yuvarlanmış değerleri vardır)

<?php
header('Content-type: image/png');

$h = $_GET['h'];

$i = imagecreatetruecolor($h * 1.1,$h * 1.1);

$c = imagecolorallocate;

# black
$b = $c($i,0,0,0);
# white
$w = $c($i,255,255,255);

imagefill($i,0,0,$w);

$l = $h * .7; # distance between left and center of the circle
$t = $h * .55; # distance between top and center of the circle

# one "unit", as defined by the specs
$u = $h / 12;

$e = imagefilledellipse;
# disk is black
$e($i, $l, $t, $h, $h, $b);
# inner disk is white
$e($i, $l, $t, $h * (5 / 6), $h * (5 / 6), $w);

$f = imagefilledpolygon;
# draw 2 bars in black
$f($i, array(
# bottom bar
$l + $u * 5, $t + ($u * 1.5), # bottom right
$l-$u * 7.5, $t + ($u * 1.5), # bottom left
$l-$u * 7.125, $t + ($u * 0.5), # top left
$l + $u * 4, $t + ($u * 0.5), # top right
# top bar
$l + $u * 4, $t - ($u * 0.5), # bottom right
$l-$u * 7.5, $t - ($u * 0.5), # bottom left
$l-$u * 7.125, $t - ($u * 1.5), # top left
$l + $u * 5, $t - ($u * 1.5) # top right
), 8, $b);

# hide right parts of bars and circle by drawing white
$f($i, array(
$l + $u * 6 * (212 / 300), $t - ($u * 6 * (212 / 300)), # right of the disk
$l + $u * 6 * (92 / 300), $t + ($u * 6 * (74 / 300)), # left = bottom right of bottom bar
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (163 / 300)), # bottom of the circle
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (231 / 300)), # bottom of the circle too
$h * 2, $t, # some point at the right of the image (outside the image)
), 5, $w);

imagepng($i);

4

Bash + ImageMagick + linux komut satırı araçları, 460 bayt

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

Bu @ minitech en aynıdır tekniktir cevap . Ancak .svg verileri buradan gelir, bu çok daha kısadır: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick, vektör verisini istenen skaladaki .png verisine, boruları xview'a dönüştürür.

İçin çıktı ./euro.sh 30:

görüntü tanımını buraya girin

İçin çıktı ./euro.sh 300:

görüntü tanımını buraya girin


7
Neden büyük sürüm dolu değil?
Cole Johnson

2
görüntüleri stdin'e nasıl gönderebilirsiniz?
phuclv

@ LưuVĩnhPhúc Standart girişe "çıkış" yapamazsınız. Sadece base64, bir program olan, onu ikilik belirteçlere (görünüşe göre svg dosyasını temsil eden) daha fazla şey yapan, içine koyan bir sürü karakter gönderiyor .
tomsmeding

2
@tomsmeding Pencere başlığıyla "stdin" olduğu için kafalarının karışmış olduğuna inanıyorum.
mniip

@ColeJohnson Ne versiyonun doldurulduğunu sanmıyorum, ancak küçük versiyonda iç ve dış çizgiler sağlam görünecek kadar yakın. ImageMagick ile tam anlamıyla anlamadığım bazı garip takma bir şeyin olduğunu açıkça söylemiştim - ama oluşturulan görüntünün kod-golf için yeterince yakın olduğunu düşünüyorum ;-)
Digital Trauma

2

POV-Ray (370 bayt)

Aynı dikey alanı nasıl oluşturacağımı ve en boy oranını aynı anda nasıl koruyamadığımı bulamadım, bu yüzden doğru yükseklik ve kullanıcıya sadece 4: 3 formatında görüntüleyebilmesi için karar verdim

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

koşmak povray.exe /RENDER euro.pov -w600 -h800

görüntü tanımını buraya girin görüntü tanımını buraya girin


2

İşlem, 232 bayt

İşleme, komut satırı argümanlarına gerçekten izin vermez, çünkü çizim için çok özeldir, ancak işlevim telafi etmek için parametreyi yükseklik olarak alır. Koordinatlar yukarıdaki görüntüden kodlanmış / yaklaşık olarak kodlanmıştır ve isteğe bağlı boyutlarda çizimler elde etmek için tüm tuval giriş parametresine göre ölçeklendirilir.

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 + tüm program

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

Çıktı

Euro eskiz işlemesi


1
Sen kullanarak golf can 1yerine OPENde değişen 255içinde backgroundve fillaramaları için-1
Kritixi Lithos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.