@Quintis

Как сделать функцию для выдачи сдачи?

Доброго времени суток. Написал функцию для выполнения задания. Но функция не проходит все тесты. Не могу додуматься как сделать так чтоб функция проходила все тесты. Кто может объяснить что нужно доделать или как сделать новую функцию для выполнения задания
function checkCashRegister(price, cash, cid) {
let buying = cash - price;
let start=0
let acum = cid.map(el=>{
  start = start+el[1]
})

console.log(buying,start)


let resultArr=[];
cid= cid.reverse();
// Example cash-in-drawer array:
let cashArr =[["PENNY", 0.01],
["NICKEL", 0.05],
["DIME", 0.1],
["QUARTER", 0.25],
["Dollar", 1],
["Five Dollars", 5],
["TEN", 10],
["TWENTY", 20],
["ONE HUNDRED", 100]]

  cashArr=cashArr.reverse()


  if (buying>start ) {
  return {status: "INSUFFICIENT_FUNDS", change: []}
} else if (buying==start) {
   return {status: "CLOSED", change: cid.reverse()}
}
    function makeArr(arr, buying) {
      arr.map((el,i) => {
       
        if(cashArr[i][1]<=buying && arr[i][1]!==0){
          
          resultArr.push([el[0],buying>el[1]? el[1]: Math.abs(((el[1]-buying)-el[1]))])
          return makeArr(arr.splice(i), buying)
        } else  {
          return {status: "INSUFFICIENT_FUNDS", change: []}
        }
        

      });
    }
  
    makeArr(cid, buying);
    console.log(resultArr);
  
return {status: "OPEN", change: resultArr}
}
  • Вопрос задан
  • 281 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
var cashes = [
  ['PENNY', 1],
  ['NICKEL', 5],
  ['DIME', 10],
  ['QUARTER', 25],
  ['ONE', 100],
  ['FIVE', 500],
  ['TEN', 1000],
  ['TWENTY', 2000],
  ['ONE HUNDRED', 10000]
];

function checkCashRegister(price, cash, cid) {
  var change = [];
  var changeAmount = Math.round(cash * 100) - Math.round(price * 100);
  var closed = true;
  for (var position = cid.length - 1; position >= 0; position--) {
    var changePosition = Math.floor(changeAmount / cashes[position][1]) * cashes[position][1];
    var cidPosition = Math.round(cid[position][1] * 100);
    if (changePosition > cidPosition) {
      changePosition = cidPosition;
    }
    if (changePosition > 0) {
      change.push([cid[position][0], changePosition / 100]);
    }
    changeAmount -= changePosition;
    closed &= (changePosition == cidPosition);
  }
  if (changeAmount > 0) {
    return {status: 'INSUFFICIENT_FUNDS', change: []};
  }
  if (closed) {
    return {status: 'CLOSED', change: cid};
  }
  return {status: 'OPEN', change: change};
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект