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

Задача 4. Кино ваучер

https://pastebin.com/Nd8qHA1k

Здравейте, някой може ли да ми обясни защо на това решение judge не дава никакви точки?

Изпит по "Основи на програмирането" – 6 и 7 Април 2019

Задача 4. Кино ваучер

Любо е голям почитател на киното и редовно ходи на прожекции и участва в томболи, от които често печели ваучери за кино. Вашата задача е да напишете програма, която да изчислява колко покупки от киното може да си купи Любо със спечеленият ваучер. Ако името на покупката съдържа повече от 8 символа, то тя е билет за филм, а нейната цена представлява сумата на ASCII символите от първите ѝ два символа. Ако името на покупката съдържа 8 или по-малко символа, нейната цена е равна на стойността на първия ASCII символ в името. Любо въвежда името на покупките, които желае, докато не въведе "End" или не въведе покупка, чиято стойност е по-голяма от останалата сума на ваучера.

Вход

Първоначално се чете един ред:

  • Стойността на ваучера – цяло число в интервала [1…100000]

След това до получаване на команда "End" или до изчерпването на ваучера, се чете по един ред:

  • Покупката, която Любо е избрал – текст

Изход

Програмата приключва при въвеждане на команда "End" или при покупка чиято стойност е по-голяма от останалите пари от ваучера. На конзолата трябва да се напечатат три реда:

  • "{брои закупени билети}"
  • "{брой закупени други покупки}"

Примерен вход и изход

Вход

Изход

Обяснения

300

Captain Marvel

popcorn

Pepsi

1

1

Сумата на ваучера е 300

Дължината на името на първата покупка е 14 символа, 14 > 8 следователно е филм и цената се образува от първите два символа на текста:

'C'(67) и 'a'(97), цена: 67 + 97 = 164 <= 300, цената изпълнява условието да е по-ниска или равна от наличната сума и купуваме билета.

Остават: 300 – 164 = 136

Дължината на името на втората покупка е 7 символа, 7 <= 8 следователно това е продукт, чиято цена се получава от първият символ 'p'(112), цена: 112 <= 136, цената е по-ниска или равна от наличната сума и купуваме продукта.

Остават 136 – 112 = 24

Дължината на името на третата покупка е 5 символа, 5 <= 8 следователно това е продукт, чиято цена се получава от първият символ 'P'(80), цена: 80 > 24, цената е по-висока от останалата сума във ваучера, продукта не се купува и печатаме броя на покупките

1500

Avengers: Endgame

Bohemian Rhapsody

Deadpool 2

End

3

0

Сумата на ваучера е 1500

Дължината на името на първата покупка е 17 символа, 17 > 8 следователно е филм и цената се образува от първите два символа на текста:

'A'(65) и 'v'(118), цена: 65 + 118 = 183 <= 1500, цената е по-ниска или равна от наличната сума, следователно купуваме билета.

Остават: 1500 – 183 = 1317

Дължината на името на втората покупка е 17 символа, 17 > 8 следователно е филм и цената се образува от първите два символа на текста:

'B'(66) и 'o'(111), цена: 66 + 111 = 177 <= 1317, цената е по-ниска или равна от наличната сума и купуваме билета.

Остават: 1317 – 177 = 1140

Дължината на името на третата покупка е 10 символа, 10 > 8 следователно е филм и цената се образува от първите два символа на текста:

'D'(68) и 'e'(101), цена: 68 + 101 = 169 <= 1140, цената е по-ниска или равна от наличната сума и купуваме билета.

Остават: 1140 – 169 = 971

Получаваме команда End и печатаме броя на покупките

 

Тагове:
0
Programming Basics
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

You get the input as individual arguments, so the best thing is to just use [...arguments] to collect all of the lines into a new array.

Best,

function solve() {
    let input = [...arguments]
    let sumVoucher = Number(input.shift());
    // let index = 0;
    // let total = 0;
    let movie = 0;
    let otherProduct = 0;
    let currentProduct = input.shift();

    // while (index < input.length) {
    while (currentProduct !== 'End') {
        let total = 0;
        // let currentProduct = input[index];

        // if (currentProduct === "End") {

        //     break;
        // }

        if (currentProduct.length > 8) {
            total += (Number(currentProduct.charCodeAt(0)) + Number(currentProduct.charCodeAt(1)));

            if (total <= sumVoucher) {
                movie++;
            } else {
                break;
            }
            // sumVoucher -= total;

        } else {

            // if (Number(currentProduct.charCodeAt(0)) >= 97 &&
            //     Number(currentProduct.charCodeAt(0)) <= 122)
            total = Number(currentProduct.charCodeAt(0));
            if (sumVoucher >= total) {
                otherProduct++;
                // sumVoucher -= total;
            } else {
                break;
            }
        }
        sumVoucher -= total;

        currentProduct = input.shift();
        // index++;
    }
    console.log(movie);
    console.log(otherProduct);
}

 

0
02/12/2020 22:20:00
inaivanova1990 avatar inaivanova1990 33 Точки

Thank you again, I would never think of that "let input = [...arguments]"

0
inaivanova1990 avatar inaivanova1990 33 Точки

But why it's not working in VSC?

 

Uncaught TypeError: Cannot read property 'length' of undefined

0
Axiomatik avatar Axiomatik 2422 Точки

I have changed your code to work with input.shift(), which takes each element of the array and doesn't need length or index.

Also make sure, with what input you are working with:

1: ['300', 'Captain Marvel', 'popcorn', 'Pepsi'], already comes in form of an array, does not need let input = [...arguments] and you should use function solve(input)


function solve(input) {}
solve(['300', 'Captain Marvel', 'popcorn', 'Pepsi']);

 

2: ('300', 'Captain Marvel', 'popcorn', 'Pepsi'), separate arguments not inside of an array (as is the case for this exercise), use function solve(...input) or let input = [...arguments] to create an array with the necessary elements. When using [...arguments], function solve() can remain empty.



function solve(...input) {}
OR
function solve() {}
let input = [...arguments]
solve('300', 'Captain Marvel', 'popcorn', 'Pepsi');

Otherwise, your code version with length/index works this way:

function solve() {
    let input = [...arguments]
    let sumVoucher = Number(input.shift());
    let index = 0;
    // let total = 0;
    let movie = 0;
    let otherProduct = 0;
    // let currentProduct = input.shift();
    let currentProduct = input[index];

    // while (currentProduct !== 'End') {
    while (index < input.length) {

        if (currentProduct === "End") {
            break;
        }
        let total = 0;

        if (currentProduct.length > 8) {
            total += (Number(currentProduct.charCodeAt(0)) + Number(currentProduct.charCodeAt(1)));

            if (total <= sumVoucher) {
                movie++;
            } else {
                break;
            }
            // sumVoucher -= total;

        } else {

            // if (Number(currentProduct.charCodeAt(0)) >= 97 &&
            //     Number(currentProduct.charCodeAt(0)) <= 122)
            total = Number(currentProduct.charCodeAt(0));
            if (sumVoucher >= total) {
                otherProduct++;
                // sumVoucher -= total;
            } else {
                break;
            }
        }
        sumVoucher -= total;

        // currentProduct = input.shift();
        index++;
        currentProduct = input[index];
    }
    console.log(movie);
    console.log(otherProduct);
}

 

Best,

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