¡El grande, blanco, norte!


11

Eh!

Ya sabes, el problema con nosotros los canadienses es que a veces, después de un largo día de caza de alces y reparación de presas, ¡nos olvidamos de regresar a nuestras cabañas! ¿No sería genial si nuestro práctico portátil (que siempre está a nuestro lado) tuviera alguna forma de señalarnos a casa? Bueno, hace mucho que se dice que, si muestra una brújula en su computadora, será más brillante cuando apunte hacia el norte. Me gustaría probar esto, pero necesito un programa compacto para llevar conmigo en mi próximo viaje, porque mi disco duro ya está lleno de recetas de jarabe de arce (y NO PUEDEN irse). Entonces, su tarea es diseñarme un programa que, cuando se ejecuta, guarde o muestre una imagen de la siguiente rosa de los vientos:

Rosa de los vientos

Las letras pueden estar en una fuente diferente. Recuerde, lo menos es lo mejor, ¡así que gana el conteo de bytes más bajo!

Especificaciones

Colores

  • Púrpura claro: # 9999FF
  • Gray: # E5E5E5

Longitudes y ángulos

Especificaciones de Rose

  • Ángulo a= 45 °
  • Ángulo b= 90 °
  • Longitud c= 250 unidades
  • Longitud d= 200 unidades
  • Longitud e= 40 unidades
  • Longitud f= 45 unidades

Aclaraciones

  • El texto puede estar en cualquier fuente apropiada , donde apropiado denota que es legible para el ser humano promedio y educado.
  • El texto debe estar a 3 unidades de los picos en su punto más cercano, no debe tocar la rosa y debe estar en posición vertical.
  • Si se dibuja una línea desde el centro de la rosa, a través del punto final de la espiga y más allá, debe cruzar el centro del texto con una precisión de +/- 2 unidades (el texto debe estar centrado a lo largo de un eje a, donde se aextiende desde el medio de la página, hasta el final de la espiga y más allá)
  • Cada personaje debe tener al menos 15 unidades por 15 unidades y tener una relación x / y o y / x de no más de 2: 1 (sin estiramiento - legibilidad)
  • No se debe dibujar el círculo oscuro que pasa a través de los picos más largos y el texto más cercano al centro de la imagen de referencia.
  • La imagen debe ser cuadrada y al menos 400 px por 400 px
  • No se permite una imagen comprimida dentro de la fuente.
  • Una unidad debe tener al menos 1 píxel

Cuando dices "recetas de jarabe de arce", ¿te refieres a recetas para hacer jarabe de arce o recetas para hacer cosas con jarabe de arce? Porque no puedo imaginar que serían los primeros ...
Joe Z.

@JoeZ. Ambos, obviamente ... (;
globby

Respuestas:


7

HTML + CSS, 487 + 189 = 676

La rosa de los vientos se construye a partir de bordes CSS utilizando la técnica del triángulo y algunas transformaciones básicas. Las letras solo tienen posiciones fijas, por lo que resultó bastante largo: /

El fragmento a continuación se reduce para que todo encaje. Puedes ver el JSFiddle aquí . Además, no estoy seguro de qué tan bien se alinearán las letras en diferentes navegadores (con diferentes fuentes, estilos predeterminados, etc.).

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>


Parece que hay una pequeña caja gris alrededor del medio, que ha dejado la brújula inutilizable. ¿Hay alguna posibilidad de que puedas arreglar eso?
globby

1
@globby no aparece para mí. ¿Podrías publicar una captura de pantalla?
grc

imgur.com/dYQoLcM,sSrR94O Uso de Mozilla Firefox 35.0 en Windows 8.1
globby

@globby que podría ser solo un efecto de la escala. ¿Sucede en el JSFiddle de tamaño completo?
grc

3

Procesamiento 2 - 636

Una solución rápida que solo dibuja todos los triángulos usando el método de procesamiento de triángulos y luego coloca las letras en sus puntas.

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

ingrese la descripción de la imagen aquí

puedes procesar aquí


3

PHP, 628 bytes

Se agregaron algunos saltos de línea para mayor comodidad.

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

Corre con -r. Crea un archivo n.pngcon la imagen; La unidad es de 2 píxeles.

Debo admitir que encontré las coordenadas de los vientos por prueba y error, y probablemente estén un poco apagadas. Hará los cálculos pronto; pero lo prometo: no cambiarán el conteo de bytes.
Me divertí por ahora excavando mi trignonometría y luchando con imagecopy... ¡qué marica!

en golf: no muchos trucos; pero estos pocos ahorraron mucho:

  • La asignación de nombres de funciones y dos de los valores a las variables probablemente tuvo el mayor impacto.
    Ni siquiera conté antes de reemplazar los nombres de las funciones.
  • La magia con el +operador de matriz dio 42 bytes.
  • Escribir un archivo en lugar de enviar la imagen al navegador ahorró 27 bytes.
  • Mover las asignaciones al primer uso de las variables dio algunas más.

PHP North Star

Descompostura

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

Sospecho que hay mucho espacio para jugar al golf, pero quería conseguir algo para ver si lograba cumplir con las reglas.

Editar: Perdí un poco de limpieza alrededor de la creación del polígono, gané algunos borrando contornos

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

Esto produce la siguiente imagen png

ingrese la descripción de la imagen aquí

Una pequeña explicación de lo que estoy haciendo

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 bytes

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

Ny E(base del logaritmo natural) son los dos muebles empotrados en Mathematica, pero como texto E se estilizado en una minúscula fuente que se ve en la imagen, pero el problema no lo hace bastante decir que sólo podemos usar un tipo de letra para todo el texto. Si ese es un requisito, entonces reemplazo Econ "E"y gano dos bytes.

Sqrt[2]en Mathematica se puede estilizar en dos caracteres, por lo que si contamos cada uno Sqrt[2]como dos caracteres, mi nuevo conteo de bytes es 339 en lugar de 349.

La imagen a continuación se produce.

Brújula

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.