Кассовый реестр Freecodecamp Project - провальные тесты 18 и 19 [закрыто]CSS

Разбираемся в CSS
Ответить
Anonymous
 Кассовый реестр Freecodecamp Project - провальные тесты 18 и 19 [закрыто]

Сообщение Anonymous »

Я пытаюсь решить проблему фрикодекампа «Кассовый регистр» и прохожу все тесты, кроме испытаний 18 и 19. Я запутался в том, почему мой код не выполняет эти тесты, и я бы признателен за советом.
[*] Когда цена составляет 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)]);
}
});

**// ✅ Update `cid` before checking "CLOSED"
cid = cid.map(([denomination, total]) => {
let returnedAmount = finalAmount.change.find(([d]) => d === denomination)?.[1] || 0;
return [denomination, precise(total - returnedAmount)];
});

// ✅ Update total cash in drawer
totalCashInDrawer = sum(cid);

// ✅ Correct check for "CLOSED" status

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

**// ✅ Update `cid` before checking "CLOSED"
cid = cid.map(([denomination, total]) => {
let returnedAmount = finalAmount.change.find(([d]) => d === denomination)?.[1] || 0;
return [denomination, precise(total - returnedAmount)];
});

// ✅ Update total cash in drawer
totalCashInDrawer = sum(cid);

// ✅ Correct check for "CLOSED" status

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»