HPPPL,146(171-20-5)个字节
EXPORT r(n)BEGIN LOCAL R,A,i,Q;RECT();Q:=118.;ARC_P(Q,Q,Q);FOR i FROM 1 TO n DO R:=√RANDOM(1.);A:=RANDOM(2*π);PIXON_P(G0,IP(Q+Q*R*COS(A)),IP(Q+Q*R*SIN(A)));END;FREEZE;END;
10000点的示例(包括实际设备的计时单位为秒):
该函数本身被调用 r(n)
。上图中的其余部分仅用于计时目的。
结果(光盘直径为236像素):
上面的版本不存储点坐标,因此我编写了一个带有两个参数的版本r(n,p)
。n
是点的数量,p=0
并将点返回到终端,p=1
绘制点和光盘)(如果必须存储坐标)。此版本的长度为283(308-20-5)字节:
EXPORT r(n,p)BEGIN LOCAL R,A,j,Q,x,y;Q:=118.0;CASE IF p==0 THEN print() END IF p==1 THEN RECT();ARC_P(Q,Q,Q) END END;FOR j FROM 1 TO n DO R:=√RANDOM(1.0);A:=RANDOM(2*π);x:=R*COS(A);y:=R*SIN(A);CASE IF p==0 THEN print("("+x+", "+y+")") END IF p==1 THEN PIXON_P(G0,IP(Q+Q*x),IP(Q+Q*y)) END END;END;FREEZE;END;
非高尔夫版本:
EXPORT r(n,p)
BEGIN
LOCAL R,A,j,Q,x,y;
Q:=118.0;
CASE
IF p==0 THEN print() END
IF p==1 THEN RECT();ARC_P(Q,Q,Q) END
END;
FOR j FROM 1 TO n DO
R:=√RANDOM(1.0);
A:=RANDOM(2*π);
x:=R*COS(A);
y:=R*SIN(A);
CASE
IF p==0 THEN print("("+x+", "+y+")") END
IF p==1 THEN PIXON_P(G0,IP(Q+Q*x),IP(Q+Q*y)) END
END;
END;
FREEZE;
END;
终端输出r(10,0)
:
r(10,1)
显示带有点的光盘,如上图所示。