Вот и снова я, Алмазная дюжина

написал код корректно, но уровень не выигрывается, т.к. не набирает нужного количества монет

// Собирай монеты, разгоняя мародёрствующих огров.

function findMostHealth(enemies) {
    var target = null;
    var targetHealth = 0;
    var enemyIndex = 0;
    while(enemyIndex < enemies.length) {
        var enemy = enemies[enemyIndex];
        if(enemy.health > targetHealth) {
            target = enemy;
            targetHealth = enemy.health;
        }
        enemyIndex += 1;
    }
    return target;
}

function valueOverDistance(item) {
    return item.value / hero.distanceTo(item);
}

// Возврати предмет с наибольшим значением `valueOverDistance(item)`.
function findBestItem(items) {
    var bestItem = null;
    var bestValue = 0;
    var itemsIndex = 0;
    while(itemsIndex < items.length) {
    // Перебери массив предметов.
    // Найди предмет с наибольшим значением `valueOverDistance()`.
    var item = items[itemsIndex];
        if(item.value > bestValue) {
            bestItem = item;
            bestValue = valueOverDistance;
        }
        itemsIndex +=1;
    }
    return bestItem;
}

while(true) {
    var enemies = hero.findEnemies();
    var enemy = findMostHealth(enemies);
    if(enemy && enemy.health > 15) {
        while(enemy.health > 0) {
            hero.attack(enemy);
        }
    } else {
        var coins = hero.findItems();
        var coin = null;
        coin = findBestItem(coins);
        if(coin) {
            hero.moveXY(coin.pos.x, coin.pos.y);
        }
    }
}

Собирает, но упорно не побеждает

Java script:grinning:

Я думаю, что в вашей функции findBestItem, var item = items [itemIndex]; неправильно отступ. Если вы правильно отделили его, он должен работать

В методе «findBestItem» сразу пара ошибок. Одна синтаксическая, другая логическая.
Если исправить ошибки, уровень проходится нормально.
Идея в том, чтобы метод «findBestItem» нашел «Item», для которого метод «valueOverDistance» вернет самое большое значение.

Тоже самое, собирает, но не выигрывает.
Если нажать “запустить”, то пишет “успешно”, если нажать “завершить”, то “не завершено”.

// Собирай монеты, разгоняя мародёрствующих огров.

function findMostHealth(enemies) {
    var target = null;
    var targetHealth = 0;
    var enemyIndex = 0;
    while(enemyIndex < enemies.length) {
        var enemy = enemies[enemyIndex];
        if(enemy.health > targetHealth) {
            target = enemy;
            targetHealth = enemy.health;
        }
        enemyIndex += 1;
    }
    return target;
}

function valueOverDistance(item) {
    return item.value / hero.distanceTo(item);
}

// Возврати предмет с наибольшим значением `valueOverDistance(item)`.
function findBestItem(items) {
    var bestItem = null;
    var bestValue = 0;
    var itemsIndex = 0;
    
    // Перебери массив предметов.
    // Найди предмет с наибольшим значением `valueOverDistance()`.
    while(itemsIndex < items.length) {
             var item = items[itemsIndex];   
    if (item.value > bestValue) {
        bestItem = item;
        bestValue = item.value;
    }
    itemsIndex += 1;
  
}
  return bestItem;
}
while(true) {
    var enemies = hero.findEnemies();
    var enemy = findMostHealth(enemies);
    if(enemy && enemy.health > 15) {
        while(enemy.health > 0) {
            hero.attack(enemy);
        }
    } else {
        var coins = hero.findItems();
        var coin = null;
        coin = findBestItem(coins);
        if(coin) {
            hero.moveXY(coin.pos.x, coin.pos.y);
        }
    }
}