Loading...
Tzigoriyn avatar Tzigoriyn 44 Точки

Отнодно задачи "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
MartinBG avatar MartinBG 4803 Точки

Дяволът се крие в детайлите, както се казва в поговорката. 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 44 Точки

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

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

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

https://pastebin.com/Pfv1XW8x

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

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

@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 44 Точки

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

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

Приятен ден.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.