Задача 3. Алуминиева дограма
Задача 3. Алуминиева дограма - защо дава 54/100 в Judge?
Изпит по "Основи на програмирането"
Задача 3. Алуминиева дограма
Фирма-производител на алуминиева дограма приема поръчки за изработката и монтаж със следния ценоразпис за един брой. Фирмата приема само поръчки на едро (над 10 бр.). В зависимост от поръчания брой дограми, фирмата прави различна отстъпка на своите клиенти.
Фирмата предлага също и доставка на поръчките си срещу 60 лв.
Размер |
Единична цена |
Отстъпка от цената |
90X130 |
110 лв. |
Над 30 броя – 5% |
100X150 |
140 лв. |
Над 40 броя – 6% Над 80 броя – 10% |
130X180 |
190 лв. |
Над 20 броя – 7% |
200X300 |
250 лв. |
Над 25 броя – 9% Над 50 броя – 14% |
Ако поръчката надвишава 99 броя – върху крайната цена се начисляват допълнителни 4% отстъпка (след като се начисли цената за доставка, ако има такава).
При поръчка под 10 бр. на конзолата да бъде изписано
Вход:
Потребителят въвежда 3 реда:
- Брой дограми – цяло число в интервала [0..1000];
- Вид на дограмите – текст "90X130" или "100X150" или "130X180" или "200X300";
- Начин на получаване – текст
- С доставка - "With delivery"
- Без доставка - "Without delivery"
Изход:
Извежда се едно число – стойността на поръчката, в следния формат:
- "{Обща стойност на поръчката} BGN"
Резултатът да се форматира до втори знак след десетичната запетая.
Примерен вход и изход:
Вход |
Изход |
Обяснения |
40 90X130 Without delivery |
4180.00 BGN
|
Цената е: 40 бр. * 110 лв. = 4400.00 BGN Without delivery -> не се начислява нищо допълнително. |
105 100X150 With delivery |
12758.40 BGN |
Цената е: 105 бр. * 140 лв. = 14700.00 BGN With delivery - 13230.00 + 60.00 = 13290.00 BGN
|
2 130X180 With delivery |
Invalid order |
Поръчката е под 10 броя.
|
JavaScript - Примерен вход и изход:
Вход |
Изход |
Обяснения |
(["40", "90X130", "Without delivery"]) |
4180.00 BGN
|
Цената е: 40 бр. * 110 лв. = 4400.00 BGN Without delivery -> не се начислява нищо допълнително. |
(["105", "100X150", "With delivery"]) |
12758.40 BGN |
Цената е: 105 бр. * 140 лв. = 14700.00 BGN With delivery - 13230.00 + 60.00 = 13290.00 BGN
|
(["2", "130X180", "With delivery"]) |
Invalid order |
Поръчката е под 10 броя.
|
Ето и моето решение:
function aluminumJoinery(input) {
let joineryCount = Number(input[0]);
let joineryType = input[1];
let delivery = input[2];
let joineryPrice = 0;
let totalPrice = 0;
let priceAfterDiscount = 0;
if (joineryCount <= 10) {
console.log("Invalid order");
} else if (joineryCount > 10) {
switch (joineryType) {
case "90X130":
joineryPrice = 110;
totalPrice = joineryCount * joineryPrice;
if (joineryCount > 30) {
priceAfterDiscount = totalPrice * 0.95;
} else if (joineryCount > 60) {
priceAfterDiscount = totalPrice * 0.92;
} else {
priceAfterDiscount = totalPrice;
}
break;
case "100X150":
joineryPrice = 140;
totalPrice = joineryCount * joineryPrice;
if (joineryCount > 40) {
priceAfterDiscount = totalPrice * 0.94;
} else if (joineryCount > 80) {
priceAfterDiscount = totalPrice * 0.90;
} else {
priceAfterDiscount = totalPrice;
}
break;
case "130X180":
joineryPrice = 190;
totalPrice = joineryCount * joineryPrice;
if (joineryCount > 20) {
priceAfterDiscount = totalPrice * 0.93;
} else if (joineryCount > 50) {
priceAfterDiscount = totalPrice * 0.88;
} else {
priceAfterDiscount = totalPrice;
}
break;
case "200X300":
joineryPrice = 250;
totalPrice = joineryCount * joineryPrice;
if (joineryCount > 25) {
priceAfterDiscount = totalPrice * 0.91;
} else if (joineryCount > 50) {
priceAfterDiscount = totalPrice * 0.86;
} else {
priceAfterDiscount = totalPrice;
}
break;
}
if (delivery === "With delivery") {
priceAfterDiscount += 60;
}
if (joineryCount > 99) {
priceAfterDiscount *= 0.96;
}
console.log(`${priceAfterDiscount.toFixed(2)} BGN`);
}
}
aluminumJoinery(["40", "90X130", "Without delivery"])
Много благодаря :)