[*] Когда цена составляет 19,5, значение в элементе #Cash - 20, CID - [["Пенни", 0,5], ["Никель", 0 ], ["DIME", 0], ["Quarter", 0], ["One", 0], ["Five", 0], ["Ten", 0], ["TWENTY", 0], ["Сто", 0]], и элемент #покупки BTN нажимается, значение в элементе #изменение-DUE должно быть "Статус: закрыто Пенни: $ 0,5".
Для теста 18 я получаю правильный вывод, кроме моего кода, говорит "Статус: закрытая пенни: 0,50 долл. США". Я не могу понять, как исправить его в одно десятичное место, не испортив другие тесты, в которых, по -видимому, нужно два десятичных значения. < /P>
< li> Когда цена меньше, чем стоимость в элементе #CASH, общая сумма денежных средств в ящике CID равна изменению, а элемент #BUCK-BTN нажимается, значение в элементе #изменение-DUE должно быть "Статус: Закрыт «с изменением, причитающимися в монетах и счетах, отсортированных в самом высоком до самого низкого порядка. < /Li>
< /ol>
для теста 19, насколько я вижу , поэтому я понятия не имею, почему я не прохожу тест. Например. Когда общая сумма денег составляет 0,5 в копейках, а 20 в двадцатые годы я получаю результат "Статус: закрыто десять: $ 20,00 Пенни: $ 0,50", что выглядит правильно. > // Variables
let price = 19.5;
let cid = [
["PENNY", .5],
["NICKEL", 0],
["DIME", 0],
["QUARTER", 0],
["ONE", 0],
["FIVE", 0],
["TEN", 0],
["TWENTY", 20],
["ONE HUNDRED", 0],
];
// Denomination values
const denomValues = {
PENNY: 0.01,
NICKEL: 0.05,
DIME: 0.1,
QUARTER: 0.25,
ONE: 1,
FIVE: 5,
TEN: 10,
TWENTY: 20,
"ONE HUNDRED": 100,
};
// Helper to handle floating-point precision
function precise(num) {
return parseFloat(num.toFixed(2));
}
// Calculate total cash in the drawer
function sum(arr) {
return arr.reduce((acc, curr) => acc + curr[1], 0);
}
let totalCashInDrawer = sum(cid);
// DOM elements
let changeOwed = document.getElementById("change-due");
let moneyAmount = document.getElementById("cash");
let buyObjects = document.getElementById("purchase-btn");
// Purchase function
function purchaseItem() {
let moneyNumber = parseFloat(moneyAmount.value);
if (isNaN(moneyNumber)) {
alert("Invalid input! Please enter a valid amount.");
changeOwed.innerText = "";
moneyAmount.value = "";
return;
}
let moneyOwedToCustomer = precise(moneyNumber - price);
if (moneyNumber < price) {
changeOwed.innerText = "Status: INSUFFICIENT_FUNDS";
alert("Customer does not have enough money to purchase the item.");
moneyAmount.value = "";
} else if (moneyOwedToCustomer > 0 && totalCashInDrawer < moneyOwedToCustomer) {
changeOwed.innerText = "Status: INSUFFICIENT_FUNDS";
} else if (moneyOwedToCustomer === totalCashInDrawer) {
returnChange(moneyOwedToCustomer);
moneyAmount.value = "";
} else if (moneyOwedToCustomer > 0) {
returnChange(moneyOwedToCustomer);
} else if (moneyNumber === price) {
changeOwed.innerHTML = "No change due - customer paid with exact cash";
moneyAmount.value = "";
}
}
**function returnChange(moneyOwedToCustomer) {**
let originalCID = JSON.parse(JSON.stringify(cid)); // Deep copy of original CID
let reversedCID = [...cid].reverse();
let finalAmount = { status: "OPEN", change: [] };
reversedCID.forEach(function (arr) {
let denomination = arr[0];
let totalAvailableInDenomination = arr[1];
let denominationValue = denomValues[denomination];
let amountToReturn = 0;
while (moneyOwedToCustomer >= denominationValue && totalAvailableInDenomination > 0) {
moneyOwedToCustomer = precise(moneyOwedToCustomer - denominationValue);
totalAvailableInDenomination = precise(totalAvailableInDenomination - denominationValue);
amountToReturn = precise(amountToReturn + denominationValue);
}
if (amountToReturn > 0) {
finalAmount.change.push([denomination, precise(amountToReturn)]);
}
});
**//
cid = cid.map(([denomination, total]) => {
let returnedAmount = finalAmount.change.find(([d]) => d === denomination)?.[1] || 0;
return [denomination, precise(total - returnedAmount)];
});
//
totalCashInDrawer = sum(cid);
//
if (totalCashInDrawer === 0) {
finalAmount.status = "CLOSED";
finalAmount.change = reversedCID.filter(([_, amount]) => amount > 0); // Only keep denominations with cash
}
if (moneyOwedToCustomer > 0) {
changeOwed.innerText = "Status: INSUFFICIENT_FUNDS";
} else {
changeOwed.innerText = `Status: ${finalAmount.status} ${finalAmount.change
.map(([denomination, amount]) => `${denomination}: $${amount.toFixed(2)}`)
.join(", ")}`;
}
}**
// Event listener
buyObjects.addEventListener("click", purchaseItem);``
< /code>
Я пробовал переписать закрытый код состояния несколько раз, включая использование и удаление фильтров, пробуя как реверсидные, так и оригинал, использование переменных, блоки перемещения кодов и т. Д. проблема. Код для теста 18 кажется почти там.**function returnChange(moneyOwedToCustomer) {**
let originalCID = JSON.parse(JSON.stringify(cid)); // Deep copy of original CID
let reversedCID = [...cid].reverse();
let finalAmount = { status: "OPEN", change: [] };
reversedCID.forEach(function (arr) {
let denomination = arr[0];
let totalAvailableInDenomination = arr[1];
let denominationValue = denomValues[denomination];
let amountToReturn = 0;
while (moneyOwedToCustomer >= denominationValue && totalAvailableInDenomination > 0) {
moneyOwedToCustomer = precise(moneyOwedToCustomer - denominationValue);
totalAvailableInDenomination = precise(totalAvailableInDenomination - denominationValue);
amountToReturn = precise(amountToReturn + denominationValue);
}
if (amountToReturn > 0) {
finalAmount.change.push([denomination, precise(amountToReturn)]);
}
});
**//
cid = cid.map(([denomination, total]) => {
let returnedAmount = finalAmount.change.find(([d]) => d === denomination)?.[1] || 0;
return [denomination, precise(total - returnedAmount)];
});
//
totalCashInDrawer = sum(cid);
//
if (totalCashInDrawer === 0) {
finalAmount.status = "CLOSED";
finalAmount.change = reversedCID.filter(([_, amount]) => amount > 0); // Only keep denominations with cash
}
if (moneyOwedToCustomer > 0) {
changeOwed.innerText = "Status: INSUFFICIENT_FUNDS";
} else {
changeOwed.innerText = `Status: ${finalAmount.status} ${finalAmount.change
.map(([denomination, amount]) => `${denomination}: $${amount.toFixed(2)}`)
.join(", ")}`;
}
}**
Подробнее здесь: https://stackoverflow.com/questions/794 ... -18-and-19
Мобильная версия