El objetivo de este código de golf es dibujar un polígono regular (uno con lados de igual longitud) dado el número de lados y el radio (distancia del centro al vértice).
- La cantidad de lados y el radio se pueden ingresar a través de un archivo, STDIN o simplemente una variable antigua. Use lo que sea más corto en su idioma.
- -25% del total de caracteres / bytes si la imagen se dibuja realmente en lugar del arte ASCII.
Respuestas:
LOGO 37 - 25% = 27.75 (con variables)
LOGOTIPO 49 - 25% = 36.75 (como una función)
Triángulo
Llamado con variables
Utilizado como una función
P 100 3
Cuadrado
Llamado con variables
Utilizado como una función
P 100 4
Pentágono
Llamado con variables
Utilizado como una función
P 100 5
Decágono
Llamado con variables
Utilizado como una función
P 100 10
Circulo
Llamado con variables
Utilizado como una función
P 100 360
fuente
Mathematica, 40 - 25% = 30
fuente
Graphics
.Graphics@RegularPolygon
no permitido?Java 8:
533322- 25% = 241.5Bueno, es Java: / Solo dibuja líneas, punto a punto. Debería funcionar para cualquier polígono de tamaño arbitrario. Reducirlo un poco del tamaño original. Gran crédito a Vulcan (en comentarios) por la lección de golf.
Saltos de línea:
La entrada es argumentos [radio] [lados]:
Salida:
fuente
java.awt.image.*
lugar dejava.awt.image.BufferedImage
Short.valueOf
lugar deInteger.valueOf
guardar cuatro bytes, ya que la entrada nunca debe exceder el rango de cortos. 2)y[]=x.clone()
ahorra un bytey[]=new int[s]
. 3) Use el obsoleto enf.show();
lugar def.setVisible(1>0);
guardar nueve bytes adicionales. 4) Use en6.28
lugar deMath.PI*2
, ya que la estimación es lo suficientemente precisa para este propósito, ahorrando tres bytes. 5) Declare enGraphics g
lugar deGraphics2D g
crear la instancia de gráficos para guardar dos bytes.BufferedImage
yGraphics
por completo y sólo tirar todo enpaint()
). Cambió el color de la imagen, aunque todavía se ve bien en la OMI. Gracias por hacerme echar otro vistazo a esto :)Frame
como una variable local, eliminando eld
entero y usando / abusando del ciclo for para guardar algunos caracteres, principalmente puntos y comas. Aquí hay una versión con espacios en blanco también.drawPolygon
lugar dedrawLine
. Versión de espacios en blanco .TeX / TikZ (60 - 80.25)
Archivo
polygon.tex
:(80 bytes)
El radio y el número de lados se proporcionan como variables / macros
\r
y\n
. Se puede dar cualquier unidad TeX para el radio. Sin unidad,cm
se utiliza la unidad predeterminada . Ejemplos:(16 bytes sin valores)
Si se debe suprimir el número de página, entonces puede hacerlo
(11 bytes)
Ejemplos para generar archivos PDF:
Puntuación:
No está claro qué se necesita contar. El rango para la puntuación sería:
El código base es 80 bytes menos 25% = 60
O todo incluido (definiciones de variables de entrada, sin número de página): (80 + 16 + 11) menos 25% = 80.25
Si la conexión entre el primer y el último punto no necesita ser suave, entonces
--cycle
podría eliminarse, ahorrando 7 bytes.fuente
Geogebra , 42-25 % = 31.5 bytes
Si cuenta en caracteres en lugar de bytes, esto sería 41 - 25% = 30.75 caracteres.
(Es decir, si considera Geogebra como un idioma ...)
Asume que el radio se almacena en la variable
r
y el número de lados almacenados en la variables
.Utiliza el teorema del coseno c 2 = a 2 + b 2 - 2 ab cos C para calcular la longitud del lado a partir del radio dado.
Salida de muestra para
s
= 7,r
= 5fuente
C:
229180(r es el radio de incircle)
Por favor, ejecute en la terminal ANSI
Editar:
compilar:
fuente
#include
s. Además, puede declararv
como global fueramain
y declararu
como un parámetro demain
, entonces no es necesarioint
(es decirv;main(u){//...
). Finalmente, puede cambiar el últimofor
ciclo enfor(j=0;j<s;)/*...*/x=j++-s/2.,//...
C, 359 caracteres
Mi primer intento de jugar al golf. Al menos supera a la solución de Java ;-)
sin golf:
Y es el único programa que genera el polígono en ASCII en lugar de dibujarlo. Debido a esto y algunos problemas de redondeo de punto flotante, el resultado no se ve particularmente bonito (los caracteres ASCII no son tan altos como anchos).
fuente
int
se puede eliminar ya que se supone queint
el compilador lo hace. Además, el últimofor
bucle se puede cambiar afor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
if(i<0)
podría ser cambiado aif(i)
. Lo que todavía se necesita solo en una iteración, pero no pudo encontrar una manera eficiente de eliminarlo :(Mathematica, 54 * 75% = 40.5
Ni siquiera creo que haya un punto para una versión sin golf. Solo contendría más espacios en blanco.
Espera el radio en variable
r
y el número de lados en variablen
. El radio no tiene sentido sin mostrar ejes, porque Mathematica escala todas las imágenes para que quepan.Ejemplo de uso:
fuente
Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
Array
.HTML / JavaScript:
215 - 25% = 161.25, 212 - 25% = 159Versión sin golf:
fuente
i=S=5;
yfor(;i-->0;)
.i-->0
parte? Es lo mismo quei-- > 0
. Algunas personas también lo llaman el operador de flecha o el operador de ir a ;)c=document.currentScript.parentNode;
y reemplazando<canvas>
por<canvas id="c">
Posdata 156 - 25% = 117
Pase el radio, el número de lados y el punto central en la línea de comando
o anteponer a la fuente
Traslade al centro, escale hasta el radio, muévase a (1,0); luego repita n veces: gire 360 / n, dibuje una línea a (1,0); dibuja la línea final, traza y emite la página.
fuente
Salvia , 44 - 25% = 33
Asume que el número de lados está almacenado en la
s
variable y el radio está almacenado en lar
variable.Salida de muestra:
s
= 5,r
= 3s
= 5,r
= 6s
= 12,r
= 5fuente
regular_polygon
función siempre genera polígonos con el primer vértice en (0,1). Una solución sería no mostrar los ejes con 7 bytes adicionales (,axes=0
despuésfigsize=r
)bc + ImageMagick + xview + bash, 104.25 (139 bytes - 25%)
Este desafío estaría incompleto sin una respuesta de ImageMagick ...
Por ejemplo,
./polygon.sh 8 100
produce esta imagen:fuente
JavaScript 584 (867 sin golf)
Este código usa N Raíces complejas de unidad y traduce los ángulos a puntos X, Y. Luego, el origen se mueve al centro del lienzo.
Golfed
Salida de muestra:
Sin golf
Este código requiere un elemento de lienzo HTML5, c es un objeto de lienzo, r es el radio yn es el número de lados.
fuente
PHP 140 - 25% = 105
Asume dos variables predefinidas:
$p
el número de puntos y$r
el radio en píxeles. Alternativamente, uno podría anteponerlist(,$r,$p)=$argv;
y usar argumentos de línea de comando en su lugar. La salida será un png, que debe canalizarse a un archivo.Salida
$r=100; $p=5;
$r=100; $p=6;
$r=100; $p=7;
$r=100; $p=50;
fuente
TI-80 BASIC, 25 bytes - 25% = 18.75
Asume que todas las configuraciones están establecidas en los valores predeterminados. Ejecute el programa como
5:PRGM_POLYGON
(para un pentágono)Funciona dibujando un círculo con un número muy bajo de pasos. Por ejemplo, un pentágono tendría pasos de 2π / 5 radianes.
Los ajustes de la ventana son lo suficientemente bueno por defecto, y
TMIN
yTMAX
se establecen en0
y2π
, así que todo lo que tenga que cambiar esTSTEP
.fuente
SmileBASIC 3,
183159 - 25% = 119.25 bytesToma los lados y el radio de
INPUT
, calcula y almacena los puntos, y luego los dibuja usandoGLINE
.Siento que esto podría ser más corto, pero es como la 1 AM, lo que sea.Asume un entorno de visualización limpio y predeterminado, por lo que es posible que lo necesiteACLS
al ejecutarlo desde DIRECTO.fuente
OpenSCAD: 31 menos 25% = 23.25
¡Primera publicación aquí! Sé que llego tarde a la fiesta, pero esta parecía una pregunta tan buena como cualquier otra para empezar. Llamar usando
p(n,r)
.fuente
ActionScript 1, Flash Player 6: 92 - 25% = 69
fuente
C # en LINQPAD
El crédito para la parte de matemáticas va a Geobits (¡espero que no te importe!) Con la respuesta de Java. No tengo esperanza en las matemáticas :)
Hice esto en LINQPAD ya que tiene una ventana de salida incorporada. Así que esencialmente puedes arrastrar y soltar lo siguiente y dibujará el polígono. Simplemente cámbielo a 'Programa C #' e importe System.Drawing lib en las propiedades de consulta.
fuente
Matlab 58 bytes - 25% = 43.5
No vi ninguna solución de Matlab, así que aquí hay una que es bastante sencilla:
Puede eliminar algunos bytes si r y n ya están en el espacio de trabajo.
Llamada de ejemplo:
fuente
Python 2, 222 bytes
Comprueba si un píxel está en el lado interno de todos los hiperplanos (líneas) del polígono. Se toca el radio porque en realidad se usa la apotema.
fuente
Mathematica 27 (= 36 - 25%)
Cuando enviamos el código de Mathematica, a menudo nos olvidamos de las nuevas funciones que se siguen incorporando al lenguaje, con el vocabulario actual del lenguaje acumulando alrededor de 5000 funciones principales . El vocabulario de idiomas amplio y en expansión es, por cierto, bastante útil para el golf de códigos. CirclePoints se introdujeron en la versión actual 11.X. Un ejemplo específico del radio 5 de 7 lados es:
También solo necesita ingresar el parámetro de ángulo para controlar la orientación de su polígono:
fuente
Python 2, 74 bytes - 25% = 55.5
La entrada está en las variables
r,n
. Si se incluye en el recuento, lo seríar,n=input()
, por 12 bytes más.Pruébelo en línea : (utiliza un código diferente ya
exec
que no está implementado en el intérprete en línea)fuente
SmileBASIC,
8575 - 25% = 56.25 bytesLas variables S y R se utilizan para la entrada.
Explicado:
Los lados se dibujan usando el color
-I
, que generalmente está cerca de -1 (& HFFFFFFFF blanco) (excepto cuandoI
es 0, cuando es transparente).También puede dibujar un polígono relleno utilizando en
GTRI N,M,X,Y,R,R,-I
lugar deGLINE...
fuente
Tikz, 199 bytes
Esta solución usa la biblioteca tikz
shapes.geometric
.Así es como se ve un polígono con
5
lados y radio8in
cuando se ve en evidencia .fuente