Najkrótszy kod do losowego umieszczania punktów i łączenia ich

26

Zadanie

Jest to dość proste zadanie kodowania, wszystko, co Twój program musi zrobić, to umieścić punkt na kanwie (lub alternatywę w innym języku kodowania) i połączyć go ze wszystkimi już umieszczonymi kropkami. Twój program musi przyjąć jedno wejście, liczbę kropek, które powinny zostać umieszczone, i wyświetlać jakiś ekran z podłączonymi kropkami. Przykład

Wymagania

  • Muszę być w stanie go uruchomić, co oznacza, że ​​musi mieć kompilator / narzędzie do uruchomienia go online lub publicznie dostępne do pobrania.
  • Dozwolone jest korzystanie z dowolnej biblioteki utworzonej przed ustawieniem tego wyzwania, o ile nie zostało ono zaprojektowane wyłącznie w celu jego rozwiązania.
  • Jest to najkrótsze zadanie kodu, które oznacza znaki. Komentarze, kod zmieniający kolor (dla ładności) i biblioteki będą ignorowane.
  • Twoja odpowiedź musi być unikalna, nie kradnij kodu innych ludzi, skróć go o kilka znaków i opublikuj ponownie.
  • Musi być w stanie uruchomić się w czasie krótszym niż 5 minut, dla wartości 5 i 100. Musi także użyć rozdzielczości co najmniej 200 * 200 i umieścić każdą kropkę w losowym miejscu na kanwie, stosując nie-trywialny rozkład.

Aktualny ranking

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

Jeśli cię przegapiłem, bardzo mi przykro, po prostu dodaj komentarz do swojej pracy, a dodam go, jak tylko go zobaczę =)

TL; DR

  • Wejście - liczba kropek (int, może być zakodowana na stałe)
  • Wyjście - obraz losowo rozmieszczonych kropek, wszystkie połączone ze sobą (grafika)
  • Zwycięzca - najkrótszy kod
Alexander Craggs
źródło
1
Czy mogę korzystać z bibliotek matematycznych? Jakich bibliotek dokładnie próbujesz uniknąć przy wymaganiu nr 2?
Nathan Merrill,
2
Czy jest jakieś ograniczenie rozdzielczości? Jest to dość łatwe, jeśli pozwolisz mi wydrukować obraz 1x1
John Dvorak
3
Kiedy mówisz, że nie ma bibliotek „matematycznych”, co z językami, w których domyślny PRNG jest zawarty w „matematyce”? Nie chcę pisać generatora.
Geobits
1
Ponieważ nie zezwalasz na kod biblioteki, który jest bezpośrednio związany z zadaniem, a zadaniem tego jest przede wszystkim narysowanie losowego wykresu sieciowego, czy nie jest również zabronione korzystanie z natywnych funkcji rysowania wykresów? To ograniczenie jest dalekie od dobrze zdefiniowanego.
wszechstronny
3
@PopeyGilbert Muszę powiedzieć, że nigdy nie widziałem nowego użytkownika, który byłby tak wrażliwy na problemy z jego pytaniem, a także indywidualnie testował każdą odpowiedź i utrzymywał tabelę wyników. Dobra robota i witamy w PPGC!
Calvin's Hobbies

Odpowiedzi:

21

Matlab (22)

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

Zakłada się, że n jest liczbą punktów i wygląda tak dla n = 10: losowy wykres

n=6:

losowy

Wyjaśnienie

gplotto polecenie do drukowania wykresów. Pierwszym argumentem jest n x nmacierz częstości występowania (oczywiście pełna). Drugi argument powinien być n x 2macierzą ze współrzędnymi punktów, ale nie ma znaczenia, czy drugi wymiar jest większy niż 2, więc po prostu generuję n x nmacierz losowych wartości (która jest o 2 znaki krótsza niż generowanie n x 2macierzy).

Linki do dokumentacji

wada
źródło
Nigdy nie korzystałem z Matlaba, więc przetestowanie zajmie chwilę - ale z obrazu wygląda dobrze! Gratulujemy zrobienia tego w 22 znakach. EDYCJA - Okazuje się, że nie mogę tego przetestować, jednak patrząc na obraz wydaje się poprawny, więc pozwolę na to. Czy jednak ktoś inny może to przetestować?
Alexander Craggs
3
Dzięki =) Możesz to przetestować tutaj: octave-online.net Ponieważ oktawa jest w zasadzie wersją MatLab typu open source.
flawr
27

Java: 318 282 265

Ponieważ, wiesz, 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();}}

To tylko prosta pętla, która tworzy losowe kropki i rysuje linie między bieżącą kropką a wszystkimi poprzednimi.

Przykład z 25 kropkami:

wprowadź opis zdjęcia tutaj

Z podziałami linii i importem:

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

Edycja: Ponieważ nie liczymy importów, zaimportowałem jeszcze kilka rzeczy, aby później zapisać niektóre postacie.

Edycja 2: OP dodał limit ustalonej liczby kropek. -17 znaków :)

Geobity
źródło
Miły! Gratulujemy bycia pierwszym.
Alexander Craggs
2
Po pierwsze, ale jestem pewien, że nie będzie najkrótszy z daleka. Bo wiesz, Java;)
Geobits
3
Podziwiam ludzi, którzy zawsze rozwiązują to zadanie w Javie, nawet gdy jestem beznadziejny, byłbym nawet zbyt leniwy, aby zacząć zaćmienie ... więc +1 =)
flawr
1
@Chruncher Tak, java zdecydowanie nie jest najlepszym językiem do gry w golfa kodowego. Był to jednak pierwszy język, którego się nauczyłem, i dość łatwo go opanować. Trzymało mnie to jednak dobrze i jest moim ulubionym językiem.
Alexander Craggs
1
Nie jest konieczne definiowanie parametru głównego jako końcowego. Możesz odciąć te 6 postaci
Cruncher
11

Python 2-41 35

Po zaimportowaniu niektórych bibliotek dozwolonych dla tego wyzwania

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

możemy wykreślić pewną liczbę połączonych punktów za pomocą tylko jednej linii kodu:

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

(Zrzut ekranu został wygenerowany z 10 punktami.)

Falko
źródło
[Odnosząc się do usuniętego komentarza:] Wiem, ale tutaj „biblioteki zostaną zignorowane”. Jeśli nie, zdecydowanie zaimplementuję to inaczej. Korzystanie z tych bibliotek nie zapisuje wystarczającej liczby znaków, aby uzasadnić importstwierdzenia w normalnym kodzie golfowym.
Falko
czy pylab jest częścią standardowej dystrybucji? Wyobrażam sobie, że nie możemy po prostu importować niczego, co lubimy. W ramach tej metryki możesz zaimplementować wszystko w pythonie za pomocą pojedynczej instrukcji importu.
Cruncher
Tak to jest . Zrobiłem tylko to, co moim zdaniem było ważne. Ale nie jestem pewien. A przeglądanie komentarzy pokazuje toczącą się wielką dyskusję. Jak tylko to wyjaśnię, chętnie dostosuję swój kod.
Falko
Chociaż wydaje się, że ten widok konkursów na to, które biblioteki są dozwolone, zmienia się z dnia na dzień, PyLab powinien być zdecydowanie dozwolony.
Alexander Craggs
8

Mathematica 95 87

Z pewną pomocą Belizariusza.

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

n = 5

5


n = 100

Czas: 2.082654 sec

100

DavidC
źródło
To jest zweryfikowane, udało mi się! Czy Mathematica zwykle liczy się jako język?
Alexander Craggs
1
@PopeyGilbert Pewnie, że tak. Do tej pory w Mathematica jest ~ 750 odpowiedzi .
Geobits
Och, wow, okej! Wystarczająco <3
Alexander Craggs
Uważa, że ​​jest to krótsze i spełnia zasadyCompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
dr belisarius
Dzięki, masz rację. Uznałem, że nie mogę wygrać, więc pomyślałem, że sprawię, że będzie ładny (VertexSize -> {2,2}. Przeoczyłem jednak fakt, że uwzględnienie tego nie 100było konieczne i Input[]było opcjonalne.
DavidC
7

Python 2, 158

Instrukcje importu nieuwzględnione w liczbie znaków, jak wspomniano w pytaniu („biblioteki zostaną zignorowane”).

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

Przykładowe wyniki:

n = 2 (...):

n = 2

n = 10 (wygląda jak fantazyjna rzecz 3D lub coś takiego):

n = 10

n = 100 (wygląda na to, że ktoś poszedł BLELEEEAARARGHHH z czerwonym długopisem):

n = 100

n = 500, 1000, 10000 (uruchamia się odpowiednio w około 1,5 sekundy, 5-6 sekund i 3,5 minuty):

Uwaga: 10000 punktów jeden uruchomiono z nieco zoptymalizowaną wersją, która zmieniła wiersz 3 (nie uwzględniając importu) na to:

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

W przeciwnym razie zajęłoby to wieczność. : P

Nie golfowany:

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()
Klamka
źródło
1
Gratulujemy, że obecnie jesteśmy najkrótszym uczestnikiem! Podoba mi się twój komentarz na temat n = 100. Najlepiej byłoby umieścić image.new i image_size na 800. Mógłby wyglądać mniej dziwnie =)
Alexander Craggs
@PopeyGilbert Więc może usunąć instrukcje importu z kopalni? Zakładałem, że „ignoruj ​​biblioteki” oznacza, że ​​sama biblioteka nie była liczona (jak zwykle).
Geobits
Tak, ponieważ niektóre języki mają bardzo mało podstawowych funkcji i muszą zaimportować wszystkie swoje rzeczy. Jeśli uważasz, że to nie jest sprawiedliwe Geobity, powiedz =) Chcę spróbować, aby było to uczciwe.
Alexander Craggs
@PopeyGilbert Właśnie zapytałem, bo to nie jest norma i chciałem to wyjaśnić, zanim
wyciąłem
1
Ponieważ rozdzielczość musi wynosić co najmniej 200 x 200, możesz zapisać kilka znaków (5, myślę, że), ustawiając go x=255i używając go, aby zastąpić wystąpienia 200i 255.
kompleksowy
5

R, 66

To oszustwo graniczne, ale nadal uważam, że jest zgodne z zasadami. Skonfiguruj, ładując igraphpakiet za pomocą library(igraph), który można pobrać z CRAN za pomocą install.packages("igraph"). Następnie przypisz dane wejściowe do zmiennej N. Zgodnie z zasadami nie są one liczone w sumie.

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

N = 50

wprowadź opis zdjęcia tutaj

Zauważ, że ten kod rysuje również połączenia własne. Wyeliminowanie ich (choć nie ma wobec nich żadnej reguły) dodaje 6 znaków:

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

R 141

To jest rozwiązanie uczciwe w stosunku do dobra w bazie 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]))

chociaż nadal musisz wejść Nręcznie.

N = 50

wprowadź opis zdjęcia tutaj

Zastanawiam się, czy w forpętli byłoby mniej znaków, applyale jestem zadowolony z tego, co mam.

Shadowtalker
źródło
Akceptuję samodzielne połączenia, technicznie pytanie polega na narysowaniu linii do WSZYSTKICH punktów. Przetestowałem to i również to potwierdziłem.
Alexander Craggs
Czy masz nic przeciwko strzałkom łączącym punkty? To uratuje kolejne 5, eliminując ,"un"na końcu pierwszej linii.
shadowtalker
Jeśli nie masz nic przeciwko, myślę, że powinniśmy to zachować, więc muszą to być linie łączące każdy z punktów. W ten sposób odpowiedź będzie wyglądać podobnie w każdej z odpowiedzi.
Alexander Craggs
5

QBasic lub QuickBasic, 130 znaków

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

Odmiany kodu

  • Jeśli nie chcesz zostać poproszony o podanie nasion, wymienić RANDOMIZEz RANDOMIZE TIMER.
  • Jeśli chcesz zostać poproszony o N, wymienić N=10z INPUT Nlub INPUT "N";N.

Przykładowe przebiegi

Dla N=5, testowane z QBasic 1.1 działa na DOSBox 0.74:

Dla N=100, testowane z QBasic 1.1 działa na DOSBox 0.74:

ILoveQBasic
źródło
Och, wow, niezły obraz dla N = 5! Uwielbiam, że jest to pentagram, gdy ziarno ma 42. Testy i potwierdzenie.
Alexander Craggs
4

Bash + ImageMagick: 148 znaków

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:

Przykładowy przebieg:

bash-4.3$ time ./line.sh 5

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

Przykładowe dane wyjściowe:

5 połączonych punktów

Przykładowy przebieg:

bash-4.3$ time ./line.sh 25

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

Przykładowe dane wyjściowe:

25 połączonych punktów

Przykładowy przebieg:

bash-4.3$ time ./line.sh 100

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

Przykładowe dane wyjściowe:

100 połączonych punktów

człowiek w pracy
źródło
Przetestowane i potwierdzone. Dobra robota!
Alexander Craggs
Bardzo przepraszam, czy całkowicie zapomniałem dodać to do tabel liderów? Zrobię to teraz.
Alexander Craggs
4

TCL 161 znaków

Najwyraźniej nie wygra, ale pokonuje kilka innych zaprezentowanych tutaj i myślę, że dobrze wykorzystuje bardzo niedoceniany język.

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

Przykład

Domyślny rozmiar płótna w moim systemie to 291 x 204. Nie jestem pewien, dlaczego, ale użycie go oszczędza 13 znaków.

Dość szybko, 400 punktów w <5 sekund, 500 w ~ 10 sekund. Rozmiar i punkty można dowolnie skalować, a kolory i style linii można zmieniać, oczywiście kosztem znaków. Nie gra w golfa i używa zmiennych, aby uczynić go bardziej przejrzystym i łatwiejszym do skalowania i kolorowania

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
źródło
1
Obraz wydaje się w porządku, niestety mój komputer nie działa, więc przetestuję go później. Gratulujemy używania tak niedocenianego języka.
Alexander Craggs
Właśnie to potwierdziłem, gratuluję udanego zgłoszenia!
Alexander Craggs
129
sergiol
122
sergiol
4

[TI-Nspire] Lua - 145 135 130

(Zaktualizowana stała wersja)

Zrzut ekranu z = 10

„Importowanie” pliku matematycznego.Random jako „r”, po pierwsze, jak dozwolone: r=math.random

Rzeczywisty kod:

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

Uwaga: ten kod działa na kalkulatorach TI-Nspire (TI dodało skrypty Lua do najnowszych systemów operacyjnych tej platformy, z opartym na parzystości interfejsem API umożliwiającym użytkownikom tworzenie wykresów itp.).
Można go również wypróbować online tutaj (wystarczy usunąć skrypt demo i n=10na przykład dodaj mój )

Adriweb
źródło
Czas, abym nauczył się Lua!
Beta Decay
1
To wydaje się cierpieć przez tego samego błędu jak fuandon „s skreślony PowerShell odpowiedź i Vlo ” s również usunięty R odpowiedź: połączyć kropki w pary nie każda kropka ze wszystkimi innymi punktami. (Lua jest tak rzadki na tej stronie. Napraw kod zamiast go usuwać.)
manatwork
Och, moje złe - naprawię to wkrótce!
Adriweb,
Proszę bardzo, dziękuję za informację :)
Adriweb
To zostało przetestowane i potwierdzone! Dobra robota z użyciem Lua.
Alexander Craggs
3

Formularze C # 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

Rysuj za pomocą 5 punktów

N = 50

Wykreśl przy użyciu N = 50

Pełny kod podano poniżej

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
źródło
Przetestowane i potwierdzone! Kiedy sprawdziłem liczbę znaków, użyłem pełnego kodu i byłem zaskoczony, gdy doszło do <700 znaków ...>. <. W każdym razie gratuluję udanego zgłoszenia!
Alexander Craggs
Nie jest jakiś skrót jak Pens.Tanzamiast new Pen(Color.Tan)?
CompuChip
Zmieniono na używanie Pens.Tan, oszczędzając dodatkowe 10
Zed Coder
2

HTML / JS, 210, dzięki 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
źródło
To jest zweryfikowane, udało mi się!
Alexander Craggs
Możesz użyć ~~zamiast m.floorzaoszczędzić 5 bajtów
William Barbosa
Dokonać canvastag samozamykające i usunąć apostrofów wokół idwartości: <canvas id=q />. (Pamiętaj, że musisz zostawić jedną spację między ostatnią wartością atrybutu a samozamykaniem /.) BTW, w Firefox działa dobrze bez m.floor()i ~~.
manatwork
219 znaków: jsfiddle.net/e866azzs/5
manatwork
Kiedy po raz pierwszy spróbowałem jsfiddle manatwork, pomyślałem, że pole ostrzeżenia potrzebuje hasła! Byłem zakłopotany. Jak głupia może być osoba. Uważam, że to wystarczająco różni się od odpowiedzi innych osób, które uzasadniają inne miejsce w tabeli liderów. Czy inni uważają, że jest wystarczająco inaczej?
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});}}}

Chciałbym powiedzieć, że mogę usunąć Stroke = Brushed.Red. Ale niestety oznacza to, że maluję przezroczyste linie, i zgaduję, że tak naprawdę to się nie liczy. : PI może również ogolić kilka bajtów, po prostu tworząc siatkę w widoku XAML. Ale to wydawało się niesprawiedliwe, więc rozebrałem XAML, by stać się pustym płótnem. (Nie liczę XAML jako bajtów ...)

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
źródło
4
Ponieważ jest to WPF, zawiesi się przy około 3k punktach za wyjątek braku pamięci.
WozzeC
Testowane i potwierdzone, dobrze zrobione w robieniu tego w C # WPF!
Alexander Craggs
2
Może być nieco zwarty przez użycie varprzy deklarowaniu zmiennych.
MarcinJuraszek,
W rzeczy samej. Dzięki! Byłem także w stanie usunąć „to” z „tego.AddChild”.
WozzeC,
1

HPPPL, 231 220

(Język programowania HP Prime dla kalkulatora graficznego HP Prime)

grałem w golfa. 11 znaków mniej, rysując wszystkie możliwe nowe linie zaraz po każdym utworzeniu nowego punktu. Tylko dwie zagnieżdżone pętle zamiast poprzednich trzech.

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;

Niegolfowany (270 znaków):

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;

przykłady:

c (10)

connect_10_points_HPPPL

connect_10_points_HPPPL_2

c (30)

connect_30_points_HPPPL

Kalkulator graficzny HP Prime ma kolorowy wyświetlacz 320 x 240 pikseli.

wprowadź opis zdjęcia tutaj

Emulator współpracujący również z zestawem łączności jest dostępny na stronie internetowej HP lub tutaj: http://www.hp-prime.de/en/category/6-downloads

... wciąż czeka na przybycie sprzętu. Aktualizacja czasu wykonania nastąpi.

Dzisiaj przyjechał mój HP Prime. Oto czas wykonania dla n = 100 na rzeczywistym kalkulatorze:

średni czas realizacji

Około 0,65 s dla n = 100.

Emulator działa około 4 razy szybciej (około 0,178 s) na moim laptopie Core i5 2410M.

ML
źródło
1
Cóż, nigdy nawet nie słyszałem o tym języku programowania, ale działał na emulatorze, więc gratulacje! Dodałem cię do tabeli liderów.
Alexander Craggs,
Dzięki. Jak tylko będę mieć sprzęt, sprawdzę czas wykonania. Emulator jest szybszy niż rzeczywisty kalkulator. Myślę jednak, że limit 5 minut dla n = 100 jest bardzo hojny dla kalkulatora.
ML
1

NetLogo, 51 bajtów

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

W razie potrzeby zamień cyfry 9 na inne stałe lub zmienne.

Wyjście NetLogo

wyldstallyns
źródło
1
Dodano do tablicy wyników! Obawiam się, że nie jestem całkowicie pewien, jak to przetestować. Pobrałem NetLogo i wpisałem go w sekcji obserwatora, a następnie próbowałem ustawić go jako polecenie pióra na wykresie, żadne z nich nie działało. Jeśli mógłbyś podać mi jakieś wskazówki, byłbym w stanie to potwierdzić =)
Alexander Craggs,
F'rinstance: przejdź do zakładki „code” i zawiń ten wiersz funkcją, która zaczyna się „go” i kończy na „end”. Następnie możesz dodać przycisk do pierwszego, który wywołuje „idź” i naciśnij go.
wyldstallyns,
1
Zatwardziały! Piękne rozwiązanie. To wspaniale, że jeśli wiesz, co to jest żółw, możesz odczytać kod jak po angielsku. Niemal na pewno najbardziej czytelne rozwiązanie.
Alexander Craggs,
Schludny! Dzięki! Szukałem takich pytań, jak to, które NetLogo zamierza rozwiązać. Jak na ironię, buduję również interfejs pyth-ish, aby usunąć tę fajną gadatliwość, aby spróbować uczynić NetLogo prawdziwym pretendentem do gry w golfa.
wyldstallyns
1
Eh, pomyślałem, że to wciąż doskonała odpowiedź! Nie mogę się doczekać, aby zobaczyć Twój kod Pyth NetLogo, mam nadzieję, że będzie to celownik!
Alexander Craggs,