import math, algorithm type Point = tuple[x, y: float] Pair = tuple[p1, p2: Point] Result = tuple[minDist: float; minPoints: Pair] #--------------------------------------------------------------------------------------------------- template sqr(x: float): float = x * x #--------------------------------------------------------------------------------------------------- func dist(point1, point2: Point): float = sqrt(sqr(point2.x - point1.x) + sqr(point2.y - point1.y)) #--------------------------------------------------------------------------------------------------- func bruteForceClosestPair*(points: openArray[Point]): Result = doAssert(points.len >= 2, "At least two points required.") result.minDist = Inf for i in 0..= 2, "At least two points required.") result = closestPair(xP, yP) #——————————————————————————————————————————————————————————————————————————————————————————————————— import random, times, strformat randomize() const N = 50_000 const Max = 10_000.0 var points: array[N, Point] for pt in points.mitems: pt = (rand(Max), rand(Max)) echo "Sample contains ", N, " random points." echo "" let t0 = getTime() echo "Brute force algorithm:" echo points.bruteForceClosestPair() let t1 = getTime() echo "Optimized algorithm:" echo points.closestPair() let t2 = getTime() echo "" echo fmt"Execution time for brute force algorithm: {(t1 - t0).inMilliseconds:>4} ms" echo fmt"Execution time for optimized algorithm: {(t2 - t1).inMilliseconds:>4} ms"