Answer

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;
};

Обьяснение:

Давайте просто смоделируем процесс выдачи сдачи:

  1. Сначала у нас нет ни одной купюры.
  2. Если клиент дает купюру в 5 рублей, берем ее и увеличиваем счетчик таких купюр.
  3. Если клиент дает купюру в 10 рублей, уменьшаем счётчик 5 рублевых купюр, увеличиваем счетчик 10 рублевых.
  4. Если клиент дает купюру в 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

Report Page