무작위로 포인트를 배치하고 연결하는 가장 짧은 코드


26

작업

이것은 매우 간단한 코딩 작업입니다. 프로그램에서 캔버스 (또는 다른 코딩 언어의 대안)에 포인트를 놓고 이미 배치 된 모든 점에 연결하면됩니다. 프로그램은 하나의 입력과 배치해야하는 도트 수를 가져 와서 도트가 연결된 상태에서 일종의 디스플레이를 출력해야합니다. 예

요구 사항

  • 나는 그것을 실행할 수 있어야한다. 즉, 온라인으로 또는 공개적으로 다운로드 할 수있는 컴파일러 / 도구가 있어야한다는 것을 의미한다.
  • 이 문제를 해결하기위한 목적으로 만 설계된 것이 아니라면이 문제가 설정되기 전에 만들어진 라이브러리를 사용할 수 있습니다.
  • 이것은 문자를 의미하는 가장 짧은 코드 작업입니다. 주석, 색상 변경 (예쁜) 및 라이브러리는 무시됩니다.
  • 답은 고유해야하며 다른 사람들의 코드를 훔치지 말고 몇 글자를 줄인 후 다시 게시하십시오.
  • 5와 100의 값에 대해 5 분 이내에 실행될 수 있어야합니다. 또한 최소 200 * 200의 해상도를 사용하고 사소한 분포를 사용하여 각 점을 캔버스의 임의의 위치에 배치해야합니다.

현재 리더 보드

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

보고 싶었다면 정말 죄송합니다. 작업 내용에 의견을 추가하면 바로 표시됩니다. =)

TL; DR

  • 입력-도트 수 (int, 하드 코딩 가능)
  • 출력-무작위로 배치 된 점의 이미지, 모두 서로 연결됨 (그래픽)
  • 우승자-최단 코드

1
수학 라이브러리가 허용됩니까? 요구 사항 # 2로 정확히 피하려고하는 라이브러리는 무엇입니까?
— Nathan Merrill

2
해결에 대한 제한이 있습니까? 1x1 이미지를 출력하게한다면 매우 쉽습니다
— John Dvorak

3
"math"라이브러리를 말하지 않으면 "math"에 기본 PRNG가 포함 된 언어는 어떻습니까? 생성기를 작성하고 싶지 않습니다.
— Geobits

1
작업과 직접 관련된 라이브러리 코드를 허용하지 않으며 해당 작업은 기본적으로 임의 네트워크 그래프를 그리는 것이므로 기본 그래프 그리기 기능을 사용할 수 없습니까? 이 제한은 잘 정의되어 있지 않습니다.
— comperendinous

3
@PopeyGilbert 나는 새로운 사용자가 질문에 대한 반응을 보지 못하고 각 답변을 개별적으로 테스트하고 리더 보드를 유지하는 것을 본 적이 없다고 말해야합니다. PPGC에 오신 것을 환영합니다!
— Calvin 's Hobbies

답변:


21

MATLAB (22)

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

n은 점의 수라고 가정하고 n = 10의 경우 다음과 같습니다. 무작위 그래프

n=6:

무작위

설명

gplot그래프를 그리는 명령입니다. 첫 번째 논증은 n x n발병률 행렬입니다. 두 번째 인수는 n x 2점의 좌표 가있는 행렬 이어야 하지만 두 번째 차원이 2보다 큰 경우 중요하지 않으므로 n x n임의 값 의 행렬을 생성합니다 ( 매트릭스를 생성하는 것보다 2 문자가 짧음 n x 2).

문서에 대한 링크


Matlab을 사용하지 않았으므로 테스트하는 데 약간의 시간이 걸립니다. 그러나 이미지에서는 괜찮아 보입니다! 22 자로 된 것을 축하합니다. 편집-나는 이것을 테스트 할 수 없다는 것이 밝혀졌지만 이미지를 보면 그것이 올바른 것처럼 보이기 때문에 허용 할 것입니다. 그러나 다른 누군가가 그것을 테스트 할 수 있습니까?
— Alexander Craggs

3
감사합니다 =) 여기에서 테스트 할 수 있습니다 : octave-online.net 옥타브는 기본적으로 MatLab의 오픈 소스 버전이므로.
— flawr

27

자바 : 318 282 265

왜냐하면, 자바는 :

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

임의의 점을 만들고 현재 점과 모든 이전 점 사이에 선을 그리는 간단한 루프입니다.

25 개의 점이있는 예 :

여기에 이미지 설명을 입력하십시오

줄 바꿈 및 가져 오기

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

편집 : 가져 오기를 계산하지 않기 때문에 나중에 일부 문자를 저장하기 위해 몇 가지 더 가져 왔습니다.

편집 2 : OP는 도트 수의 하드 코딩에 대한 여유를 추가했습니다. -17 자 :)


좋은! 첫 번째가 된 것을 축하합니다.
— Alexander Craggs

2
첫째, 그러나 그것이 긴 샷으로 가장 짧지는 않을 것이라고 확신합니다. Java
— ,;

3
나는 항상 자바로 작업을 해결하는 사람들을 존경합니다. 심지어 희망이 없더라도 일식을 시작하기에는 너무 게으
— 르기도합니다

1
@Chruncher 네, java는 코드 골프에서 가장 좋은 언어는 아닙니다. 그러나 내가 배운 첫 번째 언어 였고, 배우는 것은 매우 쉽습니다. 그것은 또한 나를 대신해서 좋게 해 주었고, 개인적으로, 내가 가장 좋아하는 언어입니다.
— Alexander Craggs

1
main의 매개 변수를 final로 정의 할 필요는 없습니다. 당신은 그 6 개의 문자를 잘라낼 수 있습니다
— Cruncher

11

파이썬 2-41 35

이 챌린지에 허용 된대로 일부 라이브러리를 가져온 후

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

한 줄의 코드로 몇 개의 연결된 점을 그릴 수 있습니다.

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

(스크린 샷은 10 포인트로 생성되었습니다.)


[삭제 된 댓글 참조 :] 알고 있지만 여기서 "라이브러리는 무시됩니다". 그렇지 않다면 분명히 다르게 구현할 것입니다. 이러한 라이브러리를 사용한다고 import해서 정상적인 코드 골프 챌린지에서 진술 을 정당화하기에 충분한 문자가 절약되지는 않습니다 .
— Falko

pylab은 표준 배포판의 일부입니까? 원하는 것을 가져올 수는 없다고 생각합니다. 해당 메트릭에서 단일 import 문으로 파이썬으로 무엇이든 구현할 수 있습니다.
— Cruncher

예 그것입니다 . 방금 유효하다고 생각한 것을했습니다. 그러나 나는 확실하지 않다. 그리고 의견을 살펴보면 진행중인 큰 토론이 표시됩니다. 이것이 명확 해지면 내 코드를 기꺼이 조정할 것입니다.
— Falko

어떤 도서관이 허용되는지에 대한이 경쟁 견해는 매일 바뀌는 것처럼 보이지만 PyLab은 반드시 허용되어야합니다.
— Alexander Craggs

8

매스 매 티카 95 87

벨리 사리우스의 도움으로.

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

n = 5

5


n = 100

타이밍 : 2.082654 초

100


이것은 확인되었습니다, 작동하도록했습니다! Mathematica는 보통 언어로 계산합니까?
— Alexander Craggs

1
@PopeyGilbert 물론입니다. 지금까지 Mathematica 에는 ~ 750 개의 답변 이 있습니다 .
— Geobits

오,와! 충분히 공정한 <3
— Alexander Craggs 14:01에

Methinks 이것은 더 짧고 규칙을 만족합니다CompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
— Dr. belisarius

고마워요 나는 내가 이길 수 없다고 생각해서 그것을 예쁘게 만들 것이라고 생각했다 (VertexSize-> {2,2}. 그러나 100포함 할 필요가없는 사실을 간과했지만 Input[]선택 사항이었다.
— DavidC

7

파이썬 2, 158

질문에 언급 된대로 문자 수에 포함되지 않은 가져 오기 문 ( "라이브러리는 무시 됨")

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

샘플 출력 :

n = 2 (...) :

n = 2

n = 10 (공상적인 3d 또는 다른 것 같습니다) :

n = 10

n = 100 (누군가가 빨간색 펜으로 BLELEEEAARARGHHH로 간 것처럼 보입니다) :

n = 100

n = 500, 1000, 10000 (각각 약 1.5 초, 5-6 초 및 3.5 분으로 실행) :

참고 : 10000 포인트 하나는 라인 3 (수입 제외)을 다음과 같이 약간 최적화 된 버전으로 실행했습니다.

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

그렇지 않으면 영원히 걸릴 것입니다. :피

언 골프 드 :

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

1
현재 가장 짧은 참가자가 된 것을 축하합니다! n = 100에 대한 귀하의 의견을 사랑하십시오. image.new 및 image_size를 800으로 설정하는 것이 가장 좋습니다. 이상하게 보이지 않을 수도 있습니다 =)
— Alexander Craggs

@PopeyGilbert 그래서 내 수입 명세서를 제거 할 수 있습니까? "라이브러리 무시"는 라이브러리 자체가 (평소대로) 계산되지 않았 음을 의미한다고 가정했습니다.
— Geobits

예, 일부 언어에는 기본 기능이 거의 없으므로 모든 내용을 가져와야합니다. 이것이 공정한 Geobits가 아니라고 생각되면 =)라고 말하십시오. 나는 이것을 공정하게 만들고 싶습니다.
— Alexander Craggs

@PopeyGilbert 나는 그것이 표준이 아니기 때문에 방금 물었고 내 코드에서 더 많은 문자를
— 자르기

1
해상도는 것으로되어 있기 때문에 적어도 하여 200x200을, 당신은 설정하여 몇 글자를 (5, 내 생각) 줄일 수 x=255와의 인스턴스를 대체하기 위해 그것을 사용 200하고 255.
— comperendinous

5

제 66 화

이것은 경계선 부정 행위이지만 여전히 규칙 내에 있다고 생각합니다. 로 igraph패키지를 로드하여 설정하면 library(igraph)CRAN에서 다운로드 할 수 있습니다 install.packages("igraph"). 그런 다음 입력을 variable에 지정하십시오 N. 규칙에 따라 총계에는 포함되지 않습니다.

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

N = 50

여기에 이미지 설명을 입력하십시오

이 코드는 또한 자체 연결을 그립니다. 그것들을 제거하면 (거의 규칙은 없지만) 6 문자가 추가됩니다.

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

R, 141

이것은 기본 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]))

여전히 N직접 입력해야합니다 .

N = 50

여기에 이미지 설명을 입력하십시오

for루프가 문자 수보다 적을 지 궁금 apply하지만 내가 가진 것에 만족합니다.


기술적으로 문제는 모든 지점에 선을 그리는 것입니다. 나는 그것을 테스트하고 또한 확인했다.
— Alexander Craggs

포인트를 연결하는 화살표가 있습니까? ,"un"첫 번째 줄 끝에서 제거 하여 5를 더 절약 할 수 있습니다.
— shadowtalker

마음에 들지 않으면 각 점을 연결하는 선이되어야한다고 생각합니다. 이렇게하면 각 답변에서 답변이 비슷하게 나타납니다.
— Alexander Craggs

5

QBasic 또는 QuickBasic, 130 자

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

코드 변형

  • 당신이 씨에 대한 메시지를 표시하지 않으려면, 교체 RANDOMIZE와 함께 RANDOMIZE TIMER.
  • 당신이 N에 대해 확인 메시지를 표시하려면, 대신 N=10에 INPUT N또는 INPUT "N";N.

샘플 런

의 경우 N=5DOSBox 0.74에서 실행되는 QBasic 1.1로 테스트되었습니다.

의 경우 N=100DOSBox 0.74에서 실행되는 QBasic 1.1로 테스트되었습니다.


오, 와우, N = 5에 대한 좋은 이미지! 씨앗이 42 일 때 오각형 인 것을 좋아하십시오. 테스트하고 확인했습니다.
— Alexander Craggs

4

배쉬 + ImageMagick : 148 자

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:

샘플 실행 :

bash-4.3$ time ./line.sh 5

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

샘플 출력 :

연결된 5 점

샘플 실행 :

bash-4.3$ time ./line.sh 25

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

샘플 출력 :

연결된 포인트 25 개

샘플 실행 :

bash-4.3$ time ./line.sh 100

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

샘플 출력 :

연결된 포인트 100 개


테스트 및 확인 잘 했어!
— Alexander Craggs

죄송합니다. 리더 보드에 추가하는 것을 완전히 잊었습니까? 지금 할게요
— Alexander Craggs

4

TCL 161 자

분명히 이길 수는 없지만 여기에 제시된 다른 몇 가지를 능가합니다. 저평가 된 언어를 잘 활용한다고 생각합니다.

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

예

내 시스템의 기본 캔버스 크기는 291x204입니다. 이유는 확실하지 않지만 사용하면 13자를 절약 할 수 있습니다.

상당히 빠르며 <5 초 안에 400 포인트, ~ 10 초에 500 포인트. 물론 크기와 포인트는 임의로 크기를 조정할 수 있으며 물론 문자와 비용으로 색상과 선 스타일을 변경할 수 있습니다. 골프를 치지 않고 변수를 사용하여보다 명확하고 쉽게 스케일링하고 색상을 지정할 수 있습니다.

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

1
불행히도 내 컴퓨터가 작동하지 않아 이미지를 테스트 한 후 나중에 테스트 해 보겠습니다. 이해가되지 않는 언어를 사용해 주셔서 감사합니다.
— Alexander Craggs

성공적으로 입장을 축하합니다!
— Alexander Craggs



4

[TI-Nspire] 루아 - 145 135 130

(고정 버전 업데이트)

n = 10 인 스크린 샷

허용 된대로 math.random을 "r"로 "가져 오기": r=math.random

실제 코드 :

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

참고 :이 코드는 TI-Nspire 계산기에서 작동합니다 . (TI 예를 들어 등을 그래프 물건에 대한 사용자를 허용하는 경우에도 기반 API로,이 플랫폼의 최신 운영체제에 루아 스크립트를 추가)
또한 할 수있다 여기에 온라인 시도 (단지 삭제 데모 스크립트 및 n=10예를 들어 내 앞에 추가 )


루아를 배울 시간이야!
— Beta Decay

1
이 같은 실수로 고통을 보인다 fuandon 의 삭제 PowerShell을의 대답과 VLO이 '도 삭제 s의 R의 대답 : 당신이 모든 다른 점으로, 쌍에없는 모든 점 점들을 연결합니다. (루아는이 사이트에서 매우 드물다. 코드를 삭제하는 대신 수정하십시오.)
— manatwork

오, 내 나쁜-곧 고칠거야!
— Adriweb

우리가 간다, 알려 줘서 고마워 :)
— Adriweb

이것은 테스트 및 확인되었습니다! 루아 사용을 잘했습니다.
— Alexander Craggs

3

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

5 점을 사용하여 플롯

N = 50

N = 50을 사용하여 플로팅

전체 코드는 다음과 같습니다.

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

테스트 및 확인! 문자 수를 확인할 때 전체 코드를 사용했으며 <700 자 ...>. <가되었을 때 놀랐습니다. 어쨌든, 성공적인 입장을 축하합니다!
— Alexander Craggs

Pens.Tan대신에 지름길 이 new Pen(Color.Tan)없습니까?
— CompuChip

추가 10 저장 Pens.Tan을 사용하도록 변경
— 데이빗 코더를

2

manatwork 덕분에 HTML / JS, 210

<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


이것은 확인되었습니다, 작동하도록했습니다!
— Alexander Craggs

~~대신 m.floor5 바이트를 절약 할 수 있습니다
— William Barbosa

만들기 기능 canvas태그 자동 폐쇄를하고 주위에 작은 따옴표 제거 id값을 : <canvas id=q />. (마지막 속성 값과 자동 폐쇄 사이에 하나의 공간을 떠날 필요가 있음을 참고 /.) BTW, 파이어 폭스에없이 잘 작동 m.floor()하고 ~~.
— manatwork


manatwork의 jsfiddle을 처음 시도했을 때 경고 상자에 암호가 필요하다고 생각했습니다! 나는 당황했다. 사람이 얼마나 바보가 될 수 있습니까? 나는 이것이 리더 보드의 다른 장소를 보증하기 위해 다른 사람들의 대답과 충분히 다르다고 생각합니다. 다른 사람들은 이것이 충분히 다르다고 생각합니까?
— 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});}}}

Stroke = Brushed.Red를 제거 할 수 있다고 말하고 싶습니다. 그러나 슬프게도 그것은 내가 투명한 선을 그리는 것을 의미하며, 내 추측은 그것이 실제로 계산되지 않는다는 것입니다. : PI는 XAML보기에서 그리드를 생성하여 몇 바이트를 면도 할 수도 있습니다. 그러나 그것은 불공평 해 보였으므로 XAML을 제거하여 빈 캔버스가되었습니다. (XAML을 바이트로 계산하지 않습니다 ...)

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


4
WPF이므로 메모리 부족 예외의 경우 약 3k 포인트에서 충돌합니다.
— WozzeC

C # WPF에서 테스트하고 확인했습니다!
— Alexander Craggs

2
var변수를 선언 할 때 사용하여 약간 단락 될 수 있습니다 .
— MarcinJuraszek

네 확실합니다. 감사! 또한 "this.AddChild"에서 "this"를 제거 할 수있었습니다.
— WozzeC

1

HPPPL, 231 220

(HP Prime 컬러 그래프 계산기 용 HP Prime 프로그래밍 언어)

골프를 쳤다. 모든 새로운 포인트 생성 직후 가능한 모든 새로운 라인을 그려서 11 개 적은 문자. 이전 세 개 대신 두 개의 중첩 루프 만 있습니다.

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;

언 골프 (270 자) :

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;

예 :

c (10)

connect_10_points_HPPPL

connect_10_points_HPPPL_2

c (30)

connect_30_points_HPPPL

HP Prime 컬러 그래프 계산기에는 320x240 픽셀 컬러 디스플레이가 있습니다.

여기에 이미지 설명을 입력하십시오

연결 키트와 함께 작동하는 에뮬레이터는 HP 웹 사이트 또는 http://www.hp-prime.de/en/category/6-downloads에서 제공 됩니다.

... 여전히 하드웨어가 도착하기를 기다리고 있습니다. 실행 시간에 대한 업데이트가 이어집니다.

오늘 내 HP 프라임이 도착했습니다. 실제 계산기에서 n = 100의 실행 시간은 다음과 같습니다.

평균 실행 시간

n = 100의 경우 약 0.65 초.

에뮬레이터는 Core i5 2410M 랩톱에서 약 4 배 (약 0.178 초) 빠릅니다.


1
글쎄, 나는 그 프로그래밍 언어에 대해 들어 본 적이 없지만 에뮬레이터에서 작동 했으므로 축하합니다! 리더 보드에 추가했습니다.
— Alexander Craggs

감사. 하드웨어를 갖추 자마자 실행 시간을 확인하겠습니다. 에뮬레이터는 실제 계산기보다 빠릅니다. 그러나 n = 100의 5 분 제한은 계산기에 매우 관대하다고 생각합니다.
— ML

1

NetLogo, 51 바이트

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

필요에 따라 9s를 다른 상수 또는 변수로 바꾸십시오.

NetLogo 출력


1
리더 보드에 추가되었습니다! 이것을 테스트하는 방법을 완전히 모르겠습니다. NetLogo를 다운로드하여 옵저버 섹션에 입력 한 다음 플롯에서 펜 명령으로 설정하려고 시도했지만 작동하지 않았습니다. 당신이 좀 포인터를 줄 수있는 경우에, 나는) =를 확인할 수있을 것
— 알렉산더 Craggs

F'rinstance : 'code'탭으로 이동하여 "go"로 시작하고 "end"로 중지하는 함수로 해당 줄을 래핑하십시오. 그런 다음 "go"를 호출하는 버튼을 첫 번째 버튼에 추가하고 누르십시오.
— wyldstallyns

1
확인했습니다! 아름다운 솔루션. 거북이가 무엇인지 아는 경우 영어처럼 코드를 읽을 수있는 방법이 좋습니다. 거의 확실하게 가장 읽기 쉬운 솔루션입니다.
— Alexander Craggs

산뜻한! 감사! NetLogo가 해결을 위해 준비된 것과 같은 질문을 찾고 있습니다. 아이러니하게도, 나는 NetLogo를 진정한 골프 경쟁자로 만들려고 노력하는 멋진 표현을 제거하기 위해 pyth-ish 프론트 엔드를 만들고 있습니다.
— wyldstallyns

1
어, 나는 그것이 여전히 훌륭한 대답이라고 생각했습니다! Pyth NetLogo 코드를 기다릴 수 없습니다. 바라 길 바랍니다.
— Alexander Craggs 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.