Answer
t.me/js_testОтвет:
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