Решил на codewars задачку и в топе решение которое изначально отличается по концепции от заданного условия.
Задание: Создайте функцию, которая возвращает имя победителя в бою между двумя бойцами.
Каждый боец по очереди атакует другого, и тот, кто убьет другого первым, побеждает. Смерть определяется как наличие здоровья <= 0.
Моё решение:
function declareWinner(fighter1, fighter2, firstAttacker) {
if (fighter1.name === firstAttacker) {
return fighter1.attack(fighter2);
} else {
return fighter2.attack(fighter1);
}
}
function Fighter(name, health, damagePerAttack) {
this.name = name;
this.health = health;
this.damagePerAttack = damagePerAttack;
this.toString = function () {
return this.name;
};
}
Fighter.prototype.attack = function (fighter) {
fighter.health -= this.damagePerAttack;
if (fighter.health <= 0) {
return this.toString();
}
return fighter.attack(this);
};
declareWinner(
new Fighter("Jerry", 30, 3),
new Fighter("Harald", 20, 5),
"Harald"
);
Решение из топа:
function declareWinner(fighter1, fighter2, firstAttacker) {
var fac1 = Math.ceil( fighter1.health / fighter2.damagePerAttack );
var fac2 = Math.ceil( fighter2.health / fighter1.damagePerAttack );
if(fac1 < fac2) {
return fighter2.name;
} else if(fac2 < fac1) {
return fighter1.name;
} else {
return firstAttacker;
}
}
Прошу оценить качество кода моего решения в сравнении с решением из топа!
Задачка:
codewars
P.S. Понимаю что вариант из топа чище, но с точки зрения ооп кажется что нет!