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


#1

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

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

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);
        }
    }
}

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


#2

Java script:grinning:


#3

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


#4

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