JSFiddle - React, Tailwind, and code Playground
by artgas_pro
JavaScript
// Функция для генерации случайных координат астероида
function generateAsteroidLocation() {
const x = Math.floor(Math.random() * 101);
const y = Math.floor(Math.random() * 101);
const z = Math.floor(Math.random() * 101);
return { x, y, z };
}
// Функция для вычисления расстояния между зондом и астероидом
function calculateDistance(probe, asteroid) {
const dx = probe.x - asteroid.x;
const dy = probe.y - asteroid.y;
const dz = probe.z - asteroid.z;
return Math.sqrt(dx ** 2 + dy ** 2 + dz ** 2);
}
// Функция для нахождения координат астероида и оптимального количества зондов
function findAsteroidCoordinates() {
const asteroid = generateAsteroidLocation();
const probes = {
count: 0,
coordinates: [],
};
let minX = 0;
let maxX = 100;
let minY = 0;
let maxY = 100;
let minZ = 0;
let maxZ = 100;
while (true) {
const probeX = Math.floor((minX + maxX) / 2);
const probeY = Math.floor((minY + maxY) / 2);
const probeZ = Math.floor((minZ + maxZ) / 2);
const probe = { x: probeX, y: probeY, z: probeZ };
const distance = calculateDistance(probe, asteroid);
probes.count++;
probes.coordinates.push(probe);
if (distance === 0) {
break; // Найден астероид, выходим из цикла
}
// Обновляем границы пространства поиска
if (probeX < asteroid.x) {
minX = probeX;
} else {
maxX = probeX;
}
if (probeY < asteroid.y) {
minY = probeY;
} else {
maxY = probeY;
}
if (probeZ < asteroid.z) {
minZ = probeZ;
} else {
maxZ = probeZ;
}
}
return {
result: {
location: asteroid,
probes: probes,
},
};
}
// Пример использования
const result = findAsteroidCoordinates();
console.log(result);