банкомат js. Помогите найти ошибку, ломается на 150 и 50

// Нужно написать функцию банкомат // * первым аргументом ты передаешь ей сколько ты хочешь снять // * вторым массив доступным банкнот в баномате // Функция должна вернуть массив из банкнот сумма которых ровна первому аргументу // При передаче банкнот, мы даем их кол-во, которое надо учитывать при выдачи суммы atm(304, {100:2, 50:10, 2:1, 1:5}) // => [100,100,50,50,2,1,1]

function atm(banknote, banknotesInStock) {
  let cashArr = [];
  let cashTotal = null;
  let valueBank = banknote;
  let result = [];

  Object.keys(banknotesInStock).forEach((item) => {
    let cashItem = [];
    cashItem.push(item, banknotesInStock[item]);
    cashArr.push(cashItem);
  });
  cashArr.reverse();

  cashTotal = cashArr.map((item) => {
    return item[0] * item[1];
  }).reduce((sum, cur) => {
    return sum + cur;
  });
  if (banknote > cashTotal) {
    console.log('Нет столько бабла, сорри');
  } else {
    cashArr.forEach((item) => {
      if (valueBank / item[0] >= item[1]) {
        valueBank = valueBank - (+item[0] * item[1]);
        let i = 0;
        while (i < item[1]) {
          result.push(item[0]);
          i++;
        }
      } else {
        let c = Math.round(valueBank / +item[0]);
        console.log(`c = ${c}`);
        let y = 0;
        valueBank = valueBank - (c * +item[0]);
        while (y < c) {
          result.push(item[0]);
          y++;
        }
      }
    });
    let check = result.map(Number).reduce((sum, cur) => {
      return sum + cur;
    }, 0);
    if (check !== banknote) {
      console.log(`Я не могу дать эту сумму ${check}`);
    } else {
      console.log(result);
    }
    //console.log(result);
  }
}

atm(50, {
  100: 2,
  50: 10,
  2: 1,
  1: 5
}) // => [100,100,50,50,2,1,1]

https://codepen.io/sophie-lamperg/pen/WNGEXpP

Ответы (0 шт):