Así que básicamente aquí está el problema que tengo de la escuela sobre los monstruos y tu energía que comienza en el primer índice y cada uno después de eso es cuánta energía necesitarás para matarlo en la pelea con el monstruo. Si ganas 3 batallas, obtienes el recuento de batallas agregado a tus puntos de energía. Así que me di cuenta de que la cadena End of Battle pasa por el ciclo while a pesar de que la puse en la condición con != :/
lo siento soy un poco novato..
function dude(input) { // inital energy as input(shift) let energy = Number(input.shift()); // we create a count and ++ it for every itteration let count = 0; // while input[0] is NOT "End Of Battle" and energy > 0 while (input[0] !== 'End Of Battle' && energy > 0) { // input.shift() is how much energy we will need for each monster let monster = Number(input.shift()); // we substract that input[0].shift() energy from the starting energy energy -= monster count++; if (count % 3 === 0) { energy += count; } console.log(energy); } if(energy <= 0){ console.log(`Not enough energy! Game ends with ${count} won battles and ${energy} energy`); }else{ console.log(`Won battles: ${count}. Energy left: ${Number(energy)}`); } } dude((["200", "54", "14", "28", "13", "End of battle"]));Está enviando una cadena 'Fin de la batalla' y comparándola con 'Fin de la batalla'. No son lo mismo. Para protegerse contra diferencias como esta, puede normalizar cadenas (recortar cualquier exceso de espacio en blanco y convertir a minúsculas) antes de comparar. Ajusté esta línea y ahora funciona:
if (input[0].trim().toLowerCase() !== 'end of battle' && ...) function dude(input) { // inital energy as input(shift) let energy = Number(input.shift()); // we create a count and ++ it for every itteration let count = 0; // while input[0] is NOT "End Of Battle" and energy > 0 while (input[0].trim().toLowerCase() !== 'end of battle' && energy > 0) { // input.shift() is how much energy we will need for each monster let monster = Number(input.shift()); // we substract that input[0].shift() energy from the starting energy energy -= monster count++; if (count % 3 === 0) { energy += count; } console.log('energy', energy); } if (energy <= 0) { console.log(`Not enough energy! Game ends with ${count} won battles and ${energy} energy`); } else { console.log(`Won battles: ${count}. Energy left: ${Number(energy)}`); } } dude(["200", "54", "14", "28", "13", "End of battle" ]);