Đại, Trắng, Bắc!


11

Hở!

Bạn biết đấy, vấn đề với người Canada chúng tôi là đôi khi, sau một ngày dài săn nai và sửa chữa đập, chúng tôi quên đường trở về cabin của mình! Sẽ không tuyệt sao nếu máy tính xách tay tiện dụng của chúng tôi (luôn luôn ở bên cạnh chúng tôi), có cách nào đó để chỉ chúng tôi về nhà? Chà, từ lâu đã nói rằng, nếu bạn hiển thị một la bàn trên máy tính của mình, nó sẽ sáng nhất khi chỉ về hướng Bắc. Tôi muốn thử nghiệm điều này, nhưng tôi cần một chương trình nhỏ gọn để mang theo trong chuyến đi tiếp theo, vì ổ cứng của tôi đã chứa đầy các công thức xi-rô cây thích (và những thứ KHÔNG THỂ đi được). Vì vậy, nhiệm vụ của bạn là thiết kế cho tôi một chương trình, khi chạy, lưu hoặc hiển thị hình ảnh của la bàn sau:

La bàn hoa hồng

Các chữ cái có thể ở một phông chữ khác nhau. Hãy nhớ rằng, ít nhất là tốt nhất, vì vậy số byte thấp nhất sẽ thắng!

Thông số kỹ thuật

Màu sắc

  • Màu tím nhạt: # 9999FF
  • Xám: # E5E5E5

Độ dài và góc

Thông số kỹ thuật của hoa hồng

  • Góc a= 45 °
  • Góc b= 90 °
  • Chiều dài c= 250 đơn vị
  • Chiều dài d= 200 đơn vị
  • Chiều dài e= 40 đơn vị
  • Chiều dài f= 45 đơn vị

Làm rõ

  • Các văn bản có thể ở bất kỳ phông chữ thích hợp , trong đó thích hợp biểu thị rằng nó có thể đọc được cho con người trung bình, có giáo dục.
  • Văn bản phải cách 3 mũi nhọn ở điểm gần nhất, không được chạm vào bông hồng và phải thẳng đứng
  • Nếu một dòng được vẽ từ trung tâm của hoa hồng, qua điểm cuối của cành và xa hơn, nó sẽ đi qua trung tâm của văn bản với độ chính xác +/- 2 đơn vị (văn bản phải được căn giữa dọc theo trục a, nơi akéo dài từ giữa trang, đến cuối cành và hơn thế nữa)
  • Mỗi ký tự phải có ít nhất 15 đơn vị 15 đơn vị và có tỷ lệ x / y hoặc y / x không quá 2: 1 (không kéo dài - dễ đọc)
  • Vòng tròn mờ đi qua các gai dài hơn và văn bản gần giữa trên hình ảnh tham chiếu sẽ không được vẽ.
  • Hình ảnh phải là hình vuông và ít nhất 400px x 400px
  • Một hình ảnh nén trong nguồn không được phép
  • Một đơn vị phải có ít nhất 1 pixel

Khi bạn nói "công thức xi-rô cây thích", bạn có nghĩa là công thức để làm xi-rô cây thích, hoặc công thức để làm cho ra khỏi xi-rô cây thích? Bởi vì tôi không thể tưởng tượng được họ là người cũ ...
Joe Z.

@JoeZ. Cả hai, rõ ràng là ... (;
globalby

Câu trả lời:


7

HTML + CSS, 487 + 189 = 676

Hoa hồng la bàn được xây dựng từ các đường viền CSS bằng cách sử dụng kỹ thuật tam giác và một số biến đổi cơ bản. Các chữ cái chỉ được đặt ở các vị trí cố định, do đó bật ra khá dài: /

Đoạn mã dưới đây được thu nhỏ lại để tất cả phù hợp. Bạn có thể kiểm tra JSFiddle tại đây . Ngoài ra, tôi không chắc các chữ cái sẽ xếp hàng tốt như thế nào trên các trình duyệt khác nhau (với các phông chữ khác nhau, kiểu mặc định, v.v.).

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>


Dường như có một hộp màu xám nhỏ ở giữa, khiến cho la bàn không thể sử dụng được. Có bất kỳ cơ hội bạn có thể khắc phục điều đó?
globby

1
@globby nó không hiển thị cho tôi. Bạn có thể đăng một ảnh chụp màn hình?
grc

imgur.com/dYQoLcM,sSrR94O Sử dụng Mozilla Firefox 35,0 trên Windows 8.1
globby

@globby đó có thể chỉ là một hiệu ứng của tỉ lệ. Có xảy ra trên JSFiddle kích thước đầy đủ không?
grc

3

Chế biến 2 - 636

Một giải pháp nhanh chóng chỉ vẽ tất cả các hình tam giác bằng phương pháp xử lý tam giác và sau đó đặt các chữ cái vào đầu của chúng.

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

nhập mô tả hình ảnh ở đây

bạn có thể xử lý ở đây


3

PHP, 628 byte

thêm một vài ngắt dòng cho thuận tiện.

$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");

Chạy với -r. Tạo một tập tin n.pngvới hình ảnh; đơn vị là 2 pixel.

Tôi phải thừa nhận rằng tôi đã tìm thấy các cuộn dây cho gió bằng cách dùng thử & lỗi, và chúng có thể là một chút tắt. Sẽ làm các tính toán sớm; nhưng tôi hứa: họ đã thắng trong việc thay đổi số byte.
Có niềm vui của tôi bây giờ khi khai quật hình học của tôi và đấu tranh với imagecopy... thật là một sissy!

về đánh gôn: không nhiều thủ thuật; nhưng một số ít đã tiết kiệm rất nhiều:

  • Việc gán tên hàm và hai trong số các giá trị cho các biến có thể có tác động lớn nhất.
    Tôi thậm chí đã đếm trước khi tôi thay thế tên hàm.
  • Phép thuật với +toán tử mảng đã cho 42 byte.
  • Viết một tập tin thay vì gửi hình ảnh đến trình duyệt đã lưu 27 byte.
  • Chuyển các bài tập sang cách sử dụng đầu tiên của các biến đã cho thêm một vài điều nữa.

Sao Bắc Đẩu

phá vỡ

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

Tôi nghi ngờ có rất nhiều chỗ để chơi golf, nhưng tôi muốn có một cái gì đó để xem liệu tôi có tuân thủ các quy tắc hay không.

Chỉnh sửa: Mất một vài thao tác dọn dẹp xung quanh việc tạo đa giác, thu được một vài phác thảo

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

Điều này tạo ra hình ảnh png sau đây

nhập mô tả hình ảnh ở đây

Một chút giải thích về những gì tôi đang làm

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

Toán học, 347 byte

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

Đã sẵn sàng:

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

NE(cơ sở của nhật ký tự nhiên) đều được tích hợp sẵn trong Mathicala nhưng vì văn bản E được cách điệu thành phông chữ thường bạn nhìn thấy trong ảnh nhưng vấn đề không hoàn toàn nói rằng chúng ta chỉ có thể sử dụng một phông chữ cho tất cả văn bản. Nếu đó là một yêu cầu thì thay thế Ebằng "E"và tôi có được hai byte.

Sqrt[2]trong Mathematica có thể được cách điệu thành hai ký tự, vì vậy nếu chúng ta tính mỗi Sqrt[2]ký tự là hai ký tự thì số byte mới của tôi là 339 thay vì 349.

Hình ảnh dưới đây được sản xuất.

La bàn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.