Что не так с решением уровня?


#1
      // You need to distract "Big Bertha" until you special squad arrives.
         // The cannon always shoots at the pair of soldiers closest to each other.
            // We can predict which pair of soldiers in danger and protect them.
// This function should find the pair of units with the minimum distance between them.
                function findNearestPair(units) {
    // These variables are used to store comparable value and results.
    var minDistance = 9001;
    var nearestPair = ["Nobody", "Nobody"];
    // You need to check and compare all pairs of units.
    // Iterate all units with indexes from 0 to 'units.length-1'.
    for (var i = 0; i < soldiers.length; i++){
        for (var j = i+1; j < soldiers.length;j++){
            var distance = soldiers[j].pos.x - soldiers[i].pos.x;
            if (distance < minDistance){
                minDistance =  distance;
                nearestPair = [soldiers[i],soldiers[j]];
                } 
            } 
        } 
        // Use an additional loop through indexes 'j'from 'i+1' to 'units.length'.
            // Find the distance between the i-th and j-th units.
            // If the distance less than 'minDistance':
                // Reassign 'minDistance' with the new distance.
                // Reassign 'nearestPair' to the names of the current pair of units.
    hero.say(minDistance);
    return nearestPair;
    
}

while (true) {
    var soldiers = hero.findByType("soldier");
    // We know when the cannon shoots.
    if (hero.now() % 8 === 5) {
        var pairOfNames = findNearestPair(soldiers);
        // Say the soldier's names and wizards will protect them.
        hero.say(pairOfNames[0] + " " + pairOfNames[1]);
        
    }
}

код называет не двух ближайших солдатов.Кстати как точно найти дистанцию между ними?


#2

Отформатируйте код, пожалуйста, чтобы он был читаемей. Так будет проще помочь.

unit.distanceTo(anotherUnit.pos) или можно самому если хочется написать функцию определения дистанции.

((x1 - x2) ^ 2 + (y1 - y2) ^ 2) ^ 0.5


#3

Что значит отформатировать?


#4

сделать так, чтобы код выглядел как код. Можно использовать тройные кавычки ` перед и после кода. Или используйте кнопку в редакторе поста здесь. Код будет выглядеть для примера так:

someMethod(data);
function f(arg) {
    return "something";
}

if (a && b) {
    if (otherCondition > 9001) {
        for (var i = 0; i < array.length; i++) {
            doSomething(i);
        }
    }
}


#5

готово!Текст отформатирован.


#6
var distance = soldiers[j].pos.x - soldiers[i].pos.x;

Это не расстояние между солдатами - это разница между их Х координатами (еще может и отрицательной быть). В более ранних уровнях вы должны были сталкиваться с методом distanceTo.

В прошлом ответе я немного неверно написал. Должно быть

soldier1.distanceTo(soldier2)

Хотя будет работать и как написал ранее с pos, но лучше следовать докам.


#7

У меня не работает дистанс ту.Поэтому я как-то по другому пытался сделать.


#8

Не работает у героя или у солдат?


#9

Перепроверил ещё раз.Заработало.Вот так всегда с кодом.:joy: