Anonymous user
Closest-pair problem: Difference between revisions
m
→{{header|REXX}}: optimized the inner DO loop.
m (→{{header|REXX}}: optimized the inner DO loop.) |
|||
Line 4,193:
if high=='' | high=="," then high= 20000 /* " " " " " " */
if datatype(seed, 'W') then call random ,,seed /*seed for RANDOM (BIF) repeatability.*/
w= length(high); w= w + (w//2==0)
/*╔══════════════════════╗*/ do j=1 for N /*generate N random points*/
/*║ generate N points. ║*/ @x.j= random(low, high) /* " a random X */
/*╚══════════════════════╝*/ @y.j= random(low, high) /* " " " Y */
end /*j*/ /*X & Y make the point.*/
A= 1;
minDD= (@x.A - @x.B)**2 + (@y.A - @y.B)**2 /*distance between the first two points*/
/* [↓] use of XJ & YJ speed things up.*/
do j=1 for N-1;
do k=j+1
dd= (xj - @x.k)**2 + (yj - @y.k)**2 /*compute squared distance from points.*/
if dd<minDD then parse value dd j k with minDD A B
Line 4,211:
say left('', length($) - 1) "["right(@x.A, w)',' right(@y.A, w)"]"
say left('', length($) - 1) "["right(@x.B, w)',' right(@y.B, w)"]"
exit
/*──────────────────────────────────────────────────────────────────────────────────────*/
sqrt: procedure; parse arg x; if x=0 then return 0; d=digits(); m.=9; numeric form; h=d+6
|