Kürzester Code, um Punkte zufällig zu platzieren und zu verbinden

26

Die Aufgabe

Dies ist eine recht einfache Codierungsaufgabe. Alles, was Ihr Programm tun muss, ist, einen Punkt auf einer Zeichenfläche (oder Ihre Alternative in einer anderen Codierungssprache) zu platzieren und ihn mit allen bereits platzierten Punkten zu verbinden. Ihr Programm muss eine Eingabe, die Anzahl der Punkte, die platziert werden sollen, und eine Art Anzeige mit den verbundenen Punkten ausgeben. Beispiel

Bedarf

  • Ich muss in der Lage sein, es auszuführen, was bedeutet, dass es einen Compiler / ein Tool haben muss, um es entweder online auszuführen oder öffentlich zum Herunterladen verfügbar zu sein.
  • Sie dürfen jede Bibliothek verwenden, die vor dem Festlegen dieser Herausforderung erstellt wurde, sofern sie nicht ausschließlich zu diesem Zweck entwickelt wurde.
  • Dies ist eine kürzeste Code-Aufgabe, dh Zeichen. Kommentare, Code, der die Farbe ändert (um hübsch zu sein) und Bibliotheken werden ignoriert.
  • Ihre Antwort muss eindeutig sein, stehlen Sie nicht den Code anderer Leute, kürzen Sie ihn um einige Zeichen und veröffentlichen Sie ihn erneut.
  • Es muss für die Werte 5 und 100 in weniger als 5 Minuten ausgeführt werden können. Außerdem muss eine Auflösung von mindestens 200 * 200 verwendet und jeder Punkt an einer zufälligen Stelle auf der Leinwand mit einer nicht trivialen Verteilung platziert werden.

Aktuelle Rangliste

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

Wenn ich dich vermisst habe, tut es mir sehr leid, füge einfach einen Kommentar zu deiner Arbeit hinzu und ich werde ihn hinzufügen, sobald ich ihn sehe =)

TL; DR

  • Eingabe - Anzahl der Punkte (int, kann fest codiert werden)
  • Ausgabe - Bild von zufällig platzierten Punkten, die alle miteinander verbunden sind (Grafik)
  • Gewinner - Kürzester Code
Alexander Craggs
quelle
1
Darf ich Mathematikbibliotheken? Welche Bibliotheken genau möchten Sie mit Anforderung 2 vermeiden?
Nathan Merrill
2
Gibt es eine Einschränkung für die Auflösung? Das ist ganz einfach, wenn Sie mir
John Dvorak
3
Wenn Sie keine "math" -Bibliotheken sagen, was ist mit Sprachen, in denen das Standard-PRNG in "math" enthalten ist? Ich möchte keinen Generator schreiben.
Geobits
1
Da Sie Bibliothekscode nicht zulassen, der sich direkt auf die Aufgabe bezieht, und der im Wesentlichen das Zeichnen eines zufälligen Netzwerkgraphen ist, ist die Verwendung nativer Funktionen zum Zeichnen von Diagrammen nicht auch nicht zulässig? Diese Einschränkung ist alles andere als klar definiert.
Super
3
@PopeyGilbert Ich muss sagen, ich habe noch nie einen neuen Benutzer gesehen, der so auf Probleme mit seiner Frage reagiert und auch jede Antwort einzeln testet und eine Rangliste führt. Gute Arbeit und willkommen bei PPGC!
Calvins Hobbys

Antworten:

21

Matlab (22)

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

Es wird angenommen, dass n die Anzahl der Punkte ist und dies für n = 10 so aussieht: zufälliger Graph

n=6:

zufällig

Erklärung

gplotist ein Befehl zum Zeichnen von Graphen. Das erste Argument ist eine n x nInzidenzmatrix (offensichtlich voller Einsen). Das zweite Argument sollte eine n x 2Matrix mit den Koordinaten der Punkte sein, aber es spielt keine Rolle, ob die zweite Dimension größer als 2 ist, also erstelle ich einfach eine n x nMatrix aus Zufallswerten (die 2 Zeichen kürzer ist als das Erzeugen einer n x 2Matrix).

Links zur Dokumentation

Fehler
quelle
Ich habe Matlab noch nie benutzt, daher wird es einen Moment dauern, es zu testen - aber vom Bild aus sieht es in Ordnung aus! Herzlichen Glückwunsch dazu in 22 Zeichen. BEARBEITEN - Es stellt sich heraus, dass ich das nicht testen kann. Wenn ich jedoch das Bild betrachte, scheint es korrekt zu sein, also werde ich es zulassen. Kann es aber bitte jemand anderes testen?
Alexander Craggs
3
Danke =) Sie können es hier testen: octave-online.net Da octave im Grunde die OpenSource-Version von MatLab ist.
Fehler
27

Java: 318 282 265

Weil, weißt du, 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 ist nur eine einfache Schleife, die zufällige Punkte erzeugt und Linien zwischen dem aktuellen Punkt und allen vorherigen Punkten zeichnet.

Beispiel mit 25 Punkten:

Bildbeschreibung hier eingeben

Mit Zeilenumbrüchen und Importen:

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

Bearbeiten: Da wir keine Importe zählen, habe ich später noch ein paar Dinge importiert, um einige Zeichen zu speichern.

Edit 2: OP hat die Anzahl der Punkte fest codiert. -17 Zeichen :)

Geobits
quelle
Nett! Herzlichen Glückwunsch zum ersten sein.
Alexander Craggs
2
Erstens, aber ich bin mir sicher, dass es bei weitem nicht die kürzeste sein wird. Cause, weißt du, Java;)
Geobits
3
Ich bewundere Leute, die die Aufgabe in Java immer lösen, auch wenn sie hoffnungslos sind, ich wäre sogar zu faul, um eine Sonnenfinsternis auszulösen ... also +1 =)
auszulösen
1
@Chruncher Ja, Java ist definitiv nicht die beste Sprache für Codegolf. Es war jedoch die erste Sprache, die ich gelernt habe, und es ist ziemlich einfach, sie zu erlernen. Es hat mir aber auch gut getan und ist persönlich meine Lieblingssprache.
Alexander Craggs
1
Es ist nicht notwendig, den Hauptparameter als final zu definieren. Sie können diese 6 Zeichen abschneiden
Cruncher
11

Python 2 - 41 35

Nach dem Importieren einiger Bibliotheken als für diese Herausforderung zulässig

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

Wir können einige verbundene Punkte mit nur einer Codezeile zeichnen:

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

(Der Screenshot wurde mit 10 Punkten erstellt.)

Falko
quelle
[Bezogen auf einen gelöschten Kommentar:] Ich weiß, aber hier "werden Bibliotheken ignoriert". Wenn nicht, würde ich es definitiv anders implementieren. Durch die Verwendung dieser Bibliotheken werden nicht genügend Zeichen gespeichert, um die importAnweisungen in einer normalen Code-Golf-Herausforderung zu rechtfertigen .
Falko
ist pylab teil der standardverteilung? Ich könnte mir vorstellen, dass wir nicht einfach alles importieren können, was wir wollen. Unter dieser Metrik können Sie mit einer einzigen import-Anweisung alles in Python implementieren.
Cruncher
Ja es ist . Ich habe einfach getan, was ich für gültig hielt. Aber ich bin mir nicht sicher. Ein Blick in die Kommentare zeigt, dass eine große Diskussion im Gange ist. Sobald dies geklärt ist, wäre ich bereit, meinen Code anzupassen.
Falko
Obwohl sich die Ansicht dieser Wettbewerbe, welche Bibliotheken erlaubt sind, von Tag zu Tag zu ändern scheint, sollte PyLab definitiv erlaubt sein.
Alexander Craggs
8

Mathematica 95 87

Mit etwas Hilfe von Belisarius.

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

n = 5

5


n = 100

Timing: 2,082654 Sek

100

DavidC
quelle
Dies ist verifiziert, ich habe es zum Laufen gebracht! Zählt Mathematica normalerweise als Sprache?
Alexander Craggs
1
@ PopeyGilbert Sicher ist es. In Mathematica gibt es bisher ~ 750 Antworten .
Geobits
Oh, wow, okay! Fair genug <3
Alexander Craggs
Ich denke, dies ist kürzer und entspricht den RegelnCompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
Dr. Belisarius
Danke, Sie haben recht. Ich dachte, ich könnte nicht gewinnen, also dachte ich, ich würde es hübsch machen (VertexSize -> {2,2}. Ich habe jedoch die Tatsache übersehen, dass dies nicht 100notwendig und Input[]optional war.
DavidC
7

Python 2, 158

Importanweisungen, die nicht in der Anzahl der Zeichen enthalten sind ("Bibliotheken werden ignoriert").

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

Beispielausgaben:

n = 2 (...):

n = 2

n = 10 (sieht aus wie ausgefallenes 3D-Ding oder so):

n = 10

n = 100 (sieht aus, als wäre jemand mit einem roten Stift BLELEEEAARARGHHH gegangen):

n = 100

n = 500, 1000, 10000 (dauert etwa 1,5 Sekunden, 5 bis 6 Sekunden bzw. 3,5 Minuten):

Hinweis: Die 10000 Punkte wurden mit einer leicht optimierten Version ausgeführt, bei der Zeile 3 (ohne Importe) folgendermaßen geändert wurde:

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

Sonst hätte es ewig gedauert. : P

Ungolfed:

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()
Türknauf
quelle
1
Herzlichen Glückwunsch zum derzeit kürzesten Teilnehmer! Liebe deinen Kommentar zu n = 100. Könnte am besten sein, image.new und image_size auf 800 zu setzen. Könnte weniger seltsam aussehen =)
Alexander Craggs
@PopeyGilbert Also ich kann die Import - Anweisungen von der Mine entfernen? Ich nahm an, dass "Bibliotheken ignorieren" bedeutete, dass die Bibliothek selbst nicht gezählt wurde (wie üblich).
Geobits
Ja, weil einige Sprachen nur sehr wenige Basisfunktionen haben und all ihre Sachen importieren müssen. Wenn Sie denken, dass dies nicht fair ist, dann sagen Sie bitte =) Ich möchte versuchen, dies fair zu machen.
Alexander Craggs
@PopeyGilbert Ich habe nur gefragt, weil es nicht die Norm ist und wollte es klären, bevor ich ein paar weitere Zeichen aus meinem Code herausgenommen habe: D
Geobits
1
Da die Auflösung nur mindestens 200x200 betragen muss, können Sie einige Zeichen (5, glaube ich) einsparen, indem Sie diese festlegen x=255und verwenden, um die Instanzen von 200und zu ersetzen 255.
Super
5

R 66

Dieses betrügt an der Grenze, aber ich denke immer noch, dass es innerhalb der Regeln liegt. Zum Einrichten laden Sie das igraphPaket mit library(igraph), das Sie mit von CRAN herunterladen können install.packages("igraph"). Weisen Sie dann die Eingabe der Variablen zu N. Nach den Regeln werden diese nicht mitgerechnet.

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

N = 50

Bildbeschreibung hier eingeben

Beachten Sie, dass dieser Code auch Selbstverbindungen zeichnet. Wenn Sie sie eliminieren (obwohl es keine Regel gegen sie gibt), werden 6 Zeichen hinzugefügt:

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

R 141

Dies ist eine ehrliche Lösung in Basis 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]))

obwohl Sie noch eingeben müssen N von Hand .

N = 50

Bildbeschreibung hier eingeben

Ich frage mich, ob eine forSchleife weniger Zeichen enthalten würde als, applyaber ich bin zufrieden mit dem, was ich habe.

Shadowtalker
quelle
Ich akzeptiere Selbstverbindungen, technisch gesehen ist die Frage, eine Linie zu ALLEN Punkten zu ziehen. Ich habe es getestet und auch bestätigt.
Alexander Craggs
Stört es Sie, wenn Pfeile die Punkte verbinden? Das spart weitere 5, indem es ,"un"am Ende der ersten Zeile entfernt.
Shadowtalker
Wenn es Ihnen nichts ausmacht, sollten wir es behalten, damit es Linien sind, die jeden der Punkte verbinden. Auf diese Weise wird die Antwort in jeder der Antworten ähnlich aussehen.
Alexander Craggs
5

QBasic oder QuickBasic, 130 Zeichen

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

Code-Variationen

  • Wenn Sie nicht zur Eingabe eines Startwerts aufgefordert werden möchten, ersetzen Sie diesen RANDOMIZEdurchRANDOMIZE TIMER .
  • Wenn Sie zur Eingabe von N aufgefordert werden möchten, ersetzen Sie diese N=10durch INPUT Noder INPUT "N";N.

Probeläufe

Für N=5, getestet mit QBasic 1.1 unter DOSBox 0.74:

Für N=100, getestet mit QBasic 1.1 unter DOSBox 0.74:

ILoveQBasic
quelle
Oh, wow, schönes Bild für N = 5! Liebe, dass es ein Pentagramm ist, wenn der Samen 42 ist. Geprüft und bestätigt.
Alexander Craggs
4

Bash + ImageMagick: 148 Zeichen

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:

Probelauf:

bash-4.3$ time ./line.sh 5

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

Beispielausgabe:

5 verbundene Punkte

Probelauf:

bash-4.3$ time ./line.sh 25

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

Beispielausgabe:

25 verbundene Punkte

Probelauf:

bash-4.3$ time ./line.sh 100

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

Beispielausgabe:

100 verbundene Punkte

Mann bei der Arbeit
quelle
Getestet und bestätigt. Gut gemachte Handarbeit!
Alexander Craggs
Es tut mir sehr leid, habe ich ganz vergessen, dies zu den Bestenlisten hinzuzufügen? Ich werde das jetzt tun.
Alexander Craggs
4

TCL 161 Zeichen

Es wird sicherlich nicht gewinnen, aber es schlägt einige andere, die hier vorgestellt werden, und ich denke, es nutzt eine stark unterbewertete Sprache.

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

Beispiel

Die Standardleinwandgröße in meinem System scheint 291 x 204 zu sein. Ich weiß nicht warum, aber die Verwendung spart 13 Zeichen.

Ziemlich schnell, 400 Punkte in <5 Sekunden, 500 in ~ 10 Sekunden. Größe und Punkte können beliebig skaliert und Farben und Linienstile auf Kosten der Zeichen geändert werden. Ohne Golf spielen und Variablen verwenden, um das Skalieren und Färben klarer und einfacher zu machen:

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
quelle
1
Das Bild scheint in Ordnung zu sein, leider funktioniert mein Computer nicht und ich werde es später testen. Herzlichen Glückwunsch zur Verwendung einer so unterschätzten Sprache.
Alexander Craggs
Habe es gerade bestätigt, herzlichen Glückwunsch zu einem erfolgreichen Eintrag!
Alexander Craggs
129
Sergiol
122
Sergiol
4

[TI-Nspire] Lua - 145 135 130

(Aktualisierte feste Version)

Screenshot mit n = 10

"Importieren" von math.random als "r", als erstes, wie erlaubt: r=math.random

Tatsächlicher Code:

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

Hinweis: Dieser Code funktioniert mit den TI-Nspire- Rechnern (TI hat Lua-Skripte zu den neuesten Betriebssystemen dieser Plattform hinzugefügt, mit einer geraden API, mit der Benutzer beispielsweise Grafiken usw.
erstellen können .) Sie können ihn auch online ausprobieren (einfach löschen) das Demo-Skript und voranstellen mir mit n=10zum Beispiel)

Adriweb
quelle
Zeit für mich, Lua zu lernen!
Beta Decay
1
Dies scheint durch die gleichen Fehler wie zu leiden fuandon 's gelöschte Powershell - Antwort und Vlo ist auch gelöscht R Antwort: Sie können die Punkte in Paar verbinden, nicht jeden Punkt mit allen anderen Punkten. (Lua ist auf dieser Site so selten. Bitte
korrigieren
Oh, mein Schlimmes - ich werde das bald beheben!
Adriweb
Los geht's, danke, dass du mich informiert hast :)
Adriweb
Dies wurde getestet und bestätigt! Gut gemacht mit Lua.
Alexander Craggs
3

C # Windows Forms, 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

Zeichnen Sie mit 5 Punkten

N = 50

Zeichnen Sie mit N = 50

Der vollständige Code ist unten angegeben

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();
        }
    }
}
Zed Coder
quelle
Getestet und bestätigt! Als ich die Anzahl der Zeichen überprüfte, verwendete ich den vollständigen Code und war überrascht, als es um <700 Zeichen ging ...>. <. Wie auch immer, herzlichen Glückwunsch zum erfolgreichen Start!
Alexander Craggs
Gibt es nicht eine Abkürzung wie Pens.Tanstatt new Pen(Color.Tan)?
CompuChip
Changed Pens.Tan zu verwenden, zusätzlich 10 Speicher
Zed Coder
2

HTML / JS, 210, dank Handarbeit

<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
quelle
Dies ist verifiziert, ich habe es zum Laufen gebracht!
Alexander Craggs
Sie können ~~anstelle von m.floor5 Bytes speichern
William Barbosa
Machen Sie den canvasTag selbstschließend und entfernen Sie die einfachen Anführungszeichen um den idWert: <canvas id=q />. (Beachten Sie, dass Sie zwischen dem letzten Attributwert und dem Selbstschluss ein Leerzeichen lassen müssen /.) Übrigens funktioniert Firefox auch ohne m.floor()und ~~.
Handarbeit
219 Zeichen: jsfiddle.net/e866azzs/5
manatwork
Als ich das erste Mal Manatworks jsfiddle ausprobierte, dachte ich, die Alarmbox brauche ein Passwort! Ich war ratlos. Wie dumm kann eine Person sein. Ich glaube, dies ist ausreichend anders als die Antwort einer anderen Person, um einen anderen Platz in der Rangliste zu garantieren. Denken andere Leute, dass das anders ist?
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});}}}

Ich möchte sagen, dass ich Stroke = Brushed.Red entfernen könnte. Aber das bedeutet leider, dass ich transparente Linien male und meine Vermutung ist, dass es nicht wirklich zählt. : PI kann auch einige Bytes sparen, indem Sie einfach ein Raster in der XAML-Ansicht erstellen. Aber das schien unfair, also habe ich die XAML entfernt, um eine leere Leinwand zu werden. (Ich zähle die XAML nicht als 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

100

100

WozzeC
quelle
4
Da es sich um WPF handelt, stürzt es bei Ausnahmefällen wegen unzureichendem Arbeitsspeicher bei etwa 3.000 Punkten ab.
WozzeC
Getestet und bestätigt, gut gemacht in C # WPF!
Alexander Craggs
2
Könnte durch die Verwendung von varbeim Deklarieren von Variablen ein wenig kurzgeschlossen werden.
MarcinJuraszek
Ja in der Tat. Vielen Dank! Ich konnte auch "this" von "this.AddChild" entfernen.
WozzeC
1

HPPPL, 231 220

(HP Prime-Programmiersprache für den HP Prime-Farbgrafikrechner)

Golf es runter. Elf Zeichen weniger, indem alle möglichen neuen Linien direkt nach jeder neuen Punkterstellung gezeichnet werden. Nur zwei verschachtelte Schleifen anstelle der vorherigen drei.

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;

Ungolfed (270 Zeichen):

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;

Beispiele:

c (10)

connect_10_points_HPPPL

connect_10_points_HPPPL_2

c (30)

connect_30_points_HPPPL

Der HP Prime Color Graphing Calculator verfügt über ein 320 x 240 Pixel großes Farbdisplay.

Bildbeschreibung hier eingeben

Ein Emulator, der auch mit dem Connectivity Kit funktioniert, ist auf der HP Website oder hier erhältlich: http://www.hp-prime.de/de/category/6-downloads

... noch auf die Hardware warten. Update zur Ausführungszeit folgt.

Heute ist mein HP Prime angekommen. Hier ist die Ausführungszeit für n = 100 auf einem tatsächlichen Rechner:

durchschnittliche Ausführungszeit

Um 0,65 s für n = 100.

Der Emulator ist auf meinem Core i5 2410M-Laptop ungefähr viermal so schnell (ungefähr 0,178 s).

ML
quelle
1
Nun, ich habe noch nie von dieser Programmiersprache gehört, aber sie funktionierte auf dem Emulator, also herzlichen Glückwunsch! Ich habe dich zur Bestenliste hinzugefügt.
Alexander Craggs
Vielen Dank. Sobald ich die Hardware habe, überprüfe ich die Ausführungszeit. Der Emulator ist schneller als der eigentliche Rechner. Aber ich denke, das 5-Minuten-Limit für n = 100 ist für den Rechner sehr großzügig.
ML
1

NetLogo, 51 Bytes

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

Ersetzen Sie 9s bei Bedarf durch andere Konstanten oder Variablen.

NetLogo-Ausgabe

wyldstallyns
quelle
1
Zur Bestenliste hinzugefügt! Leider bin ich mir nicht ganz sicher, wie ich das testen soll. Ich habe NetLogo heruntergeladen und es in den Observer-Bereich eingegeben und dann versucht, es als Stiftbefehl in einem Plot festzulegen, und es schien auch nicht zu funktionieren. Wenn Sie mir ein paar Hinweise geben könnten, könnte ich es bestätigen =)
Alexander Craggs
F'rinstance: Gehen Sie in die Registerkarte 'Code' und binden Sie diese Zeile in eine Funktion ein, die mit "to go" beginnt und mit "end" endet. Dann können Sie eine Schaltfläche zu der ersten hinzufügen, die "go" ruft und diese drückt.
Wyldstallyns
1
Bestätigt! Schöne lösung. Es ist großartig, wenn Sie wissen, was eine Schildkröte ist, können Sie den Code lesen, als wäre er englisch. Mit ziemlicher Sicherheit die am besten lesbare Lösung.
Alexander Craggs
Ordentlich! Vielen Dank! Ich habe nach Fragen wie diesen gesucht, die NetLogo lösen soll. Ironischerweise baue ich auch ein pythistisches Front-End auf, um diese nette Ausführlichkeit zu beseitigen und NetLogo zu einem echten Golf-Konkurrenten zu machen.
Wyldstallyns
1
Eh, ich dachte, es war immer noch eine ausgezeichnete Antwort! Ich kann es kaum erwarten, Ihren Pyth NetLogo-Code zu sehen, sollte hoffentlich ein unvergesslicher Anblick sein!
Alexander Craggs