Mã ngắn nhất để đặt điểm ngẫu nhiên và kết nối chúng


26

Nhiệm vụ

Đây là một nhiệm vụ mã hóa khá đơn giản, tất cả các chương trình của bạn phải làm là đặt một điểm trên một khung vẽ (hoặc thay thế của bạn bằng ngôn ngữ mã hóa khác) và kết nối nó với tất cả các dấu chấm đã được đặt. Chương trình của bạn phải có một đầu vào, số lượng chấm nên được đặt và xuất ra một số loại màn hình có các chấm được kết nối. Thí dụ

Yêu cầu

  • Tôi phải có khả năng chạy nó, điều đó có nghĩa là nó phải có trình biên dịch / công cụ để chạy trực tuyến hoặc có sẵn công khai để tải xuống.
  • Bạn được phép sử dụng bất kỳ thư viện nào được tạo trước khi thử thách này được đặt ra, miễn là nó không được thiết kế cho mục đích duy nhất là giải quyết vấn đề này.
  • Đây là một nhiệm vụ mã ngắn nhất, có nghĩa là các ký tự. Nhận xét, mã thay đổi màu sắc (cho sự đẹp mắt) và thư viện sẽ bị bỏ qua.
  • Câu trả lời của bạn phải là duy nhất, đừng đánh cắp mã người khác, rút ​​ngắn nó một vài ký tự và đăng lại.
  • Nó phải có thể chạy trong vòng chưa đầy 5 phút, đối với các giá trị 5 và 100. Nó cũng phải sử dụng độ phân giải ít nhất 200 * 200 và đặt mỗi dấu chấm vào một vị trí ngẫu nhiên trên khung vẽ bằng cách sử dụng phân phối không tầm thường.

Bảng xếp hạng hiện tại

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

Nếu tôi nhớ bạn, tôi rất xin lỗi, chỉ cần thêm một nhận xét cho tác phẩm của bạn và tôi sẽ thêm nó ngay khi tôi thấy nó =)

TL; DR

  • Đầu vào - Số lượng dấu chấm (int, có thể được mã hóa cứng)
  • Đầu ra - Hình ảnh của các chấm được đặt ngẫu nhiên, tất cả được kết nối với nhau (đồ họa)
  • Người chiến thắng - Mã ngắn nhất

1
Tôi có được phép thư viện toán không? Những thư viện chính xác mà bạn đang cố gắng tránh với yêu cầu # 2?
Nathan Merrill

2
Có giới hạn nào cho việc giải quyết không? Điều này khá dễ dàng nếu bạn cho tôi xuất hình ảnh 1x1
John Dvorak

3
Khi bạn nói không có thư viện "toán học", vậy còn các ngôn ngữ mà PRNG mặc định được bao gồm trong "toán học" thì sao? Tôi không muốn viết một máy phát điện.
Geobits

1
Vì bạn không cho phép mã thư viện liên quan trực tiếp đến tác vụ và về cơ bản nhiệm vụ đó là vẽ biểu đồ mạng ngẫu nhiên, không sử dụng các hàm vẽ biểu đồ gốc cũng không được phép? Hạn chế này là xa được xác định rõ.
ý

3
@PopeyGilbert Tôi phải nói rằng, tôi chưa bao giờ thấy một người dùng mới nào phản ứng nhanh với các vấn đề với câu hỏi của họ và cũng kiểm tra riêng từng câu trả lời và duy trì bảng xếp hạng. Chúc bạn làm tốt và chào mừng đến với PPGC!
Sở thích của Calvin

Câu trả lời:


21

Matlab (22)

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

Giả sử n là số điểm và có vẻ như thế này với n = 10: đồ thị ngẫu nhiên

n=6:

ngẫu nhiên

Giải thích

gplotlà một lệnh để vẽ đồ thị. Đối số đầu tiên là một n x nma trận tỷ lệ mắc (rõ ràng là đầy đủ). Đối số thứ hai phải là một n x 2ma trận có tọa độ của các điểm, nhưng không có vấn đề gì nếu kích thước thứ hai lớn hơn 2, vì vậy tôi chỉ tạo một n x nma trận các giá trị ngẫu nhiên (ngắn hơn 2 ký tự so với tạo n x 2ma trận).

Liên kết đến tài liệu


Không bao giờ sử dụng Matlab, vì vậy sẽ mất một chút thời gian để kiểm tra - Nhưng từ hình ảnh có vẻ ổn! Chúc mừng bạn đã làm điều đó trong 22 ký tự. EDIT - Hóa ra tôi không thể kiểm tra điều này, tuy nhiên nhìn vào hình ảnh có vẻ đúng nên tôi sẽ cho phép. Tuy nhiên, người khác có thể kiểm tra nó xin vui lòng?
Alexander Craggie

3
Cảm ơn =) Bạn có thể kiểm tra nó ở đây: octave-online.net Vì octave về cơ bản là phiên bản mã nguồn mở của MatLab.
flawr

27

Java: 318 282 265

Bởi vì, bạn biết đấy, 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();}}

Nó chỉ là một vòng lặp đơn giản tạo ra các chấm ngẫu nhiên và vẽ các đường giữa dấu chấm hiện tại và tất cả các dấu chấm trước đó.

Ví dụ với 25 dấu chấm:

nhập mô tả hình ảnh ở đây

Với ngắt dòng và nhập khẩu:

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

Chỉnh sửa: Vì chúng tôi không tính nhập khẩu, tôi đã nhập thêm một vài thứ để lưu một số ký tự sau này.

Chỉnh sửa 2: OP đã thêm một khoản trợ cấp cho số lượng dấu chấm mã hóa. -17 ký tự :)


Tốt đẹp! Chúc mừng bạn là người đầu tiên.
Alexander Craggie

2
Đầu tiên, nhưng tôi chắc chắn rằng nó sẽ không phải là ngắn nhất bởi một cú sút xa. Nguyên nhân, ya biết, Java;)
Geobits

3
Tôi ngưỡng mộ những người luôn giải quyết công việc trong Java, ngay cả khi vô vọng, tôi thậm chí quá lười biếng để bắt đầu nhật thực ... vì vậy +1 =)
flawr

1
@Chruncher Vâng, java chắc chắn không phải là ngôn ngữ tốt nhất cho môn đánh gôn. Tuy nhiên đó là ngôn ngữ đầu tiên tôi học được và khá dễ để tiếp thu. Tuy nhiên, nó cũng giúp tôi ổn định và là ngôn ngữ yêu thích của tôi.
Alexander Craggie

1
Không cần thiết phải xác định tham số chính là cuối cùng. Bạn có thể cắt bỏ 6 ký tự đó
Cruncher

11

Con trăn 2 - 41 35

Sau khi nhập một số thư viện như được phép cho thử thách này

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

chúng ta có thể vẽ một số điểm được kết nối chỉ bằng một dòng mã:

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

(Ảnh chụp màn hình được tạo với 10 điểm.)


[Đề cập đến một nhận xét đã xóa:] Tôi biết, nhưng ở đây "các thư viện sẽ bị bỏ qua". Nếu không, tôi chắc chắn sẽ thực hiện nó theo cách khác. Sử dụng các thư viện đó không lưu đủ ký tự để biện minh cho các importcâu lệnh trong một thử thách golf mã thông thường.
Falko

là một phần của phân phối tiêu chuẩn? Tôi sẽ tưởng tượng chúng ta không thể nhập bất cứ thứ gì chúng ta muốn. Theo số liệu đó, bạn có thể thực hiện bất cứ điều gì trong python với một câu lệnh nhập.
Cruncher

nó là . Tôi chỉ làm những gì tôi nghĩ sẽ hợp lệ. Nhưng tôi không chắc. Và nhìn vào các ý kiến ​​cho thấy một cuộc thảo luận lớn đang diễn ra. Ngay sau khi điều này được làm rõ, tôi sẵn sàng điều chỉnh mã của mình.
Falko

Mặc dù cuộc thi này xem những gì thư viện được phép dường như thay đổi từ ngày này sang ngày khác, PyLab chắc chắn nên được cho phép.
Alexander Craggie

8

Toán học 95 87

Với sự giúp đỡ của belisarius.

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

n = 5

5


n = 100

Thời gian: 2.082654 giây

100


Điều này đã được xác minh, tôi đã làm cho nó hoạt động! Mathicala thường được tính là một ngôn ngữ mặc dù?
Alexander Craggie

1
@PopeyGilbert Chắc chắn là có. Có ~ 750 câu trả lời trong Mathematica cho đến nay.
Geobits

Ồ, wow, được rồi! Đủ công bằng <3
Alexander Craggie

Methinks này ngắn hơn và đáp ứng các quy tắcCompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
Tiến sĩ belisarius

Cảm ơn, bạn đã đúng. Tôi hình dung mình không thể thắng nên tôi nghĩ tôi sẽ làm cho nó đẹp hơn (VertexSize -> {2,2}. Tuy nhiên, tôi đã bỏ qua thực tế 100là không cần thiết để đưa vào, và đó Input[]là tùy chọn.
DavidC

7

Con trăn 2, 158

Các câu lệnh nhập không được bao gồm trong số ký tự, như đã lưu ý trong câu hỏi ("thư viện sẽ bị bỏ qua").

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

Đầu ra mẫu:

n = 2 (...):

n = 2

n = 10 (trông giống như thứ 3d ưa thích hoặc thứ gì đó):

n = 10

n = 100 (có vẻ như ai đó đã đi BLELEEEAARARGHHH bằng bút đỏ):

n = 100

n = 500, 1000, 10000 (chạy trong khoảng 1,5 giây, 5-6 giây và 3,5 phút tương ứng):

Lưu ý: 10000 điểm một đã được chạy với phiên bản được tối ưu hóa một chút đã thay đổi dòng 3 (không bao gồm nhập) thành này:

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

Nếu không nó sẽ mất mãi mãi. : P

Ung dung:

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
Xin chúc mừng hiện tại là người đăng ký ngắn nhất! Thích nhận xét của bạn về n = 100. Có thể là tốt nhất để đặt image.new và image_size thành 800. Có thể trông bớt kỳ lạ hơn =)
Alexander Craggie

@PopeyGilbert Vì vậy, tôi có thể loại bỏ các báo cáo nhập khẩu từ tôi? Tôi giả sử "bỏ qua thư viện" có nghĩa là thư viện không được tính (như thường lệ).
Geobits

Vâng, bởi vì một số ngôn ngữ có rất ít chức năng cơ bản và phải nhập tất cả nội dung của chúng. Nếu bạn nghĩ rằng điều này không công bằng Geobits, thì hãy nói =) Tôi muốn thử làm cho hội chợ này.
Alexander Craggie

@PopeyGilbert Tôi chỉ hỏi vì đó không phải là tiêu chuẩn và muốn xóa nó trước khi tôi cắt thêm một vài ký tự từ mã của mình: D
Geobits

1
Vì độ phân giải chỉ phải có ít nhất 200x200, bạn có thể lưu một vài ký tự (5, tôi nghĩ) bằng cách đặt x=255và sử dụng nó để thay thế các thể hiện của 200255.
ý

5

R, 66

Đây là gian lận biên giới nhưng tôi vẫn nghĩ rằng nó nằm trong quy tắc. Thiết lập bằng cách tải igraphgói với library(igraph), có thể tải xuống từ CRAN với install.packages("igraph"). Sau đó gán đầu vào cho biến N. Theo quy định, những điều này không được tính vào tổng số.

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

N = 50

nhập mô tả hình ảnh ở đây

Lưu ý rằng mã này cũng rút ra các kết nối tự. Loại bỏ chúng (mặc dù không có quy tắc chống lại chúng) thêm 6 ký tự:

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

R, 141

Đây là một giải pháp trung thực và tốt trong cơ sở 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]))

mặc dù bạn vẫn phải nhập Nbằng tay.

N = 50

nhập mô tả hình ảnh ở đây

Tôi tự hỏi nếu một forvòng lặp sẽ có ít ký tự hơn applynhưng tôi hài lòng với những gì tôi có.


Tôi sẽ chấp nhận tự kết nối, về mặt kỹ thuật, câu hỏi là vẽ một đường thẳng tới TẤT CẢ các điểm. Tôi đã thử nó và cũng xác nhận nó.
Alexander Craggie

Bạn có nhớ mũi tên kết nối các điểm? Điều đó sẽ tiết kiệm thêm 5 bằng cách loại bỏ ,"un"ở cuối dòng đầu tiên.
Shadowtalker

Nếu bạn không phiền, tôi nghĩ chúng ta nên giữ nó để nó phải là các đường nối giữa mỗi điểm. Bằng cách đó, câu trả lời sẽ xuất hiện tương tự trong mỗi câu trả lời.
Alexander Craggie

5

QBasic hoặc QuickBasic, 130 ký tự

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

Các biến thể mã

  • Nếu bạn không muốn được nhắc về hạt giống, hãy thay thế RANDOMIZEbằng RANDOMIZE TIMER.
  • Nếu bạn muốn được nhắc về N, hãy thay thế N=10bằng INPUT Nhoặc INPUT "N";N.

Chạy mẫu

Đối với N=5, đã thử nghiệm với QBasic 1.1 chạy trên DOSBox 0.74:

Đối với N=100, đã thử nghiệm với QBasic 1.1 chạy trên DOSBox 0.74:


Ồ, wow, hình ảnh đẹp cho N = 5! Yêu rằng đó là một ngôi sao năm cánh khi hạt giống 42. Đã thử nghiệm và xác nhận.
Alexander Craggie

4

Bash + ImageMagick: 148 ký tự

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:

Chạy mẫu:

bash-4.3$ time ./line.sh 5

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

Đầu ra mẫu:

5 điểm kết nối

Chạy mẫu:

bash-4.3$ time ./line.sh 25

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

Đầu ra mẫu:

25 điểm kết nối

Chạy mẫu:

bash-4.3$ time ./line.sh 100

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

Đầu ra mẫu:

100 điểm kết nối


Đã thử nghiệm và xác nhận. Làm tốt lắm
Alexander Craggie

Tôi rất xin lỗi, tôi đã hoàn toàn quên thêm điều này vào ban lãnh đạo? Tôi se lam điêu đo ngay.
Alexander Craggie

4

Ký tự TCL 161

Rõ ràng sẽ không giành chiến thắng, nhưng đánh bại một số người khác được trình bày ở đây, và tôi nghĩ rằng nó sử dụng tốt một ngôn ngữ được đánh giá thấp.

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

Thí dụ

Kích thước vải mặc định trên hệ thống của tôi dường như là 291x204. Không chắc chắn tại sao, nhưng sử dụng nó tiết kiệm 13 ký tự.

Khá nhanh, 400 điểm trong <5 giây, 500 trong ~ 10 giây. Kích thước và điểm có thể được thu nhỏ tùy ý và màu sắc và kiểu đường kẻ có thể được thay đổi, với chi phí của các ký tự tất nhiên. Bỏ đánh gôn và sử dụng các biến để làm cho nó rõ ràng hơn và dễ dàng hơn để chia tỷ lệ và màu sắc:

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
Hình ảnh có vẻ ổn, tiếc là máy tính của tôi không hoạt động nên tôi sẽ kiểm tra lại sau. Chúc mừng bạn đã sử dụng một ngôn ngữ được đánh giá thấp như vậy.
Alexander Craggie

Chỉ cần xác nhận nó, chúc mừng một mục thành công!
Alexander Craggie



4

[TI-Nspire] Lua - 145 135 130

(Cập nhật phiên bản cố định)

Ảnh chụp màn hình với n = 10

"Nhập" math.random là "r", đầu tiên, như được phép: r=math.random

Mã thực tế:

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

Lưu ý: Mã này hoạt động trên các máy tính TI-Nspire (TI đã thêm tập lệnh Lua vào các hệ điều hành gần đây của nền tảng này, với API dựa trên chẵn cho phép người dùng vẽ đồ thị, v.v.)
Nó cũng có thể được thử trực tuyến tại đây (chỉ cần xóa kịch bản demo và n=10ví dụ của tôi chẳng hạn)


Thời gian để tôi học Lua!
Beta Decay

1
Điều này có vẻ đau khổ bởi những sai lầm tương tự như fuandon 's xóa PowerShell câu trả lời và VLO ' s cũng xóa R câu trả lời: bạn kết nối các dấu chấm trong cặp, không phải mọi dấu chấm với tất cả các chấm khác. (Lua rất hiếm trên trang web này. Vui lòng sửa mã của bạn thay vì xóa nó.)
manatwork

Ôi, tệ quá - tôi sẽ sửa nó sớm thôi!
Adriweb

Chúng ta đi nào, cảm ơn vì đã cho tôi biết :)
Adriweb

Điều này đã được thử nghiệm và xác nhận! Làm tốt lắm khi sử dụng Lua.
Alexander Craggie

3

Biểu mẫu 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

Lô đất sử dụng 5 điểm

N = 50

Lô đất sử dụng N = 50

Mã đầy đủ được đưa ra dưới đây

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

Đã thử nghiệm và xác nhận! Khi tôi kiểm tra số lượng ký tự, tôi đã sử dụng mã đầy đủ và rất ngạc nhiên khi nó có <700 ký tự ...>. <. Dù sao, chúc mừng bạn đã thực hiện một mục thành công!
Alexander Craggie

Không có một số phím tắt như Pens.Tanthay vì new Pen(Color.Tan)?
CompuChip

Đã thay đổi để sử dụng Pens.Tan, tiết kiệm thêm 10
Zed Coder

2

HTML / JS, 210, nhờ vào thao tác

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

Câu đố


Điều này đã được xác minh, tôi đã làm cho nó hoạt động!
Alexander Craggie

Bạn có thể sử dụng ~~thay vì m.floorđể lưu 5 byte
William Barbosa

Làm cho canvasthẻ tự đóng và xóa các dấu ngoặc đơn xung quanh idgiá trị : <canvas id=q />. (Lưu ý rằng bạn phải chừa một khoảng trống giữa giá trị thuộc tính cuối cùng và tự đóng /.) BTW, trong Firefox hoạt động tốt mà không cần m.floor()~~.
manatwork


Lần đầu tiên tôi thử jsfiddle của manatwork, tôi nghĩ hộp cảnh báo cần mật khẩu! Tôi đã bối rối. Làm thế nào một người ngu ngốc có thể được. Tôi tin rằng điều này đủ khác với câu trả lời của người khác để đảm bảo một vị trí khác trong ban lãnh đạo. Những người khác nghĩ rằng điều này là đủ khác nhau?
Alexander Craggie

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

Tôi muốn nói rằng tôi có thể xóa Stroke = Brushed.Red. Nhưng thật đáng buồn, điều đó có nghĩa là tôi đang vẽ những đường kẻ trong suốt, và Đoán của tôi là nó sẽ không thực sự được tính đến. : PI cũng có thể cạo một vài byte bằng cách tạo lưới trong chế độ xem XAML. Nhưng điều đó có vẻ không công bằng, vì vậy tôi đã tước XAML để trở thành một khung vẽ trống. (Tôi không tính XAML là byte ...)

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
Vì là WPF, nó sẽ bị sập ở khoảng 3k Điểm cho ngoại lệ Bộ nhớ.
WozzeC

Đã thử nghiệm và xác nhận, hoàn thành tốt việc thực hiện nó trong C # WPF!
Alexander Craggie

2
Có thể rút ngắn một chút bằng cách sử dụng varkhi khai báo biến.
MarcinJuraszek

Vâng, thực sự. Cảm ơn! Tôi cũng có thể xóa "cái này" khỏi "this.AddChild".
WozzeC

1

HPPPL, 231 220

(Ngôn ngữ lập trình HP Prime cho máy tính vẽ đồ thị màu HP Prime)

đánh nó xuống 11 ký tự ít hơn bằng cách vẽ tất cả các dòng mới có thể ngay sau mỗi lần tạo điểm mới. Chỉ có hai vòng lặp lồng nhau thay vì ba vòng trước.

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 ký tự):

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;

ví dụ:

c (10)

kết nối_10_point_HPPPL

kết nối_10_point_HPPPL_2

c (30)

kết nối_30_point_HPPPL

Máy tính vẽ đồ thị màu HP Prime có màn hình màu 320x240 pixel.

nhập mô tả hình ảnh ở đây

Trình giả lập cũng hoạt động với bộ kết nối có sẵn tại trang web của HP hoặc tại đây: http://www.hp-prime.de/en/carget/6-doads

... vẫn đang chờ phần cứng đến. Cập nhật về thời gian thực hiện sẽ theo sau.

Hôm nay HP Prime của tôi đã đến. Đây là thời gian thực hiện cho n = 100 trên một máy tính thực tế:

thời gian thực hiện trung bình

Khoảng 0,65 giây cho n = 100.

Trình giả lập nhanh gấp khoảng 4 lần (khoảng 0,178 giây) trên máy tính xách tay Core i5 2410M của tôi.


1
Chà, tôi thậm chí chưa bao giờ nghe về ngôn ngữ lập trình đó, nhưng nó đã làm việc trên trình giả lập nên xin chúc mừng! Tôi đã thêm bạn vào bảng xếp hạng.
Alexander Craggie

Cảm ơn. Ngay khi tôi có phần cứng, tôi sẽ kiểm tra thời gian thực hiện. Trình giả lập nhanh hơn máy tính thực tế. Nhưng tôi nghĩ giới hạn 5 phút cho n = 100 là rất hào phóng cho máy tính.
ML

1

NetLogo, 51 byte

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

Thay thế 9s bằng các hằng hoặc biến khác nếu cần.

Đầu ra NetLogo


1
Đã thêm vào bảng xếp hạng! Sợ tôi không hoàn toàn chắc chắn làm thế nào để kiểm tra điều này. Tôi đã tải xuống NetLogo và tôi đã nhập nó vào phần quan sát viên, sau đó thử đặt nó làm lệnh bút trên một cốt truyện, dường như không hoạt động. Nếu bạn có thể cho tôi một số gợi ý, tôi có thể xác nhận nó =)
Alexander Craggie

F'rinstance: đi vào tab 'code' và bọc dòng đó trong một hàm bắt đầu "đi" và dừng lại với "end". Sau đó, bạn có thể thêm một nút vào nút đầu tiên gọi "go" và nhấn nút đó.
wyldstallyns

1
Khẳng định! Giải pháp đẹp. Thật tuyệt vời nếu bạn biết rùa là gì bạn có thể đọc mã giống như tiếng Anh. Hầu như chắc chắn là giải pháp dễ đọc nhất.
Alexander Craggie

Khéo léo! Cảm ơn! Tôi đã cảnh giác với những câu hỏi như thế này mà NetLogo đang hướng tới giải quyết. Trớ trêu thay, tôi cũng đang xây dựng một mặt trước pyth-ish để loại bỏ tính chân thực tốt đẹp đó để thử và biến NetLogo trở thành một ứng cử viên golf thực sự.
wyldstallyns 8/12/2016

1
Eh, tôi đoán nó vẫn là một câu trả lời tuyệt vời! Không thể chờ đợi để xem mã NetLogo Pythogo của bạn, hy vọng sẽ là một cảnh tượng đáng chú ý!
Alexander Craggie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.