Алгоритм получения точки (x, y, z) за наименьшее количество шагов

необходимо найти некоторую неизвестную, заранее заданную точку в трехмерном пространстве, за наименьшее количество попыток, полагаясь только на функцию, которая может возвращать расстояние от любой переданной вами в нее точки до искомой. Для решения задачи сначала имплементируйте функцию f, которая, принимая координаты любой точки s(x, y, z), возвращает расстояние между этой точкой и условно неизвестной, предварительно произвольно сгенерированной вами точкой r(x, y, z), где x, y, и z могут быть любыми целыми числами между 0 и 100. Например, для произвольно сгенерированной точки r(0, 0, 10), и переданной в функцию точки s(0, 0, 0), результат работы функции будет следующим: f(s) = 10 // расстояние между s(0, 0, 0) и r(0, 0, 10) равно 10 Далее реализуйте сам алгоритм решения задачи. Алгоритм должен находить координаты произвольно сгенерированной точки за наименьшее количество вызовов функции f.

Получил необходимую точку путем перебора всех точек куба. Есть ли возможность сократить количество шагов для поиска точки?

let random_point = {x: getCoord(), y: getCoord(), z:getCoord()};

function getCoord(){
    return Math.floor(Math.random()*100+1);
}
function getDistance(basePoint, random_point){
    let distance = Math.hypot((basePoint.x-random_point.x),(basePoint.y-random_point.y),(basePoint.z-random_point.z));
    return distance;
}


function getRandomPoint(){
    let calls = 0;
    let search_points = [];
    //startPoint is point out of the cube of (100,100,100) where is our random_point
    //It has different distances for each point in the cube 
    let startPoint = {x: 100,y:5100, z:510100};
    let distance = getDistance(startPoint,random_point)
    //Comparing distance of each point with distance of startPoint and if it's equal
    //it's gonna be our random_point
    out:for(let x = 0; x<101; x++){
        for(let y = 0; y<101; y++){
            for(let z = 0; z<101; z++){
                let distance2 = getDistance(startPoint,{x,y,z});
                search_points.push({x,y,z});
                calls++;
                if(distance2==distance){
                     console.log('random_point is:', random_point);
                     console.log('point is found:', {x,y,z});
                     break out;
                }
            }
        }
    }
    const result = {
            random_point,
            search_points,
            calls
    } 
    console.log(result);
    return result;
}
getRandomPoint();

Ответы (0 шт):