Büyük, Beyaz, Kuzey!


11

Eh!

Bilirsiniz, Kanadalılar ile sorun bazen geyik avı ve baraj tamiri uzun bir günün ardından, bizim kabin geri yolumuzu unutuyoruz! Kullanışlı dizüstü bilgisayarımız (her zaman yanımızda), bizi eve götürmenin bir yolu olsaydı harika olmaz mıydı? Uzun zamandır, bilgisayarınızda bir pusula görüntülerseniz, kuzeyi gösterdiğinde en parlak olacağı söylendi. Bunu test etmek istiyorum, ancak bir sonraki seyahatimde yanımda götürmek için kompakt bir programa ihtiyacım var, çünkü sabit diskim zaten akçaağaç şurubu tarifleri ile dolu (ve bu gidemez). Bu nedenle, göreviniz bana çalıştırıldığında, aşağıdaki pusula gülünün görüntüsünü kaydeden veya gösteren bir program tasarlamaktır:

Pusula gülü

Harfler farklı bir yazı tipinde olabilir. Unutmayın, en az en iyisi, bu yüzden en düşük bayt sayısı kazanır!

Özellikler

Renkler

  • Açık mor: # 9999FF
  • Gri: # E5E5E5

Uzunluklar ve Açılar

Gül özellikleri

  • Açı a= 45 °
  • Açı b= 90 °
  • Uzunluk c= 250 adet
  • Uzunluk d= 200 adet
  • Uzunluk e= 40 adet
  • Uzunluk f= 45 adet

Açıklamalar

  • Metin uygun olan herhangi bir yazı tipinde olabilir, uygun olan yerlerde ortalama, eğitimli insan tarafından okunabilir olduğunu belirtir.
  • Metin en yakın noktada sivri uçlardan 3 birim uzakta olmalı, güle dokunmamalı ve dik olmalıdır
  • Gülün merkezinden, sivri uç noktasından ve ötesine bir çizgi çizilirse, metnin ortasından +/- 2 birim hassasiyetle geçmelidir (metin bir eksen boyunca ortalanmalıdır a, nerede a) başak sonuna kadar sayfanın ortasında, ve öbür uzanır
  • Her karakter en az 15 birim 15 birim olmalı ve x / y veya y / x oranının en fazla 2: 1 olması gerekir (esneme-okunabilirlik yok)
  • Referans görüntüde daha uzun ani ve ortadan en yakın metinlerden geçen loş daire çizilmeyecektir.
  • Resim kare şeklinde olmalı ve en az 400 piksel x 400 piksel olmalıdır
  • Kaynak içindeki sıkıştırılmış bir görüntüye izin verilmiyor
  • Bir birim en az 1 piksel olmalıdır

"Akçaağaç şurubu tarifleri" derken, akçaağaç şurubu yapmak için tarifler mi yoksa akçaağaç şurubu dışında bir şeyler yapmak için tarifler mi demek istediniz? Çünkü onların eski olduklarını tam olarak hayal edemiyorum ...
Joe Z.

@JoeZ. Her ikisi de, belli ki ... (;
globby

Yanıtlar:


7

HTML + CSS, 487 + 189 = 676

Pusula gülü, üçgen tekniği ve bazı temel dönüşümler kullanılarak CSS sınırlarından yapılır . Harflere sadece sabit pozisyonlar verildi, bu yüzden oldukça uzun çıktı: /

Aşağıdaki pasaj, hepsine sığacak şekilde ölçeklendirilmiştir. JSFiddle'ı buradan kontrol edebilirsiniz . Ayrıca, harflerin farklı tarayıcılarda (farklı yazı tipleri, varsayılan stiller vb.) Ne kadar iyi sıralanacağından emin değilim.

html{transform:scale(0.2)}body{margin:5em}hr{margin:0;float:left;border:250px solid transparent;border-right:58px solid #E5E5E5;border-bottom:58px solid #9999FF}a{position:fixed;width:616px;font-size:4em}#a{transform:rotate(90deg)}#b{transform:rotate(270deg)}#c{transform:rotate(180deg)}#d{transform:rotate(45deg)scale(.8)}#n{top:20px;left:365px}#e{top:356px;left:700px}#s{top:700px;left:370px}#w{top:356px;left:10px}#N{top:150px;left:550px}#E{top:560px;left:550px}#S{top:560px;left:140px}#W{top:150px;left:140px}
<a id=n>N</a><a id=e>E</a><a id=s>S</a><a id=w>W</a><a id=N>NE</a><a id=E>SE</a><a id=S>SW</a><a id=W>NW</a><a id=d><hr><hr id=a><hr id=b><hr id=c></a><a><hr><hr id=a><hr id=b><hr id=c></a>


Ortada, pusulayı kullanılamaz hale getiren küçük bir gri kutu var gibi görünüyor. Bunu düzeltebilme şansın var mı?
globby

1
@globby benim için görünmüyor. Bir ekran görüntüsü gönderebilir misiniz?
grc

imgur.com/dYQoLcM,sSrR94O Windows 8.1'de Mozilla Firefox 35.0 kullanma
globby

@globby, bu sadece ölçeklemenin bir etkisi olabilir. Tam boyutlu JSFiddle'da oluyor mu?
grc

3

İşleme 2 - 636

İşleme üçgen yöntemini kullanarak tüm üçgenleri çizen ve ardından harfleri uçlarına yerleştiren hızlı bir çözüm.

int s,h,m,b,n,t;void setup(){s=400;h=s/2;b=125;t=71;n=32;m=28;size(s,s);noStroke();fill(229);t(h-t,h-t,h-m,h);t(h-t,h+t,h,h+m);t(h+t,h-t,h,h-m);t(h+t,h+t,h+m,h);fill(#9999FF);t(h-t,h-t,h,h-m);t(h-t,h+t,h-m,h);t(h+t,h-t,h+m,h);t(h+t,h+t,h,h+m);t(h-b,h,h-n,h-n);t(h+b,h,h+n,h+n);t(h,h-b,h+n,h-n);t(h,h+b,h-n,h+n);fill(229);t(h-b,h,h-n,h+n);t(h+b,h,h+n,h-n);t(h,h-b,h-n,h-n);t(h,h+b,h+n,h+n);fill(color(0));text("NW",h-t-14,h-t-2);text("NE",h+t+2,h-t-2);text("SW",h-t-14,h+t+10);text("SE",h+t,h+t+10);text("N",h-5,h-b-5);text("S",h-5,h+b+12);text("E",h+b+2,h+5);text("W",h-b-14,h+5);}void t(int a,int b,int c,int d){triangle(h,h,a,b,c,d);}

resim açıklamasını buraya girin

Eğer işleme alabilirsiniz burada


3

PHP, 628 bayt

kolaylık sağlamak için birkaç satır sonu ekledi.

$c=$z.create;$h=$c($w=250,$w);$i=$c(530,533);$a=$z.colorallocate;$a($h,$f=255,$f,$f);$a($i,$f,$f,$f);$a($h,229,229,229);$a($h,153,153,$f);
$p=$z.filledpolygon;$p($h,$o=[0,64,0,0,141,141,],3,2);$p($h,[64,0]+$o,3,1);$p($h,$o=[0,$w,0,0,57,57],3,1);$p($h,[$w,0]+$o,3,2);
$c=$z.copy;$r=$z.rotate;$c($i,$h,263,267,0,0,$w,$w);$c($i,$r($h,90,0),263,17,0,0,$w,$w);$c($i,$r($h,180,0),13,17,0,0,$w,$w);$c($i,$r($h,270,0),13,267,0,0,$w,$w);
$s=$z.string;$s($i,5,259,0,N,3);$s($i,5,259,518,S,3);$s($i,5,0,259,W,3);$s($i,5,518,259,E,3);$s($i,5,106,108,NW,3);$s($i,5,406,108,NE,3);$s($i,5,406,410,SE,3);$s($i,5,106,410,SW,3);
imagepng($i,"n.png");

Şununla koş: -r . n.pngGörüntüyle bir dosya oluşturur ; birim 2 pikseldir.

İtiraf etmeliyim, deneme yanılma yoluyla rüzgarlar için kordları buldum ve muhtemelen biraz uzaktalar. Hesaplamaları yakında yapacağız; ama söz veriyorum: bayt sayısını değiştirmeyecekler.
Şimdi benim trignonometri kazı ve ile mücadele için eğlendim imagecopy... ne sissy!

golf hakkında: çok hile yok; ancak bu birkaç kişi çok tasarruf etti:

  • İşlev adları ve değerlerden ikisinin değişkenlere atanması muhtemelen en büyük etkiye sahipti.
    İşlev adlarını değiştirmeden önce saymadım bile.
  • Dizi ile sihir + operatörü 42 bayt verdi.
  • Resmi tarayıcıya göndermek yerine bir dosya yazmak 27 bayt kaydedildi.
  • Değişkenlerin ilk kullanımına atamaları taşımak birkaç tane daha kazandırdı.

PHP Kuzey Yıldızı

Yıkmak

// create images and allocate colors
$c=imagecreate;
$h=$c($w=250,$w);   // helper image - just as large as needed or imagecopy will screw up 
$i=$c(530,533);     // main image

$a=imagecolorallocate;
$a($h,$f=255,$f,$f);    // white is 0
$a($i,$f,$f,$f);    // must be assigned to both images
$a($h,229,229,229); // grey is 1
$a($h,153,153,$f);  // purple is 2

// draw the south-east quadrant
$p=imagefilledpolygon;
// small triangle purple first
$p($h,$o=[
// point 3: 0.8*e *2
    0,64,
// point 1: center
    0,0,
// point 2: a=45 degrees, d=200 units
    141,141,// d/sqrt(2)=141.421356
],3,2);
// small triangle grey
$p($h,[64,0]+$o,3,1);

// large triangles
$p($h,$o=[
    0,$w,
    0,0,
    57,57   // e*sqrt(2)=56.5685424949
],3,1);

$p($h,[$w,0]+$o,3,2);

// create rose
$c=imagecopy;
$r=imagerotate;
$c($i,$h,263,267,0,0,$w,$w);            // copy quadrant to main image (SE)
$c($i,$r($h,90,0),263,17,0,0,$w,$w);    // rotate quadrant and copy again (NE)
$c($i,$r($h,180,0),13,17,0,0,$w,$w);    // rotate and copy again (NW)
$c($i,$r($h,270,0),13,267,0,0,$w,$w);// rotate and copy a last time (SW)

// add circle
#imageellipse($i,263,267,500,500,2);    // grey is now 2: imagecopy shuffled colors

// add names
$s=imagestring;
$s($i,5,259,  0,N,3);   // 5 is actually the largest internal font PHP provides
$s($i,5,259,518,S,3);   // unassigned colors are black
$s($i,5,  0,259,W,3);
$s($i,5,518,259,E,3);

$s($i,5,106,108,NW,3);
$s($i,5,406,108,NE,3);
$s($i,5,406,410,SE,3);
$s($i,5,106,410,SW,3);

// output
#header("Content-Type:image/png");
#imagepng($i);
imagepng($i,"n.png");

1

R, 877 850 813

Çok golf bu oda şüpheli, ama ben kurallara uymayı başardı görmek için bir şey almak istedim.

Düzenleme: Çokgen oluşturma etrafında birkaç temizlik kaybetti, birkaç kaldırma anahatları kazandı

a=45;b=90;c=125;e=40;h=c(0,0,b,a,a,0,a,b)*pi/180;i=c(0,c,c,100,e,a,(2*a^2)^.5,a);x=i*sin(h);y=i*cos(h);q=x[6:7];r=x[7:8];s=x[2:3];t=x[c(5,5)];u=y[6:7];v=y[7:8];w=y[2:3];z=y[c(5,5)];m=(s-t);n=(w-z);o=(q-r);p=(u-v);i=((q*v-u*r)*m-o*(s*z-w*t))/(o*n-p*m);x=c(x,i)[c(1,2,5,1,3,5,5,4,10,5,4,9)];y=c(y,rev(i))[c(1,2,5,1,3,5,5,4,10,5,4,9)];png("1.png",400,400);par(mar=rep(0,4));a=c(-200:200);plot(a,a,type="n");for(b in 0:3){for(i in(0:3)*3+1){a=c(1,1,1,-1,-1,-1,-1,1);polygon(x[(i):(i+3)]*a[b*2+1],y[(i):(i+3)]*a[b*2+2],border=NA,col=c("#9999FF","#E5E5E5")[(i%%6%/%4+b%%2)%%2+1]);}};for(i in 1:4){a=c("N","NE","E","SE","S","SW","W","NW");b=a[i*2-1];c=a[i*2];o=c(1,1,-1,-1,1);n=o[i+1];m=o[i];e=c(5,2)[i%%2+1];text((x[e]+(11*abs(i%%2-1)))*m,(y[e]+(12*i%%2))*n,b,cex=1.8);text((x[8]+10)*m,(y[8]+12)*n,c,cex=1.8)};dev.off()

Bu, aşağıdaki png resmini üretir

resim açıklamasını buraya girin

Ne yaptığımla ilgili biraz açıklama

a=45;
b=90;
c=125;
e=40;
h=c(0,0,b,a,a,0,a,b)*pi/180;            # angles to known vertices in one quadrant
i=c(0,c,c,100,e,a,(2*a^2)^.5,a);        # distances to known vertices
x=i*sin(h);                             # calculate x ordinates
y=i*cos(h);                             # calculate y ordinates
q=x[6:7];                               #-----------------------
r=x[7:8];                               #
s=x[2:3];                               # Get the lines required 
t=x[c(5,5)];                            # to determine the vertex
u=y[6:7];                               # for the minor pointers
v=y[7:8];                               #
w=y[2:3];                               # 
z=y[c(5,5)];                            #------------------------ 
m=(s-t);                                # Intersect them
n=(w-z);                                # to give coordinate.
o=(q-r);                                # Just calculate the x's
p=(u-v);                                # as they can be reversed
i=((q*v-u*r)*m-o*(s*z-w*t))/(o*n-p*m);  #------------------------
x=c(x,i)[c(1,2,5,1,3,5,5,4,10,5,4,9)];      # X Triangle groups
y=c(y,rev(i))[c(1,2,5,1,3,5,5,4,10,5,4,9)]; # Y Triangle groups
png("1.png",400,400);                   # Set output to png
par(mar=rep(0,4));                      # Make margins 0
a=c(-200:200);
plot(a,a,type="n");                     # Start plot
for(b in 0:3){for(i in(0:3)*3+1){       # draw polygons, alternating colors and drawing all quadrants
a=c(1,1,1,-1,-1,-1,-1,1);
polygon(x[(i):(i+3)]*a[b*2+1],y[(i):(i+3)]*a[b*2+2],border=NA,col=c("#9999FF","#E5E5E5")[(i%%6%/%4+b%%2)%%2+1]);
}};
for(i in 1:4){                          # Add text to compass points for each quadrant
a=c("N","NE","E","SE","S","SW","W","NW");b=a[i*2-1];c=a[i*2];
o=c(1,1,-1,-1,1);n=o[i+1];m=o[i];
e=c(5,2)[i%%2+1];
text((x[e]+(11*abs(i%%2-1)))*m,(y[e]+(12*i%%2))*n,b,cex=1.8);
text((x[8]+10)*m,(y[8]+12)*n,c,cex=1.8)
};
dev.off()                               # Close PNG

1

Mathematica, 347 bayt

p=q={{0,0},{0,125},40{1/Sqrt[2],1/Sqrt[2]}};q[[3,1]]*=-1;m=5p[[3]]/2;s=u={{0,0},m,{32,0}};u[[3]]={0,32};r={{0,1},{-1,0}};t=Polygon[#]&;z=MatrixPower[r,#]&;a[v_]:=Table[t[z[n].#&/@v],{n,4}];i=Table[Text[#[[j]],z[j].#2],{j,4}]&;G=RGBColor["#E5E5E5"];Graphics[{i[{E,S,W,N},{0,130}],i[{NE,SE,SW,NW},1.06m],G,a[u],RGBColor["#9999FF"],a[s],a[p],G,a[q]}]

Pregolfed:

p = q = {{0, 0}, {0, 125}, 40 {1/Sqrt[2], 1/Sqrt[2]}}; (*defining points*)
q[[3, 1]] *= -1;                                       (*for triangles*)
m = 5 p[[3]]/2;
s = u = {{0, 0}, m, {32, 0}};
u[[3]] = {0, 32};
r = {{0, 1}, {-1, 0}};                                 (*-pi/2 rotation matrix*)

t = Polygon[#] &;
z = MatrixPower[r, #] &;
a[v_] := Table[t[z[n].# & /@ v], {n, 4}];              (*rotate the sets of points*)
                                                       (*four times*)

i = Table[Text[#[[j]], z[j].#2], {j, 4}] &;
G = RGBColor["#E5E5E5"];                               (*need to use this twice*)
                                                       (*so triangles overlap*)
                                                       (*properly so define a variable*)

Graphics[{i[{E, S, W, N}, {0, 130}], 
  i[{NE, SE, SW, NW}, 1.06 m], G, a[u], RGBColor["#9999FF"], a[s], 
  a[p], G, a[q]}]

Nve E(doğal günlüğünün taban) Mathematica hem yerleşik ins ama metin e bir küçük harf içine stilize alır gibi Resimde gördüğünüz ama sorun değil, yazı tipi oldukça biz sadece tüm metin için bir yazı tipini kullanabilirsiniz söylüyorlar. Bu bir gereklilikse E,"E" ve iki bayt kazanırlar.

Sqrt[2]Mathematica'da iki karakter olarak stilize edilebilir, bu yüzden her birini Sqrt[2]iki karakter olarak sayarsak, yeni bayt sayım 349 yerine 339 olur.

Aşağıdaki görüntü üretilmiştir.

Pusula

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.