Loading...
inaivanova1990 avatar inaivanova1990 33 Точки

Задача 4. Club от Programming Basics Online Exam - 6 and 7 July 2019

Моля за помощ! Когато кача решението в judge ми излиза съобщението:

C:\Windows\TEMP\ExecutionStrategies\c0mjz114.i2r\tmpA2BD.tmp:89
         cocktail = (currentCocktail.length)*cocktailNum;
                                     ^

TypeError: Cannot read property 'length' of undefined
    at solve (C:\Windows\TEMP\ExecutionStrategies\c0mjz114.i2r\tmpA2BD.tmp:89:38)
    at adapter (C:\Windows\TEMP\ExecutionStrategies\c0mjz114.i2r\tmpA2BD.tmp:121:11)
    at Socket.<anonymous> (C:\Windows\TEMP\ExecutionStrategies\c0mjz114.i2r\tmpA2BD.tmp:128:18)
    at Socket.emit (events.js:214:15)
    at endReadableNT (_stream_readable.js:1178:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)

Прилагам  и самото решение:

https://pastebin.com/pa1ynLfB

Условие на задачата:

Задача 4. Клуб

Времето се затопля и клубовете пускат обещаващи промоции. Напише програма, която да изчислява приходите на един клуб за вечерта и дали е достигната желаната печалба, като знаете следните условия: цената на един коктейл е дължината неговото име. Ако цената на една поръчка е нечетно число, има 25% отстъпка от цената на поръчката.

Вход

От конзолата се четат:

  • На първия ред – желаната печалба на клуба - реално число в интервала [1.00... 15000.00]

Поредица от два реда до получаване на командата "Party!" или до достигане на желаната печалба:

  • Име на коктейлатекст
  • Брой на коктейлите за поръчката – цяло число в интервала [1… 50]

Изход

На конзолата първо да се отпечата един ред:

  • При получена команда "Party!":

 "We need {недостигаща сума} leva more."

  • При достигане на желаната печалба:

                "Target acquired."

След това да се отпечата:

       "Club income - {приходи от клуба} leva."

Парите да бъдат форматирани до втората цифра след десетичния знак.

Тагове:
0
Programming Basics 30/07/2020 10:04:19
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

Hi,

Line  27-30: The main-problem why you received  "TypeError Length Undefined" is because there is no break-command in your if-validation, once the current sum has exceeded the target. Thus, the while-loop keeps on reading data from the array, even though the array has no more further elements.

Line 34: I don't think you need Math.Abs to solve this exercise, toFixed(2) is totally sufficient for the printing the final result.

Possible problem with judge: I have refactored your code, however when validating in judge, it gets 0% because the input can not be of array-type, which does not make sense since the array can have different lengths. So I guess that currently there is a problem with the judge-system, but your solution now works and does not throw any error when running locally on VS-Code.

Refactored code: 

 

function solve(input) {

let target = Number(input[0]);

// let cocktailName = input[1];

// let cocktailNum = parseInt(input[2]);

let index = 1;

let sum = 0;

// let cocktail = input;

 

while (index < input.length) {

let cocktailName = input[index];

 

if (cocktailName === "Party!") {

console.log(`We need ${(target - sum).toFixed(2)} leva more.`);

// console.log("We need " + Math.abs(target - sum).toFixed(2) + " leva more.");

break;

}

// let cocktailName = input[1];

let cocktailNum = Number(input[index + 1]);

 

let cocktailPrice = (cocktailName.length) * cocktailNum;

 

if (cocktailPrice % 2 !== 0) {

cocktailPrice *= 0.75;

}

 

sum += cocktailPrice;

index += 2;

 

if (sum >= target) {

// console.log("Target acquired");

// console.log("Club income " + sum.toFixed(2) + " leva.");

break;

}

 

}

 

if (sum < target) {

// console.log("We need " + Math.abs(target - sum).toFixed(2) + " leva more.");

console.log("Club income " + sum.toFixed(2) + " leva.");

} else {

console.log("Target acquired");

console.log("Club income " + sum.toFixed(2) + " leva.");

}


 

}

solve(['500', 'Bellini', '6', 'Bamboo', '7', 'Party!']);

 

solve(['100', 'Sidecar', '7', 'Mojito', '5', 'White Russian', '10']);

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