Квас
Ответ:
const checkKvasChange = (bills) => {
let [five, ten] = [0, 0];
let isValid = true;
bills.forEach((b) => {
switch (b) {
case 5:
five += 1;
break;
case 10:
five -= 1;
ten += 1;
break;
default:
if (ten > 0) {
ten -= 1;
five -= 1;
} else {
five -= 3;
}
break;
}
if (Math.min(five, ten) < 0) {
isValid = false;
}
});
return isValid;
};
Объяснение:
Давайте просто смоделируем процесс выдачи сдачи:
- Сначала у нас нет ни одной купюры.
- Если клиент дает купюру в 5 рублей, берем ее и увеличиваем счетчик таких купюр.
- Если клиент дает купюру в 10 рублей, уменьшаем счётчик 5 рублевых купюр, увеличиваем счетчик 10 рублевых.
- Если клиент дает купюру в 20 рублей, то мы должны отдать 15 рублей сдачи:
- Всегда проверяем комбинацию в 10 и 5 рублей, если они у нас есть, то уменьшаем счетчики этих купюр на единицу.
- Если такой комбинации нет, то уменьшаем счетчик 5 рублевых купюр на 3.
После каждой итерации проверяем счётчики купюр - если какой-то счётчик опустился
ниже нуля, возвращаем false.
Код для проверки:
const checkKvasChange = (bills) => {
let [five, ten] = [0, 0];
let isValid = true;
bills.forEach((b) => {
switch (b) {
case 5:
five += 1;
break;
case 10:
five -= 1;
ten += 1;
break;
default:
if (ten > 0) {
ten -= 1;
five -= 1;
} else {
five -= 3;
}
break;
}
if (Math.min(five, ten) < 0) {
isValid = false;
}
});
return isValid;
};
console.log(checkKvasChange([5, 5, 5, 10, 20])); // true
console.log(checkKvasChange([5, 5, 10, 10, 20])); // false