Código más corto para colocar puntos al azar y conectarlos

26

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
Alexander Craggs
fuente
1
¿Se me permiten bibliotecas de matemáticas? ¿Qué bibliotecas estás tratando de evitar exactamente con el requisito n. ° 2?
Nathan Merrill
2
¿Hay alguna limitación para la resolución? Esto es bastante fácil si me dejas imprimir una imagen 1x1
John Dvorak
3
Cuando dice que no hay bibliotecas "matemáticas", ¿qué pasa con los idiomas en los que se incluye el PRNG predeterminado en "matemáticas"? No quiero escribir un generador.
Geobits
1
Dado que no permite el código de la biblioteca que se relaciona directamente con la tarea, y esa tarea es esencialmente dibujar un gráfico de red aleatorio, ¿no está también prohibido el uso de funciones nativas de dibujo de gráficos? Esta restricción está lejos de estar bien definida.
comperendinous
3
@PopeyGilbert Debo decir que nunca he visto a un nuevo usuario tan receptivo a los problemas con sus preguntas y también probar individualmente cada respuesta y mantener una tabla de clasificación. Buen trabajo y bienvenido a PPGC!
Aficiones de Calvin

Respuestas:

21

Matlab (22)

gplot(ones(n),rand(n))

Se supone que n es el número de puntos, y se ve así para n = 10: gráfico aleatorio

n=6:

aleatorio

Explicación

gplotes un comando para trazar gráficos. El primer argumento es una n x nmatriz de incidencia (llena de unos, obviamente). El segundo argumento debe ser una n x 2matriz con las coordenadas de los puntos, pero no importa si la segunda dimensión es mayor que 2, por lo que solo genero una n x nmatriz de valores aleatorios (que es 2 caracteres más cortos que generar una n x 2matriz).

Enlaces a documentación

falla
fuente
Nunca usé Matlab, por lo que me tomará un momento probarlo, ¡pero desde la imagen se ve bien! Felicidades por hacerlo en 22 caracteres. EDITAR - Resulta que no puedo probar esto, sin embargo, mirando la imagen parece correcta, así que lo permitiré. Sin embargo, ¿alguien más puede probarlo por favor?
Alexander Craggs
3
Gracias =) Puede probarlo aquí: octave-online.net Dado que octave es básicamente la versión de código abierto de MatLab.
defecto
27

Java: 318 282 265

Porque, ya sabes, Java:

class M{public static void main(String[]a){new Frame(){public void paint(Graphics g){int i=0,j,d=640,n=25,x[]=new int[n],y[]=x.clone();for(setSize(d,d);i<n;i++)for(j=0,x[i]=(int)(random()*d),y[i]=(int)(random()*d);j<i;g.drawLine(x[i],y[i],x[j],y[j++]));}}.show();}}

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:

ingrese la descripción de la imagen aquí

Con saltos de línea e importaciones:

import java.awt.*;
import static java.lang.Math.*;

class M{
    public static void main(String[]a){
        new Frame(){
            public void paint(Graphics g){
                int i=0,j,d=640,n=25,x[]=new int[n],y[]=x.clone();
                for(setSize(d,d);i<n;i++)
                    for(j=0,x[i]=(int)(random()*d),y[i]=(int)(random()*d);
                        j<i;
                        g.drawLine(x[i],y[i],x[j],y[j++]));
            }
        }.show();
    }
}

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

Geobits
fuente
¡Agradable! Felicidades por ser el primero.
Alexander Craggs
2
Primero, pero estoy seguro de que no será el más corto por asomo. Porque, ya sabes, Java;)
Geobits
3
Admiro a las personas que siempre resuelven la tarea en Java, incluso cuando no hay esperanza, incluso sería demasiado vago para comenzar el eclipse ... entonces +1 =)
error
1
@Chruncher Sí, Java definitivamente no es el mejor lenguaje para el golf de código. Sin embargo, fue el primer idioma que aprendí, y es bastante fácil de aprender. Sin embargo, también me mantuvo bien, y personalmente es mi idioma favorito.
Alexander Craggs
1
No es necesario definir el parámetro de main como final. Puedes cortar esos 6 personajes
Cruncher
11

Python 2 - 41 35

Después de importar algunas bibliotecas según lo permitido para este desafío

from pylab import rand as r
from pylab import plot as p
from itertools import product as x
from itertools import chain as c

podemos trazar un número de puntos conectados con una sola línea de código:

X=r(5,2);p(*zip(*c(*list(x(X,X)))))

(La captura de pantalla se generó con 10 puntos).

Falko
fuente
[Refiriéndose a un comentario eliminado:] Lo sé, pero aquí "las bibliotecas serán ignoradas". Si no, definitivamente lo implementaría de manera diferente. El uso de esas bibliotecas no guarda suficientes caracteres para justificar las importdeclaraciones en un desafío de golf de código normal.
Falko
¿Es Pylab parte de la distribución estándar? Me imagino que no podemos importar lo que queramos. Bajo esa métrica, puede implementar cualquier cosa en Python con una sola declaración de importación.
Cruncher
que es . Acabo de hacer lo que pensé que sería válido. Pero no estoy seguro. Y mirar los comentarios muestra una gran discusión en curso. Tan pronto como esto se aclare, estaría dispuesto a ajustar mi código.
Falko
Aunque esta visión de las competencias sobre qué bibliotecas están permitidas parece cambiar de un día a otro, PyLab definitivamente debería permitirse.
Alexander Craggs
8

Mathematica 95 87

Con un poco de ayuda de belisario.

CompleteGraph[n, VertexSize -> {2, 2},
VertexCoordinates -> Table[RandomInteger[{0, 199}, 2], {n}]]

n = 5

5 5


n = 100

Tiempo: 2.082654 segundos

100

DavidC
fuente
Esto está verificado, ¡lo he conseguido! ¿Mathematica normalmente cuenta como un lenguaje?
Alexander Craggs
1
@PopeyGilbert Claro que sí. Hay ~ 750 respuestas en Mathematica hasta ahora.
Geobits
Oh, wow, está bien! Bastante justo <3
Alexander Craggs
Creo que esto es más corto y satisface las reglasCompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
Dr. belisarius
Gracias, tienes razón. Pensé que no podía ganar, así que pensé que sería bonito (VertexSize -> {2,2}. Sin embargo, pasé por alto el hecho de que 100era innecesario incluirlo y que Input[]era opcional.
DavidC
7

Pitón 2, 158

Importar declaraciones no incluidas en el recuento de caracteres, como se indica en la pregunta ("las bibliotecas serán ignoradas").

from PIL import Image,ImageDraw
from random import randint

s=[(randint(0,200),randint(0,200))for _ in range(int(input()))]
i=Image.new('RGB',(200,200))
[ImageDraw.Draw(i).line((p,q),255)for p in s for q in s]
i.show()

Resultados de muestra:

n = 2 (...):

n = 2

n = 10 (parece una cosa 3d elegante o algo así):

n = 10

n = 100 (parece que alguien se fue BLELEEEAARARHHH con un bolígrafo rojo):

n = 100

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:

d=ImageDraw.Draw
for p in s:
  for q in s:d.line((p,q),255)

De lo contrario, habría tomado una eternidad. :PAGS

Sin golf:

from PIL import Image, ImageDraw
from random import randint
point_count = int(input())
image_size = 200
points = [(randint(0, image_size), randint(0, image_size)) for _ in range(point_count)]
image = Image.new('RGB', (200, 200))
draw = ImageDraw.Draw(image)
for start_point in points:
    for end_point in points:
        draw.line((start_point, end_point), 255)
image.show()
Pomo de la puerta
fuente
1
¡Felicidades por ser actualmente el participante más bajo! Me encanta tu comentario sobre n = 100. Podría ser mejor poner image.new e image_size a 800. Podría parecer menos extraño =)
Alexander Craggs
@PopeyGilbert ¿Entonces puedo eliminar las declaraciones de importación de la mía? Supuse que "ignorar bibliotecas" significaba que la biblioteca en sí no se contaba (como de costumbre).
Geobits
Sí, porque algunos idiomas tienen muy pocas funciones básicas y tienen que importar todas sus cosas. Si crees que esto no es justo Geobits, entonces di =) Quiero intentar que esto sea justo.
Alexander Craggs
@PopeyGilbert Solo pregunté porque no es la norma y quería aclararlo antes de cortar algunos caracteres más de mi código: D
Geobits
1
Dado que la resolución solo tiene que ser de al menos 200x200, puede guardar algunos caracteres (5, creo) configurándolo x=255y usándolo para reemplazar las instancias de 200y 255.
concurrente
5

R, 66

Esta es una trampa límite, pero todavía creo que está dentro de las reglas. Configure cargando el igraphpaquete con library(igraph), que se puede descargar desde CRAN con install.packages("igraph"). Luego asigne la entrada a la variable N. Según las reglas, estos no se cuentan en el total.

G=graph.adjacency(matrix(1,N,N),"un")
plot(G,layout=layout.random)

N = 50

ingrese la descripción de la imagen aquí

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:

G=graph.adjacency(matrix(1,N,N),"un",diag=F)
plot(G,layout=layout.random)

R, 141

Esta es una solución honesta a la bondad en la base R:

p=replicate(2,runif(N))
g=as.matrix(expand.grid(1:N,1:N))
plot.new()
apply(g,1,function(i) segments(p[i[1],1],p[i[1],2],p[i[2],1],p[i[2],2]))

aunque todavía tienes que ingresar Na mano.

N = 50

ingrese la descripción de la imagen aquí

Me pregunto si un forbucle tendría menos caracteres que, applypero estoy contento con lo que tengo.

Shadowtalker
fuente
Aceptaré autoconexiones, técnicamente la pregunta es dibujar una línea a TODOS los puntos. Lo he probado y también lo he confirmado.
Alexander Craggs
¿Te importa las flechas que conectan los puntos? Eso ahorrará otros 5 al eliminar ,"un"al final de la primera línea.
shadowtalker
Si no le importa, creo que deberíamos mantenerlo, por lo que tiene que ser líneas que conecten cada uno de los puntos. De esa manera, la respuesta aparecerá similar en cada una de las respuestas.
Alexander Craggs
5

QBasic o QuickBasic, 130 caracteres

SCREEN 1:RANDOMIZE:N=10:DIM X(100),Y(100):FOR I=1 TO N:X(I)=RND*320:Y(I)=RND*200:FOR J=1 TO I:LINE(X(I),Y(I))-(X(J),Y(J)):NEXT J,I

Variaciones de código

  • Si no desea que se le solicite una semilla, reemplácela RANDOMIZEcon RANDOMIZE TIMER.
  • Si desea que se le solicite N, reemplácelo N=10con INPUT No INPUT "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:

ILoveQBasic
fuente
¡Oh, qué buena imagen para N = 5! Me encanta que sea un pentagrama cuando la semilla tiene 42 años. Probado y confirmado.
Alexander Craggs
4

Bash + ImageMagick: 148 caracteres

c=()
while((i++<$1)); do
p=$[RANDOM%200],$[RANDOM%200]
c+=($p)
for e in ${c[@]};do
d+="line $p $e"
done
done
convert -size 200x200 xc: -draw "$d" x:

Ejecución de muestra:

bash-4.3$ time ./line.sh 5

real    0m5.256s
user    0m0.137s
sys     0m0.017s

Salida de muestra:

5 puntos conectados

Ejecución de muestra:

bash-4.3$ time ./line.sh 25

real    0m3.043s
user    0m0.574s
sys     0m0.023s

Salida de muestra:

25 puntos conectados

Ejecución de muestra:

bash-4.3$ time ./line.sh 100

real    0m5.662s
user    0m11.156s
sys     0m0.076s

Salida de muestra:

100 puntos conectados

hombre trabajando
fuente
Probado y confirmado. Bien hecho manatwork!
Alexander Craggs
Lo siento mucho, ¿olvidé completamente agregar esto a las tablas de clasificación? Lo haré ahora.
Alexander Craggs
4

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.

for {set i 0} {$i<10} {incr i} {lappend l [expr rand()*291] [expr rand()*204]}
pack [canvas .c]
foreach {x y} $l {foreach {w z} $l {.c create line $x $y $w $z}}

Ejemplo

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:

set n 20
set width 500
set height 500
set bg_color black
set line_color white
for {set i 0} {$i < $n} {incr i} {
        lappend points [expr rand() * $width] [expr rand() * $height]
}
canvas .c -width $width -height $height -background $bg_color 
pack .c
foreach {x1 y1} $points {
        foreach {x2 y2} $points {
                .c create line $x1 $y1 $x2 $y2 -fill $line_color
        }
}       
Kevin
fuente
1
La imagen parece estar bien, desafortunadamente mi computadora no funciona, así que la probaré más tarde. Felicitaciones por usar un lenguaje tan poco apreciado.
Alexander Craggs
Lo acabo de confirmar, ¡felicidades por una entrada exitosa!
Alexander Craggs
129
sergiol
122
sergiol
4

[TI-Nspire] Lua - 145 135 130

(Versión fija actualizada)

Captura de pantalla con n = 10

"Importando" math.random como "r", primero, según lo permitido: r=math.random

Código actual:

function on.paint(g)t={}for b=1,2*n-1,2 do t[b]=r(318)t[b+1]=r(212)for c=1,b-1,2 do g:drawLine(t[b],t[b+1],t[c],t[c+1])end end end

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=10por ejemplo)

Adriweb
fuente
¡Es hora de que aprenda Lua!
Beta Decay
1
Esto parece sufrir por el mismo error que el PowerShell eliminado de fuandon respuesta y Vlo también s borrado R respuesta: conectar los puntos en pareja, no todos los puntos con todos los demás puntos. (Lua es muy raro en este sitio. Por favor, arregle su código en lugar de eliminarlo)
Manatwork
¡Qué mal! ¡Lo arreglaré pronto!
Adriweb
Ahí vamos, gracias por avisarme :)
Adriweb
¡Esto ha sido probado y confirmado! Bien hecho por usar Lua.
Alexander Craggs
3

C # formularios Windows, 268

static void k(int n,int s){var f=new Form{Height=s+50,Width=s+25};f.Paint+=(u,v)=>{var r=new Random();var p=new Point[n];while(n>0)p[--n]=new Point(r.Next(s),r.Next(s));foreach(var a in p)foreach(var b in p)f.CreateGraphics().DrawLine(Pens.Tan,a,b);};f.ShowDialog();}

N = 5

Trazar con 5 puntos

N = 50

Trazar usando N = 50

El código completo se da a continuación

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    static class Program
    {
        static void Main()
        {
            k(50, 200);
        }
        static void k(int n, int s)
        {
            var f = new Form {Height = s + 50, Width = s + 25};
            f.Paint += (u, v) =>
            {
                var r = new Random();
                var p = new Point[n];
                while (n > 0)
                    p[--n] = new Point(r.Next(s), r.Next(s));
                foreach (var a in p)
                    foreach (var b in p)
                        f.CreateGraphics().DrawLine(Pens.Tan, a, b);
            };
            f.ShowDialog();
        }
    }
}
Codificador Zed
fuente
Probado y confirmado! Cuando verifiqué el recuento de caracteres, utilicé el código completo y me sorprendió cuando se trataba de <700 caracteres ...>. <. De todos modos, ¡felicidades por hacer una entrada exitosa!
Alexander Craggs
¿No hay algún atajo como en Pens.Tanlugar de new Pen(Color.Tan)?
CompuChip
Se cambió para usar Bolígrafos. Tan, ahorrando un extra de 10
Zed Coder
2

HTML / JS, 210, gracias a manatwork

<canvas id=q /><script>c=q.getContext("2d");r=Math.random;e=prompt(a=[]);for(i=0;i<e;i++){a[i]={x:r()*300,y:r()*150};for(j in a)c.beginPath()+c.moveTo(a[i].x,a[i].y)+c.lineTo(a[j].x,a[j].y)+c.stroke()}</script>

JSFiddle

scrblnrd3
fuente
Esto está verificado, ¡lo he conseguido!
Alexander Craggs
Puede usar en ~~lugar de m.floorguardar 5 bytes
William Barbosa
Hacer que la canvasetiqueta de cierre automático y quitar las comillas simples alrededor del idvalor: <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 sin m.floor()y ~~.
manatwork
219 caracteres: jsfiddle.net/e866azzs/5
manatwork
La primera vez que probé jsfiddle de manatwork, ¡pensé que el cuadro de alerta necesitaba una contraseña! Estaba perplejo. Qué estúpida puede ser una persona. Creo que esto es lo suficientemente diferente a la respuesta de otras personas para garantizar otro lugar en la tabla de líderes. ¿Otras personas piensan que esto es lo suficientemente diferente?
Alexander Craggs
2

C # WPF 306 296

partial class W:Window{public W(){InitializeComponent();int x=5,i=0,j,z=200;int[]f=new int[x],s=new int[x];var r=new Random();var X=new Grid();AddChild(X);for(;i<x;i++){f[i]=r.Next(z);s[i]=r.Next(z);for(j=i;j>=0;)X.Children.Add(newLine(){X1=s[j],Y1=f[j--],X2=s[i],Y2=f[i],Stroke=Brushes.Red});}}}

Me 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 ...)

partial class W:Window
{
    public W()
    {
        InitializeComponent();
        int x=5,i=0,j,z=200;
        int[]f=new int[x],s=new int[x];
        var r = new Random();
        var X = new Grid();
        AddChild(X);
        for (;i<x;i++)
        {
            f[i]=r.Next(z);
            s[i]=r.Next(z);
            for (j=i;j>=0;)
                X.Children.Add(new Line()
                {
                    X1 = s[j],
                    Y1 = f[j--],
                    X2 = s[i],
                    Y2 = f[i],
                    Stroke = Brushes.Red
                });
        }
    }
}

XAML

<Window x:Class="W"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
</Window>

5 5

5 5

100

100

WozzeC
fuente
44
Como es WPF, se bloqueará en alrededor de 3k puntos por excepción de memoria insuficiente.
WozzeC
Probado y confirmado, ¡bien hecho en C # WPF!
Alexander Craggs
2
Podría acortarse un poco si se usa varal declarar variables.
MarcinJuraszek
Si, de hecho. ¡Gracias! También pude eliminar "this" de "this.AddChild".
WozzeC
1

HPPPL, 231 220

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

export c(n) begin rect();local g,h;a:=makemat(0,n,2);for g from 1 to n do a(g,1):=ip(random(1,320));a(g,2):=ip(random(1,240));if g>1 then for h from 1 to g-1 do line_p(a(h,1),a(h,2),a(g,1),a(g,2));end;end;end;freeze;end;

Sin golf (270 caracteres):

export randomnet(n)
begin
rect();
local g,h;
a:=makemat(0,n,2);
for g from 1 to n do
  a(g,1):=ip(random(1,320));
  a(g,2):=ip(random(1,240));
    if g>1 then
      for h from 1 to g-1 do
        line_p(a(h,1),a(h,2),a(g,1),a(g,2));
      end;
    end;
end;
freeze;
end;

ejemplos:

c (10)

connect_10_points_HPPPL

connect_10_points_HPPPL_2

c (30)

connect_30_points_HPPPL

La calculadora gráfica en color HP Prime tiene una pantalla a color de 320x240 píxeles.

ingrese la descripción de la imagen aquí

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:

tiempo de ejecución promedio

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.

ML
fuente
1
Bueno, nunca he oído hablar de ese lenguaje de programación, pero funcionó en el emulador, ¡así que felicidades! Te he agregado a la tabla de clasificación.
Alexander Craggs
Gracias. Tan pronto como tenga el hardware, comprobaré el tiempo de ejecución. El emulador es más rápido que la calculadora real. Pero creo que el límite de 5 minutos para n = 100 es muy generoso para la calculadora.
ML
1

NetLogo, 51 bytes

crt 9 [create-links-with other turtles fd random 9]

Reemplace 9s con otras constantes o variables según sea necesario.

Salida de NetLogo

wyldstallyns
fuente
1
Añadido a la tabla de clasificación! Me temo que no estoy completamente seguro de cómo probar esto. Descargué NetLogo y lo escribí en la sección de observadores, luego intenté configurarlo como un comando de lápiz en una trama, ninguno parecía funcionar. Si pudiera darme algunos consejos, podría confirmarlo =)
Alexander Craggs
Por ejemplo: vaya a la pestaña 'código' y ajuste esa línea en una función que comienza "ir" y se detiene con "fin". Luego puede agregar un botón al primero que llame "ir" y pulsarlo.
wyldstallyns
1
¡Confirmado! Hermosa solución Es genial cómo si sabes qué es una tortuga puedes leer el código como si fuera inglés. Seguramente la solución más legible hasta el momento.
Alexander Craggs
¡Ordenado! ¡Gracias! Estuve atento a preguntas como esta que NetLogo está orientado a resolver. Irónicamente, también estoy construyendo un front-end de Pyth-ish para eliminar esa buena verbosidad para tratar de hacer de NetLogo un verdadero contendiente de golf.
wyldstallyns
1
¡Eh, pensé que todavía era una excelente respuesta! No puedo esperar a ver su código Pyth NetLogo, ¡espero que sea un espectáculo para la vista!
Alexander Craggs