La tarea
Esta es una tarea de codificación bastante simple, todo lo que su programa tiene que hacer es colocar un punto en un lienzo (o su alternativa en otro lenguaje de codificación) y conectarlo a todos los puntos ya colocados. Su programa debe incluir una entrada, la cantidad de puntos que se deben colocar y mostrar algún tipo de pantalla con los puntos conectados. Ejemplo
Requisitos
- Tengo que poder ejecutarlo, lo que significa que tiene que tener un compilador / herramienta para ejecutarlo en línea o públicamente disponible para descargar.
- Puede usar cualquier biblioteca creada antes de que se establezca este desafío, siempre que no haya sido diseñada con el único propósito de resolver esto.
- Esta es una tarea de código más corta, que significa caracteres. Se ignorarán los comentarios, el código que cambia de color (para la belleza) y las bibliotecas.
- Su respuesta debe ser única, no robe el código de otras personas, acorte algunos caracteres y vuelva a publicarlo.
- Debe poder ejecutarse en menos de 5 minutos, para los valores de 5 y 100. También debe usar una resolución de al menos 200 * 200 y colocar cada punto en una ubicación aleatoria en el lienzo utilizando una distribución no trivial.
Tabla de clasificación actual
Flawr - Matlab - 22 - Confirmed
Falko - Python 2 - 41 - Confirmed
Wyldstallyns - NetLogo - 51 - Confirmed
Ssdecontrol - R - 66 - Confirmed
David - Mathematica - 95 - Confirmed
ILoveQBasic - QBasic - 130 - Confirmed
Adriweb - TI-Nspire Lua - 145 - Confirmed
Manatwork - Bash - 148 - Confirmed
Doorknob - Python 2 - 158 - Confirmed
Kevin - TCL - 161 - Confirmed
M L - HPPPL - 231 - Confirmed
Manatwork - HTML/JS - 261 - Confirmed - Improved code of Scrblnrd3
Makando - C# - 278 - Confirmed
Scrblnrd3 - HTML/JS - 281 - Confirmed
Geobits - Java - 282 - Confirmed
Si te he extrañado, lo siento mucho, solo agrega un comentario a tu trabajo diciéndolo y lo agregaré tan pronto como lo vea =)
TL; DR
- Entrada: número de puntos (int, puede estar codificado)
- Salida: imagen de puntos colocados al azar, todos conectados entre sí (gráfico)
- Ganador - Código más corto
Respuestas:
Matlab (22)
Se supone que n es el número de puntos, y se ve así para n = 10:
n=6
:Explicación
gplot
es un comando para trazar gráficos. El primer argumento es unan x n
matriz de incidencia (llena de unos, obviamente). El segundo argumento debe ser unan x 2
matriz con las coordenadas de los puntos, pero no importa si la segunda dimensión es mayor que 2, por lo que solo genero unan x n
matriz de valores aleatorios (que es 2 caracteres más cortos que generar unan x 2
matriz).Enlaces a documentación
fuente
Java:
318 282265Porque, ya sabes, Java:
Es solo un bucle simple que crea puntos aleatorios y dibuja líneas entre el punto actual y todos los anteriores.
Ejemplo con 25 puntos:
Con saltos de línea e importaciones:
Editar: como no contamos las importaciones, importé un par de cosas más para guardar algunos caracteres más adelante.
Edición 2: OP agregó una asignación para codificar el número de puntos. -17 caracteres :)
fuente
Python 2 -
4135Después de importar algunas bibliotecas según lo permitido para este desafío
podemos trazar un número de puntos conectados con una sola línea de código:
(La captura de pantalla se generó con 10 puntos).
fuente
import
declaraciones en un desafío de golf de código normal.Mathematica
9587Con un poco de ayuda de belisario.
n = 5
n = 100
Tiempo: 2.082654 segundos
fuente
CompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
100
era innecesario incluirlo y queInput[]
era opcional.Pitón 2, 158
Importar declaraciones no incluidas en el recuento de caracteres, como se indica en la pregunta ("las bibliotecas serán ignoradas").
Resultados de muestra:
n = 2 (...):
n = 10 (parece una cosa 3d elegante o algo así):
n = 100 (parece que alguien se fue BLELEEEAARARHHH con un bolígrafo rojo):
n = 500, 1000, 10000 (se ejecuta en aproximadamente 1.5 segundos, 5-6 segundos y 3.5 minutos respectivamente):
Nota: el de 10000 puntos se ejecutó con una versión ligeramente optimizada que cambió la línea 3 (sin incluir las importaciones) a esto:
De lo contrario, habría tomado una eternidad. :PAGS
Sin golf:
fuente
x=255
y usándolo para reemplazar las instancias de200
y255
.R, 66
Esta es una trampa límite, pero todavía creo que está dentro de las reglas. Configure cargando el
igraph
paquete conlibrary(igraph)
, que se puede descargar desde CRAN coninstall.packages("igraph")
. Luego asigne la entrada a la variableN
. Según las reglas, estos no se cuentan en el total.N = 50
Tenga en cuenta que este código también dibuja las auto-conexiones. Al eliminarlos (aunque no hay una regla en contra de ellos) se agregan 6 caracteres:
R, 141
Esta es una solución honesta a la bondad en la base R:
aunque todavía tienes que ingresar
N
a mano.N = 50
Me pregunto si un
for
bucle tendría menos caracteres que,apply
pero estoy contento con lo que tengo.fuente
,"un"
al final de la primera línea.QBasic o QuickBasic, 130 caracteres
Variaciones de código
RANDOMIZE
conRANDOMIZE TIMER
.N=10
conINPUT N
oINPUT "N";N
.Ejecuciones de muestra
Para
N=5
, probado con QBasic 1.1 ejecutándose en DOSBox 0.74:Para
N=100
, probado con QBasic 1.1 ejecutándose en DOSBox 0.74:fuente
Bash + ImageMagick: 148 caracteres
Ejecución de muestra:
Salida de muestra:
Ejecución de muestra:
Salida de muestra:
Ejecución de muestra:
Salida de muestra:
fuente
TCL 161 caracteres
Claramente no va a ganar, pero supera a muchos otros presentados aquí, y creo que hace un buen uso de un lenguaje altamente infravalorado.
El tamaño de lienzo predeterminado en mi sistema parece ser 291x204. No estoy seguro de por qué, pero usarlo ahorra 13 caracteres.
Bastante rápido, 400 puntos en <5 segundos, 500 en ~ 10 s. El tamaño y los puntos se pueden escalar arbitrariamente y los colores y los estilos de línea se pueden alterar, a costa de los caracteres, por supuesto. Sin golf y utilizando variables para hacerlo más claro y fácil de escalar y colorear:
fuente
[TI-Nspire] Lua -
145135130(Versión fija actualizada)
"Importando" math.random como "r", primero, según lo permitido:
r=math.random
Código actual:
Nota: Este código funciona en las calculadoras TI-Nspire (TI agregó secuencias de comandos Lua a los sistemas operativos recientes de esta plataforma, con una API uniforme que permite a los usuarios graficar cosas, etc., por ejemplo).
También se puede probar en línea aquí (solo borrar el script de demostración y anteponer el mío con,
n=10
por ejemplo)fuente
C # formularios Windows, 268
N = 5
N = 50
El código completo se da a continuación
fuente
Pens.Tan
lugar denew Pen(Color.Tan)
?HTML / JS, 210, gracias a manatwork
JSFiddle
fuente
~~
lugar dem.floor
guardar 5 bytescanvas
etiqueta de cierre automático y quitar las comillas simples alrededor delid
valor:<canvas id=q />
. (Tenga en cuenta que debe dejar un espacio entre el último valor de atributo y el cierre automático/
). Por cierto, en Firefox funciona bien sinm.floor()
y~~
.C # WPF
306296Me gustaría decir que podría eliminar Stroke = Brushed.Red. Pero lamentablemente eso significa que estoy pintando líneas transparentes, y mi suposición es que realmente no contaría. : PI también puede reducir un par de bytes simplemente creando una cuadrícula en la vista XAML. Pero eso parecía injusto, por lo que quité el XAML para convertirlo en un lienzo en blanco. (No cuento el XAML como bytes ...)
XAML
5 5
100
fuente
var
al declarar variables.HPPPL,
231220(Lenguaje de programación HP Prime para la calculadora gráfica en color HP Prime)
Golfed hacia abajo. 11 caracteres menos dibujando todas las líneas nuevas posibles justo después de cada nueva creación de puntos. Solo dos bucles anidados en lugar de los tres anteriores.
Sin golf (270 caracteres):
ejemplos:
c (10)
c (30)
La calculadora gráfica en color HP Prime tiene una pantalla a color de 320x240 píxeles.
Un emulador que también funciona con el kit de conectividad está disponible en el sitio web de HP o aquí: http://www.hp-prime.de/en/category/6-downloads
... sigo esperando que llegue el hardware. La actualización sobre el tiempo de ejecución seguirá.
Hoy llegó mi HP Prime. Aquí está el tiempo de ejecución para n = 100 en una calculadora real:
Alrededor de 0.65 s para n = 100.
El emulador es aproximadamente 4 veces más rápido (alrededor de 0.178 s) en mi computadora portátil Core i5 2410M.
fuente
NetLogo, 51 bytes
Reemplace 9s con otras constantes o variables según sea necesario.
fuente