Loading...
BGdaredevil avatar BGdaredevil 8 Точки

Проблем със задача в книгата Programing basics за JavaScript

Здравейте,

собственоръчно реших задачата така:

https://pastebin.com/A5ZvSnKr

50+ вариации пи-късно пак си дава 80/100 в джъдж:

https://judge.softuni.bg/Contests/Practice/Index/942#0

на база книгата направих и това:

https://pastebin.com/m6UAsk82

и то 10 вариации по-късно дава пак 80/100 в джъдж:

https://judge.softuni.bg/Contests/Practice/Index/942#0

Някой има ли решено това? / би ли посочил грешката в решението?

Тагове:
0
Programming Basics
BGdaredevil avatar BGdaredevil 8 Точки

P.S. Условитето:

 и линк към книгата:

https://js-book.softuni.bg/chapter-09-problems-for-champions-part-2.html

Глава 9.2. Задачи за шампиони – част II
В тази глава ще разгледаме още три задачи, които причисляваме към категорията
"за шампиони", т.е. по-трудни от стандартните задачи в тази книга.
По-сложни задачи върху изучавания материал
Преди да преминем към конкретните задачи, трябва да поясним, че те могат да
се решат по-лесно с допълнителни знания за програмирането и езика JavaScript
(функции, масиви, колекции, рекурсия и т.н.), но всяко едно решение, което ще
дадем сега, ще използва единствено материал, покрит в тази книга. Целта е да се
научите да съставяте по-сложни алгоритми на базата на сегашните си знания.
Задача: дни за страстно пазаруване
Лина има истинска страст за пазаруване. Когато тя има малко пари, веднага отива
в първия голям търговски център (мол) и се опитва да изхарчи възможно най-
много за дрехи, чанти и обувки. Но любимото ѝ нещо са зимните намаления.
Нашата задача е да анализираме странното ѝ поведение и да изчислим покупките,
които Лина прави, когато влезе в мола, както и парите, които ѝ остават, когато
приключи с пазаруването си.
Първият аргумент на функцията ще бъде сумата, която Лина има преди да започне
да пазарува. Вторият аргумент ще бъде списък от команди(стрингове), които Лина
ще изпълни. При получаване на командата "mall.Enter", Лина влиза в мола и
започва да пазарува, докато не получи командата "mall.Exit". След като Лина
започне да пазарува, всеки следващ елемент от масива, ще представлява
действия, които Лина изпълнява. Всеки символ в стринга представлява покупка
или друго действие. Стринговите команди могат да съдържат само символи от
ASCII таблицата. ASCII кода на всеки знак има връзка с това колко Лина трябва да
плати за всяка стока. Интерпретирайте символите по следния начин:
• Ако символът е главна буква, Лина получава 50% намаление, което означава,
че трябва да намалите парите, които тя има, с 50% от цифровата
репрезентация на символа от ASCII таблицата.
• Ако символът е малка буква, Лина получава 70% намаление, което означава,
че трябва да намалите парите, които тя има, с 30% от цифровата
репрезентация на символа от ASCII таблицата.
• Ако символът е "%", Лина прави покупка, която намалява парите ѝ на
половина.
• Ако символът е "*", Лина изтегля пари от дебитната си карта и добавя към
наличните си средства 10 лева.
• Ако символът е различен от упоменатите горе, Лина просто прави покупка
без намаления и в такъв случай просто извадете стойността на символа от
ASCII таблицата от наличните ѝ средства.
358 Основи на програмирането с JavaScript
Ако някоя от стойностите на покупките е по-голяма от текущите налични
средства, Лина НЕ прави покупката. Парите на Лина не могат да бъдат по-малко
от 0.
Пазаруването завършва, когато се получи командата "mall.Exit". Когато това
стане, трябва да принтирате броя на извършени покупки и парите, които са
останали на Лина.
Входни данни
Входните данни се подават в два аргумента. Първият ще бъде сумата, която Лина
има преди да започне да пазарува. Вторият аргумент ще бъде масив от команди,
който се обработва последователно. Когато получите командата "mall.Enter",
всеки следващ елемент ще бъде стринг, съдържащи информация относно
покупките / действията, които Лина иска да направи. В масива ще има команди,
които трябва да се изпълнят, докато не се получи командата "mall.Exit".
Винаги ще се подава само една команда "mall.Enter" и само една команда
"mall.Exit".
Изходни данни
Изходните данни трябва да се принтират на конзолата. Когато пазаруването
приключи, на конзолата трябва да се принтира определен изход в зависимост от
това какви покупки са били направени.
• Ако не са били направени някакви покупки – "No purchases. Money left: {оста-
нали пари} lv."
• Ако е направена поне една покупка - "{брой покупки} purchases. Money left:
{останали пари} lv."
Парите трябва да се принтират с точност от 2 символа след десетичния знак.
Ограничения
• Парите са число с плаваща запетая в интервала: [0 - 7.9 x 1028].
• Броят стрингове между "mall.Enter" и "mall.Exit" ще в интервала: [1-20].
• Броят символи във всеки стринг, който представлява команда, ще е в
интервала: [1-20].
• Позволено време за изпълнение: 0.1 секунди.
• Позволена памет: 16 MB.
Примерен вход и изход
Глава 9.2. Задачи за шампиони – част II 359
Вход Изход Коментар
110
mall.Enter
d
mall.Exit
1 purchases.
Money left:
80.00 lv.
‘d’ има ASCII код 100. ‘d’ e малка буква и за
това Лина получава 70% отстъпка и така тя
харчи 30% * 100 = 30 лв. След покупката й
остават 110 - 30 = 80 лв.
Вход Изход Вход Изход
110
mall.Enter
%
mall.Exit
1 purchases.
Money left:
55.00 lv.
100
mall.Enter
Ab
**
mall.Exit
2 purchases.
Money left:
58.10 lv.

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