รหัสที่สั้นที่สุดเพื่อวางจุดแบบสุ่มและเชื่อมต่อ


26

งาน

นี่เป็นงานเขียนโค้ดที่ค่อนข้างง่ายโปรแกรมทั้งหมดของคุณต้องทำคือวางจุดบนผืนผ้าใบ (หรือทางเลือกของคุณในภาษาการเข้ารหัสอื่น) และเชื่อมต่อกับจุดทั้งหมดที่วางไว้แล้ว โปรแกรมของคุณจะต้องป้อนข้อมูลหนึ่งครั้งจำนวนจุดที่ควรอยู่และส่งออกการแสดงผลบางประเภทเมื่อเชื่อมต่อจุดต่างๆ ตัวอย่าง

ความต้องการ

  • ฉันต้องสามารถเรียกใช้งานได้ซึ่งหมายความว่าจะต้องมีคอมไพเลอร์ / เครื่องมือในการเรียกใช้ออนไลน์หรือดาวน์โหลดแบบสาธารณะ
  • คุณได้รับอนุญาตให้ใช้ห้องสมุดใด ๆ ที่สร้างขึ้นก่อนที่ความท้าทายนี้จะได้รับการกำหนดตราบใดที่มันไม่ได้ถูกออกแบบมาเพื่อการแก้ปัญหาเพียงอย่างเดียว
  • นี่เป็นงานรหัสที่สั้นที่สุดซึ่งหมายถึงตัวอักษร ความคิดเห็นรหัสที่เปลี่ยนสี (สำหรับความน่ารัก) และไลบรารีจะถูกละเว้น
  • คำตอบของคุณจะต้องไม่ซ้ำกันอย่าขโมยรหัสของคนอื่นทำให้สั้นลงไม่กี่ตัวอักษรและโพสต์ใหม่
  • มันจะต้องสามารถทำงานได้ในเวลาน้อยกว่า 5 นาทีสำหรับค่า 5 และ 100 นอกจากนี้ยังต้องใช้ความละเอียดอย่างน้อย 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
เมื่อคุณบอกว่าไม่มีไลบรารี่ "คณิตศาสตร์" แล้วภาษาไหนที่ PRNG เริ่มต้นรวมอยู่ใน "คณิตศาสตร์"? ฉันไม่ต้องการเขียนตัวสร้าง
Geobits

1
เนื่องจากคุณไม่อนุญาตให้ใช้รหัสห้องสมุดที่เกี่ยวข้องโดยตรงกับงานและงานนั้นมีความสำคัญในการวาดกราฟเครือข่ายแบบสุ่มไม่ได้ใช้ฟังก์ชันการวาดกราฟเนทีฟแบบดั้งเดิม ข้อ จำกัด นี้อยู่ไกลจากที่กำหนดไว้อย่างดี
comperendinous

3
@PopeyGilbert ฉันต้องบอกว่าฉันไม่เคยเห็นผู้ใช้รายใหม่ตอบสนองต่อปัญหาของคำถามและทดสอบคำตอบแต่ละข้อและดูแลกระดานผู้นำ ทำงานได้ดีและยินดีต้อนรับสู่ PPGC!
งานอดิเรกของ Calvin

คำตอบ:


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เนื่องจากอ็อกเทฟนั้นเป็นรุ่น opensource ของ MatLab
ข้อบกพร่อง

27

Java: 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;)
Geobits

3
ฉันชื่นชมคนที่มักจะแก้ปัญหางานใน Java แม้เมื่อสิ้นหวังฉันก็ขี้เกียจเกินกว่าที่จะเริ่มสุริยุปราคา ... ดังนั้น +1 =)
ข้อผิดพลาด

1
@Chruncher ใช่จาวาแน่นอนที่สุดไม่ใช่ภาษาที่ดีที่สุดสำหรับรหัสกอล์ฟ อย่างไรก็ตามมันเป็นภาษาแรกที่ฉันเรียนรู้และมันค่อนข้างง่ายต่อการรับ มันทำให้ฉันอยู่ในตำแหน่งที่ดีอย่างไรก็ตามและเป็นภาษาที่ฉันชอบโดยส่วนตัว
Alexander Craggs

1
ไม่จำเป็นต้องกำหนดพารามิเตอร์หลักเป็นขั้นสุดท้าย คุณสามารถตัดอักขระ 6 ตัวเหล่านั้นออกได้
Cruncher

11

Python 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 เป็นส่วนหนึ่งของการแจกแจงมาตรฐานหรือไม่ ฉันคิดว่าเราไม่สามารถนำเข้าสิ่งที่เราชอบได้ ภายใต้ตัวชี้วัดนั้นคุณสามารถใช้อะไรก็ได้ในไพ ธ อนด้วยคำสั่งนำเข้าเดียว
Cruncher

ใช่มันเป็น ฉันเพิ่งทำสิ่งที่ฉันคิดว่าจะถูกต้อง แต่ฉันไม่แน่ใจ. และการดูความคิดเห็นนั้นแสดงให้เห็นถึงการอภิปรายครั้งใหญ่ที่เกิดขึ้น ทันทีที่มีการชี้แจงฉันยินดีที่จะปรับรหัสของฉัน
Falko

แม้ว่าการแข่งขันนี้จะดูว่าห้องสมุดใดที่อนุญาตให้เปลี่ยนแปลงดูเหมือนว่าจะเป็นรายวัน PyLab ก็ควรได้รับอนุญาตอย่างแน่นอน
Alexander Craggs

8

Mathematica 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 แน่นอน นอกจากนี้~ 750 คำตอบใน Mathematica เพื่อให้ห่างไกล
Geobits

โอ้ว้าวโอเค! ยุติธรรมเพียงพอ <3
Alexander Craggs

คิดว่านี่สั้นลงและเป็นไปตามกฎCompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
ดร. เบลิซาเรียส

ขอบคุณคุณถูกต้อง ฉันคิดว่าฉันไม่สามารถชนะดังนั้นฉันคิดว่าฉันจะทำให้มันสวย (VertexSize -> {2,2} อย่างไรก็ตามฉันก็มองข้ามความจริงที่100ไม่จำเป็นในการรวมและนั่นInput[]เป็นทางเลือก
DavidC

7

Python 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, 1,000, 10,000 (ทำงานในประมาณ 1.5 วินาที, 5-6 วินาทีและ 3.5 นาทีตามลำดับ):

หมายเหตุ: 10000 คะแนนหนึ่งคะแนนถูกรันด้วยเวอร์ชันที่ปรับให้เหมาะสมเล็กน้อยซึ่งเปลี่ยนบรรทัด 3 (ไม่รวมการอิมพอร์ต) ไปยังสิ่งนี้:

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

มิฉะนั้นมันจะต้องดำเนินการตลอดไป : 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()

1
ขอแสดงความยินดีกับการเป็นผู้เข้าแข่งขันที่สั้นที่สุด! รักความคิดเห็นของคุณใน n = 100 อาจดีที่สุดที่จะใส่ image.new และ image_size เป็น 800 อาจดูแปลก ๆ =)
Alexander Craggs

@PopeyGilbert ฉันสามารถลบข้อความสั่งการนำเข้าออกจากฉันได้หรือไม่ ฉันถือว่า "ห้องสมุดไม่สนใจ" หมายความว่าห้องสมุดจะไม่ถูกนับ (ตามปกติ)
Geobits

ใช่เพราะบางภาษามีฟังก์ชั่นพื้นฐานน้อยมากและต้องนำเข้าสิ่งของทั้งหมด หากคุณคิดว่านี่ไม่ยุติธรรมกับ Geobits โปรดพูด =) ฉันต้องการลองใช้งานนี้
Alexander Craggs

@PopeyGilbert ฉันเพิ่งถามเพราะมันไม่ได้เป็นบรรทัดฐานและต้องการที่จะล้างมันก่อนที่ฉันจะตัดตัวละครจากรหัสของฉันอีกสองสามตัว: D
Geobits

1
ตั้งแต่ความละเอียดเท่านั้นที่จะมีอย่างน้อย 200x200, คุณสามารถประหยัดไม่กี่ตัวอักษร (5, ฉันคิด) โดยการตั้งค่าx=255และใช้มันเพื่อแทนที่อินสแตนซ์ของและ200 255
comperendinous

5

R, 66

อันนี้เป็นการโกงตามแนวชายแดน แต่ฉันก็ยังคิดว่ามันอยู่ในกฎ ตั้งค่าโดยการโหลดigraphแพคเกจด้วยlibrary(igraph)ซึ่งสามารถดาวน์โหลดได้จาก CRAN install.packages("igraph")กับ 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

คุณคำนึงถึงลูกศรที่เชื่อมต่อกับจุดต่าง ๆ หรือไม่? นั่นจะประหยัดได้อีก 5 โดยกำจัด,"un"เมื่อสิ้นสุดบรรทัดแรก
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

รหัสรูปแบบต่างๆ

  • หากคุณไม่ต้องการที่จะได้รับแจ้งสำหรับเมล็ดแทนที่ด้วยRANDOMIZERANDOMIZE TIMER
  • หากคุณต้องการที่จะได้รับแจ้งสำหรับ N, แทนที่N=10ด้วยหรือINPUT NINPUT "N";N

ตัวอย่างการวิ่ง

สำหรับN=5ทดสอบกับ QBasic 1.1 ที่ทำงานบน DOSBox 0.74:

สำหรับN=100ทดสอบกับ QBasic 1.1 ที่ทำงานบน DOSBox 0.74:


อ๋อวววววมีรูปสวย ๆ สำหรับ N = 5! รักที่มันเป็นรูปดาวห้าแฉกเมื่อเมล็ดเป็น 42 ทดสอบและยืนยัน
Alexander Craggs

4

Bash + 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 ตัวอักษร

ค่อนข้างเร็ว, 400 คะแนนใน <5 วินาที, 500 ใน ~ 10 วินาที สามารถปรับขนาดและคะแนนได้ตามใจชอบและสามารถปรับเปลี่ยนสีและสไตล์ของเส้นได้ตามค่าตัวอักษรของหลักสูตร ยกเลิกการตีกอล์ฟและใช้ตัวแปรเพื่อให้ชัดเจนและง่ายขึ้นในการปรับขนาดและสี:

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] Lua - 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 เพิ่ม Lua scripting ไปยัง OSes ล่าสุดของแพลตฟอร์มนี้โดยใช้ API แบบอิงคู่เพื่อให้ผู้ใช้สามารถสร้างกราฟเป็นต้นเป็นต้น)
สามารถลองออนไลน์ได้ที่นี่ (เพียงลบ สคริปต์สาธิตและต่อท้ายด้วย n=10ตัวอย่าง)


ได้เวลาเรียน Lua แล้ว!
Beta Decay

1
นี้ดูเหมือนว่าจะต้องทนทุกข์ทรมานจากความผิดพลาดเช่นเดียวกับfuandon 's ถูกลบPowerShellคำตอบและVLO ' s ลบRคำตอบ: คุณเชื่อมต่อจุดในคู่ไม่ได้ทุกจุดที่มีจุดอื่น ๆ ทั้งหมด (Lua หายากมากในไซต์นี้โปรดแก้ไขรหัสของคุณแทนการลบ)
จัดการ

โอ้ฉันไม่ดี - ฉันจะแก้ไขเร็ว ๆ นี้!
Adriweb

มีเราไปขอบคุณสำหรับการแจ้งให้เราทราบ :)
Adriweb

สิ่งนี้ได้รับการทดสอบและยืนยันแล้ว! ทำได้ดีมากในการใช้ Lua
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

เปลี่ยนเป็นใช้ Pens.Tan แล้วประหยัด 10
Zed Coder

2

HTML / JS, 210, ขอบคุณ 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


นี่คือการตรวจสอบฉันได้รับมันไปทำงาน!
Alexander Craggs

คุณสามารถใช้~~แทนm.floorการบันทึก 5 ไบต์
William Barbosa

ทำให้canvasแท็กตัวเองปิดและลบคำพูดเดี่ยวรอบคุ้มค่า:id <canvas id=q />(หมายเหตุที่คุณต้องออกจากหนึ่งช่องว่างระหว่างค่าแอตทริบิวต์ที่แล้วและปิดตัวเอง/.) BTW, ใน Firefox ทำงานได้ดีโดยไม่ต้องและm.floor() ~~
จัดการ

219 ตัวละคร: jsfiddle.net/e866azzs/5
จัดการ

ครั้งแรกที่ฉันลอง jsfiddle ของ manatwork ฉันคิดว่ากล่องเตือนต้องใช้รหัสผ่าน! ฉันงุนงง คนเราโง่แค่ไหน ฉันเชื่อว่านี่เป็นคำตอบที่แตกต่างจากคนอื่นมากพอที่จะรับประกันได้ในที่อื่นในกระดานผู้นำ คนอื่นคิดว่านี่แตกต่างกันพอไหม
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 ได้ แต่น่าเศร้าที่นั่นหมายความว่าฉันกำลังวาดเส้นที่โปร่งใสและ Guess ของฉันก็คือมันจะไม่นับอย่างแท้จริง : 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
อาจจะ shorted เล็กน้อยโดยใช้varเมื่อประกาศตัวแปร
MarcinJuraszek

ใช่แน่นอน. ขอบคุณ! ฉันยังสามารถลบ "this" ออกจาก "this.AddChild"
WozzeC

1

HPPPL, 231 220

(HP Prime Programming Language สำหรับเครื่องคิดเลขกราฟสี HP Prime)

golfed มันลง 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;

Ungolfed (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;

ตัวอย่าง:

ค (10)

connect_10_points_HPPPL

connect_10_points_HPPPL_2

ค (30)

connect_30_points_HPPPL

เครื่องคิดเลขกราฟสี HP Prime มีหน้าจอสีขนาด 320x240 พิกเซล

ป้อนคำอธิบายรูปภาพที่นี่

อีมูเลเตอร์ที่ทำงานร่วมกับชุดการเชื่อมต่อสามารถดูได้ที่เว็บไซต์ของ HP หรือที่นี่: http://www.hp-prime.de/en/category/6-downloads

... ยังคงรอให้ฮาร์ดแวร์มาถึง อัปเดตเกี่ยวกับเวลาดำเนินการจะตามมา

วันนี้ HP Prime มาถึงแล้ว นี่คือเวลาดำเนินการสำหรับ n = 100 ในเครื่องคิดเลขจริง:

เวลาดำเนินการเฉลี่ย

ประมาณ 0.65 วินาทีสำหรับ n = 100

อีมูเลเตอร์เร็วขึ้นประมาณ 4 เท่า (ประมาณ 0.178 s) บนแล็ปท็อป Core i5 2410M ของฉัน


1
ฉันไม่เคยได้ยินภาษาการเขียนโปรแกรมมาก่อนเลย แต่มันก็ใช้ได้กับอีมูเลเตอร์เพื่อแสดงความยินดี! ฉันได้เพิ่มคุณในกระดานผู้นำ
Alexander Craggs

ขอบคุณ ทันทีที่ฉันมีฮาร์ดแวร์ฉันจะตรวจสอบเวลาดำเนินการ ตัวจำลองนั้นเร็วกว่าเครื่องคิดเลขจริง แต่ฉันคิดว่าขีด จำกัด 5 นาทีสำหรับ n = 100 นั้นดีมากสำหรับเครื่องคิดเลข
ML

1

NetLogo, 51 ไบต์

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

แทนที่ 9s ด้วยค่าคงที่หรือตัวแปรอื่น ๆ ตามต้องการ

เอาท์พุท NetLogo


1
เพิ่มไปยังกระดานผู้นำ! เกรงว่าฉันไม่แน่ใจว่าจะทดสอบได้อย่างไร ฉันดาวน์โหลด NetLogo แล้วฉันพิมพ์ลงในส่วนผู้สังเกตการณ์จากนั้นลองตั้งค่าเป็นคำสั่งปากกาบนเนื้อเรื่อง แต่ดูเหมือนจะไม่ทำงาน หากคุณสามารถให้พอยน์เตอร์แก่ฉันได้ฉันจะสามารถยืนยันได้ =)
Alexander Craggs

F'rinstance: ไปที่แท็บ 'code' และปิดบรรทัดนั้นในฟังก์ชันที่เริ่มต้น "to go" และหยุดด้วย "end" จากนั้นคุณสามารถเพิ่มปุ่มแรกที่เรียกว่า "ไป" และกดปุ่ม
wyldstallyns

1
ได้รับการยืนยัน! ทางออกที่สวยงาม มันเยี่ยมมากถ้าคุณรู้ว่าเต่าคืออะไรคุณสามารถอ่านรหัสเหมือนภาษาอังกฤษได้ เกือบจะเป็นทางออกที่อ่านได้ง่ายที่สุด
Alexander Craggs

เรียบร้อย! ขอบคุณ! ฉันเฝ้ามองหาคำถามเช่นนี้ที่ NetLogo มุ่งสู่การแก้ปัญหา กระแทกแดกดันฉันยังสร้างด้านหน้า pyth-ish เพื่อลบคำฟุ่มเฟื่อยที่ดีที่จะลองและทำให้ NetLogo เป็นนักกอล์ฟที่แท้จริง
wyldstallyns

1
เอ๊ะฉันคิดว่ามันยังคงเป็นคำตอบที่ยอดเยี่ยม! แทบรอไม่ไหวที่จะเห็นรหัส Pyth NetLogo ของคุณหวังว่าจะได้เห็นกัน!
Alexander Craggs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.