Професионална програма
Loading...
+ Нов въпрос
Tzigoriyn avatar Tzigoriyn 4 Точки

Отнодно задачи "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}`);
}

Тагове:
0
Fundamentals Module
Tzigoriyn avatar Tzigoriyn 4 Точки

Благодаря много, но не искам твоето решени, а отговор на конкретен въпрос. Надявам се да не те обиждам с отговора и ако е така се извинявам предварително за това. Въпроса ми е къде бъркам аз, а не как се справяш ти. Също така утре ще питам и нещо друго пак по същата тема, с неяснота в условията на задачите, а и всъщтност защо са на Английски език? В реалният живот когато получавам задание има кой да попитам при неяснота, въпреки, че с Африканският английски ми е малко трудно. Не съм сигурен в това, че заданието е правилно имайки в предвид кой английски се ползва (UK, US, Indian, Irish or.....). В същтност моя Английски не е от най-добрите и аз мога да съм допуснал грешка за което се извинявам също, но идеята на конкретният въпрос е какво точно аз не съм разбрал?

0
MartinBG avatar MartinBG 2680 Точки

Дяволът се крие в детайлите, както се казва в поговорката. smiley

 

Освен coin <-> bitcoin, има и още една "малка" разлика между двете условия, която е видна само от инпута в примерните тестове:

 

Dungeonest Dark :

  1. rat 10|bat 20|potion 10|rat 10|chest 100|boss 70|chest 1000
  2. cat 10|potion 30|orc 10|chest 10|snake 25|chest 110

 

MuOnline:

  1. 'rat 10|bat 20|potion 10|rat 10|chest 100|boss 70|chest 1000'
  2. [ 'cat 10|potion 30|orc 10|chest 10|snake 25|chest 110' ]

 

При MuOnline входът може да е подаден както като единичен стринг, така и като масив с един стринг в него.

 

Едно възможно решение е:

function dungeonDark(...arr){ // забележете 3-те точки преди arr

    //...
}

 

 

Ще е хубаво, да давате и линкове към условията и/или състезанието в Judge, за да улесните колегите, които искат да Ви помогнат. wink

0
30/06/2020 00:16:47
Tzigoriyn avatar Tzigoriyn 4 Точки

Много благодаря!

След повече от 10 задачи се пропускат такива детайли.

В същност бих бил много благодарен какъв е момента в който пропускам и какво в тази задача:

https://pastebin.com/Pfv1XW8x

за да дава 90/100 това наистина не ми дава грам спокойствие, дори малко ме ядосва.

1
30/06/2020 13:09:52
MartinBG avatar MartinBG 2680 Точки

@Tzigoriyn

Грешката е, че парсвате само команди с малки букви - такива са дадени в примерите, но в условието не пише, че ще се използват само малки букви и явно в последния тест в Judge има и име на monster с главна буква, напр:

'rat 10|Batman 20|potion 10|rat 10|chest 100|BOSS 70|chest 1000'
 

Фикс за 100/100:

    if (monsterAndPower.charCodeAt(i) >= 'A'.charCodeAt(0) && monsterAndPower.charCodeAt(i) <= 'Z'.charCodeAt(0)) {
      leter += monsterAndPower[i];
    } else if (monsterAndPower.charCodeAt(i) >= 97 && monsterAndPower.charCodeAt(i) <= 122) {
    //.....

 

Имайте предвид, че парсването, което използвате би се счупило и при други входни данни, например:

'Ben-10 99|Agent00 23|БабаЯга 66'

 

Горещо Ви препоръчвам да разучите работещият вариант на решението, който сте дали в първия пост и да се опитате да пререшите задачата, като използвате наученото.

Никога не пишете код като горния за парсване на текст! Никога! wink

Всеки език за програмиране предлага готови решения за това, а по-нататък ще учите и Regular Expressions,с които възможносите за работа с текст са пракически неограничени.

0
01/07/2020 04:14:50
Tzigoriyn avatar Tzigoriyn 4 Точки

Ето тук ме спечели от ново. Мислех че съм направил тази проверка е да ама нееее.

Няма да се повтарям, че сте много добри, упс.

Приятен ден.

1