Dibuje líneas entre cada par de puntos distintos para los n
puntos dispuestos en un círculo, produciendo algo así como el resultado a continuación. ¡El código más corto (en bytes) gana! Sus líneas no tienen que ser transparentes, pero se ve mejor así. La salida debe ser un gráfico vectorial o una imagen de al menos 600 píxeles por 600 píxeles (ya sea guardada en un archivo o mostrada en la pantalla). Para completar el desafío debes dibujar al menos 20.
code-golf
kolmogorov-complexity
graphical-output
J. Antonio Perez
fuente
fuente
n
y dibujar líneas para obtenern
puntos.n
agregaría mucho al desafío, ya que espero que la mayoría de las soluciones funcionen con cualquier número de todos modos, especialmente porque 37 es impar y, por lo tanto, no hay simetrías espejo.n
como entrada o simplemente elegimos un arbitrarion
sobre 20?Respuestas:
Mathematica, 13 bytes
Parece que esto solo no puede dar una incrustación circular
n=4
, pero la pregunta dicen>=20
fuente
n
(tenía la respuesta lista de los 37 arreglados) :(MATL ,
1614 bytesComo no soy terriblemente fluido con MATL, espero que esto sea algo más golfable. (Sería bueno al menos vencer a Mathematica :-) Es decir, el cambio
w
no es óptimo, probablemente podría evitarse ...¡Pruébelo en línea! (Gracias @Suever por este servicio, gracias @DrMcMoylex por -2 bytes).
Explicación (para
N=3
):Vale la pena señalar que para generar las enésimas raíces de la unidad, puede usar la fórmula
exp(2*pi*i*k/N)
parak=1,2,3,...,N
. Pero yaexp(pi*i/2) = i
que también podrías escribiri^(4*k/N)
parak=1,2,3,...,N
que es lo que estoy haciendo aquí.fuente
XH:H
a:G
G
muchas gracias!PICO-8 , 131 bytes
No estaba realmente seguro si estaría rompiendo alguna regla, ¡pero lo hice de todos modos!
Golfed
Sin golf
PICO-8 es una consola de fantasía basada en Lua con una resolución nativa de 128x128. Hice el círculo lo más grande que pude ...
fuente
Mathematica, 42 bytes
Crea un conjunto de 37 puntos dispuestos en un círculo y luego dibuja líneas entre todos los subconjuntos posibles de dos puntos. Alguien publicó una respuesta más corta que aprovecha CompleteGraph, pero creo que esta es la más corta, aparte de las que dependen de CompleteGraph.
fuente
Tuple
. También necesita actualizar esto para aceptar arbitrarion
, pero convenientemente eso no le costará ningún byte.Tuples
HTML + JS (ES6), 34 +
177164162 = 196 bytesUsando la API HTML5 Canvas .
Véalo en CodePen .
-13 bytes : eliminado
closePath()
, movidostroke()
dentrobeginPath()
-2 bytes : variable definida
a
dentrorotate()
fuente
Java,
346338322301 BytesEsta solución funciona para todos
n>1
, aunque la publicación original no lo requería, sí lo hace.Mi favorito es
n=5
, no preguntes por qué, también, si quieres una GUI más fresca, usa:int a=Math.min(this.getHeight(),this.getWidth())/2;
En lugar del 300 codificado, usará el ancho o la altura del marco como el diámetro.
Guardado 8 bytes gracias a Shooqie. Guardado 21 bytes gracias a Geobits.
Salida para
n=37
:fuente
Frame x=
yfinal
(creo)Frame x
era de otra solución que involucraba un hilo. Sin embargo, necesita el final ya que es una referencia de clase interna a una variable externa en la clase propietaria.int
declaraciones fuera de losfor
buclesPython 2,
258235229 BytesSalida para
n=37
fuente
from PIL import*
más corto?import *
, dependiendo de cómo lo instales, puedes saltear el PIL e importar Image / ImageDraw directamenteOctava,
8869 bytesSalida para
N=37
:Salida para
N=19
:fuente
gplot
también fue , pero no pude hacerlo lo suficientemente corto ...Perl, 229 bytes
Utiliza la misma fórmula que la mayoría de los idiomas que no tienen una solución integrada conveniente para este desafío (incluso si no los miré para encontrarlo, pero esa es una fórmula bastante fácil de encontrar). Por lo tanto, no es muy interesante, pero por lo general no hay muchas respuestas de Perl para este tipo de desafíos, así que solo quería proponer uno.
Y necesitará
-MImager
(9 bytes),-MMath::Trig
(proporcionandopi
, 13 bytes) y-n
(1 byte) ==> + 23 bytes.Para ejecutarlo:
Creará un archivo llamado
t.png
que contiene la imagen.Sin
Imager
embargo, deberá instalarlo , pero no se preocupe, es bastante fácil:(Los
echo
s lo configurarán cpan si nunca lo ha usado antes (en realidad, eso solo funcionará si su perl es lo suficientemente reciente, creo que para la mayoría de ustedes lo será, ¡y lo siento por los demás!)) .Y la versión más legible (sí, ¡es bastante legible para un script Perl!):
-1 byte gracias a Titus.
fuente
for
bucles, entonces sí, son obligatorios.y2
. Apuesto a que no necesitas eso. ¿Y puedes escribir a STDOUT?GeoGebra , 92 bytes
Cada línea se ingresa por separado en la barra de entrada. Aquí hay un gif que muestra la ejecución:
Cómo funciona
El
polygon
comando crea un polígono de 20 lados, con los vértices de la línea base en(0,0)
y(1,0)
. El siguiente comando itera sobre cada vértice del polígono con índicei
, usando los comandossequence
yvertex
, y para cada vértice con índicei
, dibuja un segmento de línea a cada vértice con índicej
usando elsegment
comando.fuente
PHP,
186184196 bytesescribe la imagen en STDOUT
Descompostura
-12 bytes para fijo
n=20
Reemplace
$p=2*M_PI
con6
(-8),/=$argv[1]
con=M_PI/10
(-2) y$b>0
con$b
(-2)Usar PI / 10 exacto no hace daño. Con
.3142
, los errores de redondeo de la versión parametrizada permanecieron, pero conM_PI/10
ellos desaparecieron y puedo verificar$b
(<> 0) en lugar de$b>0
. Podría haber guardado dos bytes con.314
, pero eso habría compensado los puntos.El límite
$a<6
es suficientemente exacto para 20 puntos.174 bytes para fijo
n=314
El uso de 314 puntos da como resultado un círculo lleno en esa resolución (al igual que 136,140, cada número par por encima de eso y todo por encima de 317).
fuente
NetLogo - 44 bytes
fuente
R,
127123 bytesProduce:
Etiquetas de eje agradable ¿eh?
-4 bytes gracias a @Titus!
fuente
for(i in 2:n){for(j in 1:i)...}
. ¿R
Requiere los frenos?BBC BASIC, 98 caracteres ascii
Tamaño de archivo tokenizado 86 bytes
Descargar intérprete en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
No hay nada de malo en dibujar cada línea dos veces, la apariencia es idéntica :-P
Sin golf
Salida n = 21
Esto se ve mucho mejor en la representación original que en el navegador.
fuente
LINE
función. BeatsDRAW
...Octava,
50 48 4645 bytesEsta es una función anónima que traza el gráfico que estamos buscando.
Explicación:
(k=0:2*pi/N:N)+k'
N+1 x N+1
Crea una matriz de adyacencia completa y simultáneamente define el vectork
de ángulos, que usamos para[cos(k);sin(k)]'
una matriz de coordenadas donde se ubica cada nodo del gráfico.gplot
simplemente traza el gráfico que queremos.Porque
N = 29
obtenemos:fuente
JavaScript (ES5) / SVG (HTML5), 181 bytes
Solo funciona para números primos, como la sugerencia original de 37. Puede reducir a la mitad (redondear) el valor inicial de
i
para obtener una imagen más débil. También puede ajustar consistentemente1e3,2e3
a otros valores al gusto (comencé con,300,600
pero decidí que era demasiado grueso).fuente
MATLAB, 36 bytes
Esta es una función anónima que crea la trama.
Ejemplo:
fuente
graph
que no sea parte de la caja de herramientas bioinformáticas ... ni siquiera sabía que existía ... Agradable :)QBasic 4.5,
398271 bytesLa pantalla en QBasic solo puede ser 640x480, por lo que el círculo tiene un radio de solo 230 px, desafortunadamente. Además, hay algunos artefactos debido a la pérdida de precisión flotante a int. Se ve así para
N=36
:EDITAR: no necesitaba el almacenamiento, la declaración de tipo y todo el bucle. Calcular todos los carthesianos a partir de Polares en su lugar es un 50% más barato en conteo de bytes ...
fuente
QBIC ,
9894 bytesHe convertido
mi respuesta original de QBasic@LevelRiverSt 's respuesta a QBIC. Pensé que esto dependería demasiado de las funciones que no están integradas en QBIC para ser factible, pero resulta que ahorra otros 90 bytes. SustituyendoDRAW
porLINE
guarda otros 80 bytes. Sabía que estaba olvidando algo simple ...Cuando se ejecuta con un parámetro de línea de comando de 36, se ve así:
fuente
Procesamiento, 274 bytes (239 +
size
llamada y llamada a función)Sinceramente, no sé por qué, pero
setup
tenía que estar en la segunda línea. Usé https://en.wikipedia.org/wiki/Rotation_matrix para ayudarme a calcular las matemáticas para la rotación. Este programa calcula los puntos y los empuja a una matriz, con la que estamos utilizando para dibujar líneas.Aquí hay una imagen de un polígono con 50 bordes (el de 100 bordes era casi completamente negro)
Puede agregar
stroke(0,alpha);
para tener bordes transparentes, dondealpha
está la opacidad de la línea. Aquí está el mismo polígono conalpha
de20
.fuente
Bash + Jelly + GraphViz, 52 caracteres, 52 o 63 bytes
Dado que los programas en cuestión no están de acuerdo sobre qué codificación de caracteres utilizar, el programa está lleno de caracteres de control. Esto es lo que parece debajo
xxd
, en la codificación Latin-1 (que representa cada carácter en un byte):Sin embargo, no pude hacer que el programa se ejecute sin convertir la entrada en UTF-8 por alguna razón (lo que lo haría 63 bytes de largo). Lógicamente, debería funcionar como Latin-1 (ninguno de los caracteres está fuera del rango de 0 a 255), pero sigo obteniendo errores de "índice de cadena fuera de rango" sin importar cómo configuro las variables de entorno de codificación de caracteres. Por lo tanto, esto tendrá que contarse como 63 bytes, a menos que alguien pueda encontrar una manera de ejecutarlo sin volver a codificarlo.
El programa podría ser un poco más legible si lo interpretamos en la codificación de Jelly:
El programa toma el número de puntos en la entrada estándar y genera una imagen PostScript en la salida estándar. (Se puede adaptar trivialmente a la salida en cualquier formato que GraphViz admita cambiando
-Tps
al final; es solo que PostScript tiene el nombre más corto. Posiblemente, puede guardar cinco caracteres quitando el-Tps
, pero luego obtiene la salida en el formato de imagen interno de GraphViz que nada más admite, lo que probablemente no cuenta para los propósitos de la pregunta).Básicamente, este es solo un programa Jelly que llama a GraphViz para hacer el dibujo; sin embargo, Jelly no parece tener ninguna capacidad para ejecutar programas externos, por lo que tuve que usar bash para vincularlos. (Esto también significa que es más barato hacer que Jelly solicite la entrada de stdin manualmente; normalmente toma la entrada de la línea de comando, pero eso significaría bytes adicionales en el contenedor bash). Organizará
circo
automáticamente todos los puntos que se le pide que dibuje en un círculo. , por lo que el código Jelly solo tiene que pedirle que dibuje una lista de puntos, todos los cuales están conectados entre sí. Así es como funciona:El uso de Jelly nos permite comprimir ligeramente la cadena que configura la salida de GraphViz a través de su diccionario incorporado. El diccionario tiene
graph
,node
ypoint
. Molesto, no tieneshape
(tieneSHAPE
, pero GraphViz distingue entre mayúsculas y minúsculas), por lo que tenemos que codificar ese carácter por carácter.Aquí está la salida para la entrada 21 (con una ligera modificación en el programa para que salga en un formato que pueda cargarse en Stack Exchange):
fuente
PHP + HTML SVG,
316263 bytesVersión de golf con
n
puntos codificados y sinn
parámetro de entrada :Versión anterior de golf con parámetro de entrada para
n
puntos, 316 bytes:Uso: guardar en un archivo y llamar desde el navegador:
Versión sin golf con parámetro de entrada para
n
puntos y CSS:No se pudo adjuntar un fragmento totalmente funcional de 32 puntos debido al límite de 30k caracteres para una sola publicación. Aquí hay una captura de pantalla:
El fragmento adjunto está limitado a 18 puntos debido al límite de 30,000 mensajes individuales.
Mostrar fragmento de código
fuente
R, 108 bytes
Podría eliminar 5 bytes si me deshago del argumento
,as=1
que fuerza una relación de aspecto de 1. Usaexpand.grid
para crear una matriz con todos los pares de puntos posibles, y usaapply
para recorrerlo.R + igraph, 87 bytes
Otra solución usando paquete
igraph
.fuente