มหาราช, ขาว, เหนือ!


11

เอ๊ะ!

คุณรู้ไหมว่าปัญหาของพวกเราชาวแคนาดาคือบางครั้งหลังจากการล่ากวางมูซและซ่อมแซมเขื่อนมาทั้งวันเราลืมทางกลับไปที่กระท่อมของเรา! มันจะไม่ดีถ้าแล็ปท็อปที่มีประโยชน์ของเรา (ซึ่งอยู่ข้างเราเสมอ) มีวิธีที่จะชี้เรากลับบ้านได้ไหม? มันบอกกันมานานแล้วว่าถ้าคุณแสดงเข็มทิศบนคอมพิวเตอร์ของคุณมันจะสว่างที่สุดเมื่อชี้ทิศเหนือ ฉันต้องการที่จะทดสอบสิ่งนี้ แต่ฉันต้องการโปรแกรมขนาดกะทัดรัดที่จะใช้กับฉันในการเดินทางครั้งต่อไปของฉันเพราะฮาร์ดไดรฟ์ของฉันเต็มไปด้วยสูตรน้ำเชื่อมเมเปิ้ลแล้ว (และที่ไม่สามารถไปได้) ดังนั้นงานของคุณคือออกแบบโปรแกรมให้ฉันซึ่งเมื่อเรียกใช้บันทึกหรือแสดงภาพของเข็มทิศต่อไปนี้เพิ่มขึ้น:

เข็มทิศดอกกุหลาบ

ตัวอักษรอาจเป็นแบบอักษรอื่น โปรดจำไว้ว่าอย่างน้อยที่สุดจะดีที่สุดนับเป็นจำนวนไบต์ที่น้อยที่สุด!

ข้อมูลจำเพาะ

สี

  • สีม่วงอ่อน: # 9999FF
  • สีเทา: # E5E5E5

ความยาวและมุม

ข้อมูลจำเพาะของดอกกุหลาบ

  • มุมa= 45 °
  • มุมb= 90 °
  • ความยาวc= 250 หน่วย
  • ความยาวd= 200 หน่วย
  • ความยาวe= 40 หน่วย
  • ความยาวf= 45 หน่วย

ชี้แจง

  • ข้อความอาจเป็นแบบอักษรใด ๆที่เหมาะสมซึ่งเหมาะสมหมายถึงว่ามันสามารถอ่านได้โดยเฉลี่ยมนุษย์มีการศึกษา
  • ข้อความจะต้องอยู่ห่างจากแหลมเล็กน้อย 3 หน่วยที่จุดที่ใกล้ที่สุดห้ามสัมผัสดอกกุหลาบและต้องตั้งตรง
  • หากสายถูกดึงมาจากใจกลางของดอกกุหลาบที่ผ่านจุดสิ้นสุดของเข็มและเกินกว่าที่มันควรจะข้ามผ่านใจกลางของข้อความที่มีความแม่นยำของ +/- 2 หน่วยที่ (ข้อความจะต้องเป็นศูนย์กลางตามแกนa, ที่aยื่นออกมาจากตรงกลางของหน้าผ่านจุดสิ้นสุดของขัดขวางและอื่น ๆ )
  • อักขระแต่ละตัวต้องมีอย่างน้อย 15 หน่วยโดย 15 หน่วยและมีอัตราส่วน x / y หรือ y / x ไม่เกิน 2: 1 (ไม่ยืด - อ่านง่าย)
  • วงกลมสลัวที่พุ่งผ่านแหลมยาวและข้อความที่อยู่ใกล้กับกึ่งกลางของรูปภาพอ้างอิงจะไม่ถูกวาดขึ้นมา
  • รูปภาพจะต้องเป็นสี่เหลี่ยมจัตุรัสและอย่างน้อย 400px คูณ 400px
  • รูปภาพที่ถูกบีบอัดภายในแหล่งที่มาไม่ได้รับอนุญาต
  • หน่วยต้องมีอย่างน้อย 1 พิกเซล

เมื่อคุณพูดว่า "เมเปิ้ลไซรัปสูตร" คุณหมายถึงสูตรทำเมเปิ้ลไซรัปหรือสูตรทำเมเปิ้ลไซรัปหรือไม่? เพราะฉันไม่สามารถจินตนาการได้เลยว่าพวกเขาจะเป็นอดีต ...
โจซี

@JoeZ เห็นได้ชัดว่าทั้งสอง ... (;
globby

คำตอบ:


7

HTML + CSS, 487 + 189 = 676

เข็มทิศกุหลาบสร้างขึ้นจากขอบ CSS โดยใช้เทคนิคสามเหลี่ยมและการแปลงพื้นฐานบางอย่าง ตัวอักษรเพิ่งได้รับตำแหน่งที่คงที่ดังนั้นจึงค่อนข้างยาว: /

ตัวอย่างด้านล่างถูกลดขนาดลงเพื่อให้พอดีทั้งหมด คุณสามารถตรวจสอบJSFiddle ที่นี่ นอกจากนี้ฉันไม่แน่ใจว่าตัวอักษรจะจัดเรียงบนเบราว์เซอร์ที่ต่างกันได้ดีเพียงใด (ด้วยแบบอักษรที่แตกต่างกันสไตล์เริ่มต้น ฯลฯ )

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>


ดูเหมือนกับว่ามีกล่องสีเทาเล็ก ๆ อยู่ตรงกลางซึ่งทำให้เข็มทิศไม่สามารถใช้งานได้ มีโอกาสที่คุณจะแก้ไขได้ไหม?
globby

1
@ globby มันไม่ปรากฏขึ้นสำหรับฉัน คุณสามารถโพสต์หน้าจอ?
grc

imgur.com/dYQoLcM,sSrR94Oการใช้ Mozilla Firefox 35.0 บน Windows 8.1
globby

@ globby ซึ่งอาจเป็นผลของการปรับขนาด มันเกิดขึ้นกับ JSFiddle ขนาดเต็มหรือไม่
grc

3

กำลังดำเนินการ 2 - 636

วิธีแก้ปัญหาอย่างรวดเร็วที่เพิ่งวาดรูปสามเหลี่ยมทั้งหมดโดยใช้วิธีการประมวลผลแบบสามเหลี่ยมแล้ววางตัวอักษรไว้ที่คำแนะนำ

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

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถประมวลผลได้ที่นี่


3

PHP, 628 ไบต์

เพิ่ม linebreaks เล็กน้อยเพื่อความสะดวก

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

-rทำงานด้วย สร้างไฟล์n.pngด้วยภาพ; หน่วยคือ 2 พิกเซล

ฉันต้องยอมรับว่าฉันพบ coords สำหรับสายลมโดยการลองผิดลองถูกและพวกมันอาจจะออกไปเล็กน้อย จะทำการคำนวณในไม่ช้า แต่ฉันสัญญา: พวกเขาจะไม่เปลี่ยนจำนวนไบต์
มีความสนุกของฉันสำหรับตอนนี้ขุด trignonometry ของฉันและดิ้นรนกับimagecopy... สิ่งที่น่ากลัว!

ในการเล่นกอล์ฟ: มีลูกเล่นไม่มาก แต่น้อยคนนักที่ประหยัดมาก:

  • การกำหนดชื่อฟังก์ชันและสองค่าให้กับตัวแปรอาจมีผลกระทบมากที่สุด
    ฉันไม่ได้นับแม้แต่ก่อนที่ฉันจะเปลี่ยนชื่อฟังก์ชั่น
  • เวทมนตร์ที่มีตัว+ดำเนินการอาร์เรย์ให้ 42 ไบต์
  • การเขียนไฟล์แทนการส่งภาพไปยังเบราว์เซอร์ที่บันทึกไว้ 27 ไบต์
  • การย้ายการกำหนดให้กับการใช้งานครั้งแรกของตัวแปรให้เพิ่มขึ้นเล็กน้อย

PHP North Star

แตกหัก

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

มีห้องให้เล่นกอล์ฟมากมายฉันสงสัย แต่ฉันอยากได้อะไรซักอย่างเพื่อดูว่าฉันสามารถปฏิบัติตามกฎได้หรือไม่

แก้ไข: การทำความสะอาดรอบ ๆ การสร้างรูปหลายเหลี่ยมหายไปทำให้ได้รับการลบโครงร่างเล็กน้อย

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

สิ่งนี้สร้างอิมเมจ png ต่อไปนี้

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบายเล็กน้อยเกี่ยวกับสิ่งที่ฉันทำ

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 ไบต์

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

NและE(ฐานของบันทึกธรรมชาติ) มีทั้งที่สร้างขึ้น-ins ใน Mathematica แต่เป็นข้อความ E ได้รับความเก๋เข้าไปในตัวพิมพ์เล็กตัวอักษรที่คุณเห็นในภาพ แต่ปัญหาไม่ได้ค่อนข้างบอกว่าเราสามารถใช้ตัวอักษรสำหรับทุกข้อความ หากนั่นคือความต้องการแล้วแทนที่Eด้วย"E"และฉันได้รับสองไบต์

Sqrt[2]ใน Mathematica สามารถแบ่งออกเป็นสองตัวละครได้ดังนั้นหากเรานับแต่ละตัวSqrt[2]เป็นสองตัวอักษรจำนวนไบต์ใหม่ของฉันคือ 339 แทนที่จะเป็น 349

ผลิตภาพด้านล่าง

เข็มทิศ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.