Отнодно задачи "9. *Dungeonest Dark от JS Fundamentals 3" и "Problem 2. Mu Online от MidExam 29.02.2020"
Това е абсолютно идентична задача проверена ред по ред. Парадоксалното е че при едно и също решение в двата случая (само се променя Coins с Bitcoins). Имам два варянта на задачата. В първият ми дава 90/100 и в двете задачи грешка в тест 10. А най смешното е че вторият ми дава 100/100 в 9-та* задача и 0/100 във 2-ра задача. Моля да ми отговорите каво точно греша в тези задача. Вече си мисля и то не без основани, че условията на задачит нещо куцат или нарочно са с не дописани важни условия.
1.
function dungeonestDark(string) {
let monsterAndPower = string.toString();
let initialHelt = 100;
let initialCoints = 0;
let leter = "";
let power = "";
let monsterArr = [];
let powerArr = [];
let bestrRoom = 0;
let momentalPower = 0;
let momentalPowerUp = 0;
let bossKilled = false;
for (let i = 0; i <= monsterAndPower.length; i++) {
if (monsterAndPower.charCodeAt(i) >= 97 && monsterAndPower.charCodeAt(i) <= 122) {
leter += monsterAndPower[i];
} else if (monsterAndPower.charCodeAt(i) >= 48 && monsterAndPower.charCodeAt(i) <= 57) {
power += monsterAndPower[i];
} else if (monsterAndPower.charCodeAt(i) == 45) {
power += monsterAndPower[i];
} else if (monsterAndPower.charCodeAt(i) == 32) {
monsterArr.push(leter)
leter = "";
} else {
powerArr.push(power);
power = "";
}
}
for (let arrM in monsterArr) {
if (!bossKilled) {
bestrRoom++;
for (let i = arrM; i < powerArr.length; i++) {
if (monsterArr[i] == "potion") {
momentalPower = initialHelt;
initialHelt += Number(powerArr[i]);
if ((momentalPower + Number(powerArr[i])) <= 100) {
momentalPowerUp = Number(powerArr[i]);
} else {
initialHelt = 100;
momentalPowerUp = initialHelt - momentalPower;
}
console.log(`You healed for ${momentalPowerUp} hp.`);
console.log(`Current health: ${initialHelt} hp.`);
break;
} else if (monsterArr[i] == "chest") {
initialCoints += Number(powerArr[i]);
console.log(`You found ${powerArr[i]} coins.`);
break;
} else {
initialHelt -= Number(powerArr[i]);
if (initialHelt <= 0) {
console.log(`You died! Killed by ${monsterArr[i]}.`);
console.log(`Best room: ${bestrRoom}`);
bossKilled = true;
break;
} else {
console.log(`You slayed ${monsterArr[i]}.`);
break;
}
}
}
}
}
if (!bossKilled) {
console.log("You've made it!");
console.log(`Coins: ${initialCoints}`);
console.log(`Health: ${initialHelt}`);
}
}
2.
function dungeonDark(arr){
let dungen = arr[0].split('|');
let health = 100;
let coins = 0;
let counterRooms = 0;
let allCoins = 0;
for(let i = 0; i < dungen.length;i++){
let currentRoom = dungen[i].split(' ');
let command = currentRoom[0];
let num = Number(currentRoom[1]);
counterRooms++;
if(command === 'potion'){
if (health + num > 100) {
num = 100 - health;
health = 100;
} else
{
health += num;
}
console.log(`You healed for ${num} hp.`);
console.log(`Current health: ${health} hp.`);
}else if(command === 'chest'){
coins = Number(num);
allCoins += Number(num);
console.log(`You found ${coins} coins.`);
}else{
health -= Number(num);
if(health > 0){
console.log(`You slayed ${command}.`);
}else{
console.log(`You died! Killed by ${command}.`);
console.log(`Best room: ${counterRooms}`);
return;
}
}
}
console.log(`You've made it!`);
console.log(`Coins: ${allCoins}`);
console.log(`Health: ${health}`);
}
Много благодаря!
След повече от 10 задачи се пропускат такива детайли.
В същност бих бил много благодарен какъв е момента в който пропускам и какво в тази задача:
https://pastebin.com/Pfv1XW8x
за да дава 90/100 това наистина не ми дава грам спокойствие, дори малко ме ядосва.
@Tzigoriyn
Грешката е, че парсвате само команди с малки букви - такива са дадени в примерите, но в условието не пише, че ще се използват само малки букви и явно в последния тест в Judge има и име на monster с главна буква, напр:
'rat 10|Batman 20|potion 10|rat 10|chest 100|BOSS 70|chest 1000'
Фикс за 100/100:
Имайте предвид, че парсването, което използвате би се счупило и при други входни данни, например:
'Ben-10 99|Agent00 23|БабаЯга 66'
Горещо Ви препоръчвам да разучите работещият вариант на решението, който сте дали в първия пост и да се опитате да пререшите задачата, като използвате наученото.
Никога не пишете код като горния за парсване на текст! Никога!
Всеки език за програмиране предлага готови решения за това, а по-нататък ще учите и Regular Expressions,с които възможносите за работа с текст са пракически неограничени.
Ето тук ме спечели от ново. Мислех че съм направил тази проверка е да ама нееее.
Няма да се повтарям, че сте много добри, упс.
Приятен ден.