Tell us what’s happening:
My code passes / used to pass all the tests, but only when the CID array has the right values. How do I get all of them to pass at the same time.
Your code so far
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<input id="cash" type="number">
<div id="change-due"></div>
<button id="purchase-btn"></button>
<script src="script.js"></script>
</body>
</html>
let price = 19.5;
let cid = [
['PENNY', .01],
['NICKEL', 0],
['DIME', 0],
['QUARTER', 0],
['ONE', 1],
['FIVE', 0],
['TEN', 0],
['TWENTY', 0],
['ONE HUNDRED', 0]
];
const cash = document.getElementById("cash");
const changeDue = document.getElementById("change-due");
const purchaseBtn = document.getElementById("purchase-btn");
let cashInDrawer=0;
for(let i = 0; i<cid.length; i++){
let j = 1;
cashInDrawer+=cid[i][j];
}
const drawerLogic = () => {
if(cash.value<price) {
alert("Customer does not have enough money to purchase the item");
return;
} else if(parseFloat(cash.value)===price) {
changeDue.innerText="No change due - customer paid with exact cash";
return;
} else {
let dollars = Math.floor(cash.value-price);
let cents = cash.value - dollars - price;
let quarters;
let dimes;
let nickles;
let pennies;
let hundreds;
let twentys;
let tens;
let fives;
let ones;
let message = `Status:`;
if(dollars>=100 && cid[8][1]>=100) {
for(let i = 1; cid[8][1]>=100 && dollars>=100; i++) {
hundreds = i;
dollars-=100;
cid[8][1]-=100;
}
} if(dollars>=20 && cid[7][1]>=20) {
for(let i = 1; cid[7][1]>=20 && dollars>=20; i++) {
twentys = i;
dollars-=20;
cid[7][1]-=20;
}
} if(dollars>=10 && cid[6][1]>=10) {
for(let i = 1; cid[6][1]>=10 && dollars>=10; i++) {
tens = i;
dollars-=10;
cid[6][1]-=10;
}
} if(dollars>=5 && cid[5][1]>=5) {
for(let i = 1; cid[5][1]>=5 && dollars>=5; i++) {
fives = i;
dollars-=5;
cid[5][1]-=5;
}
} if(dollars>=1 && cid[4][1]>=1) {
for(let i = 1; cid[4][1]>=1 && dollars>=1; i++) {
ones = i;
dollars-=1;
cid[4][1]-=1;
}
}
if(cents>=.25 && cid[3][1]>=.25) {
for(let i = 1; cid[3][1]>=.25 && cents>=.25; i++) {
quarters = i;
cents-=.25;
cid[3][1]-=.25;
}
} if(cents>=.10 && cid[2][1]>=.10) {
for(let i = 1; cid[2][1]>=.10 && cents>=.1; i++) {
dimes = i;
cents-=.10;
cid[2][1]-=.10;
}
} if(cents>=.05 && cid[1][1]>=.05) {
for(let i = 1; cid[1][1]>=.05 && cents>= .05; i++) {
nickles = i;
cents-=.05;
cid[1][1]-=.05;
}
} if(cid[0][1]>=.01) {
for(let i = 1; cid[0][1]>=0.01 && cents>= 0.01; i++) {
pennies = i;
cents = (cents - .01).toFixed(2);
cid[0][1]= (cid[0][1]-.01).toFixed(2);
//console.log(pennies, i, cents, cid[0][1]>=0.01 && cents>= 0.01, cid[0][1]);
}
}
if(cashInDrawer<parseFloat(cash.value)-price || cents!=0) {
console.log(cents);
message += ` INSUFFICIENT_FUNDS`;
return changeDue.innerText=message;
}
if(cashInDrawer===(parseFloat(cash.value)-price) && price<parseFloat(cash.value)) {
message += ` CLOSED`;
} else if(cashInDrawer>parseFloat(cash.value)-price && price<parseFloat(cash.value)) {
message += ` OPEN`;
}
if(hundreds) {
message+= ` HUNDRED: $${hundreds*100}`;
}
if(twentys) {
message+= ` TWENTY: $${twentys*20}`;
}
if(tens) {
message+= ` TEN: $${tens*10}`;
}
if(fives) {
message+= ` FIVE: $${fives*5}`;
}
if(ones) {
message+= ` ONE: $${ones}`;
}
if(quarters) {
message+= ` QUARTER: $${quarters*.25}`;
}
if(dimes) {
message+= ` DIME: $${dimes*.1}`;
}
if(nickles) {
message+= ` NICKLE: $${nickles*.05}`;
}
if(pennies) {
message+= ` PENNY: $${pennies * .01}`;
}
return changeDue.innerText=message;
}
}
purchaseBtn.addEventListener("click", () => {
drawerLogic();
});
file: styles.css
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Challenge Information:
Build a Cash Register Project - Build a Cash Register
You should not have computations like this out in the global scope.
i can move it, but does this break anything. every test passes but 19, and as far as i can tell the check for STATUS: CLOSED works
Yes, having code floating around in the global scope destroys all the reusability of your functions.
i moved it and now 1-18 always pass, what are your thoughts for 19?
ILM
December 20, 2024, 2:46pm
6
show your updated code please, so we can see
1 Like
let price = 19.5;
let cid = [
['PENNY', 0.5],
['NICKEL', 0],
['DIME', 0],
['QUARTER', 0],
['ONE', 0],
['FIVE', 0],
['TEN', 0],
['TWENTY', 0],
['ONE HUNDRED', 0]
];
const cash = document.getElementById("cash");
const changeDue = document.getElementById("change-due");
const purchaseBtn = document.getElementById("purchase-btn");
const drawerLogic = () => {
let cashInDrawer=0;
for(let i = 0; i<cid.length; i++){
let j = 1;
cashInDrawer+=cid[i][j];
}
if(cash.value<price) {
alert("Customer does not have enough money to purchase the item");
return;
} else if(parseFloat(cash.value)===price) {
changeDue.innerText="No change due - customer paid with exact cash";
return;
} else {
let dollars = Math.floor(cash.value-price);
let cents = cash.value - dollars - price;
let quarters;
let dimes;
let nickles;
let pennies;
let hundreds;
let twentys;
let tens;
let fives;
let ones;
let message = `Status:`;
if(dollars>=100 && cid[8][1]>=100) {
for(let i = 1; cid[8][1]>=100 && dollars>=100; i++) {
hundreds = i;
dollars-=100;
cid[8][1]-=100;
}
} if(dollars>=20 && cid[7][1]>=20) {
for(let i = 1; cid[7][1]>=20 && dollars>=20; i++) {
twentys = i;
dollars-=20;
cid[7][1]-=20;
}
} if(dollars>=10 && cid[6][1]>=10) {
for(let i = 1; cid[6][1]>=10 && dollars>=10; i++) {
tens = i;
dollars-=10;
cid[6][1]-=10;
}
} if(dollars>=5 && cid[5][1]>=5) {
for(let i = 1; cid[5][1]>=5 && dollars>=5; i++) {
fives = i;
dollars-=5;
cid[5][1]-=5;
}
} if(dollars>=1 && cid[4][1]>=1) {
for(let i = 1; cid[4][1]>=1 && dollars>=1; i++) {
ones = i;
dollars-=1;
cid[4][1]-=1;
}
}
if(cents>=.25 && cid[3][1]>=.25) {
for(let i = 1; cid[3][1]>=.25 && cents>=.25; i++) {
quarters = i;
cents-=.25;
cid[3][1]-=.25;
}
} if(cents>=.10 && cid[2][1]>=.10) {
for(let i = 1; cid[2][1]>=.10 && cents>=.1; i++) {
dimes = i;
cents-=.10;
cid[2][1]-=.10;
}
} if(cents>=.05 && cid[1][1]>=.05) {
for(let i = 1; cid[1][1]>=.05 && cents>= .05; i++) {
nickles = i;
cents-=.05;
cid[1][1]-=.05;
}
} if(cid[0][1]>=.01) {
for(let i = 1; cid[0][1]>=0.01 && cents>= 0.01; i++) {
pennies = i;
cents = (cents - .01).toFixed(2);
cid[0][1]= (cid[0][1]-.01).toFixed(2);
//console.log(pennies, i, cents, cid[0][1]>=0.01 && cents>= 0.01, cid[0][1]);
}
}
if(cashInDrawer<parseFloat(cash.value)-price || cents!=0) {
console.log(cents);
message += ` INSUFFICIENT_FUNDS`;
return changeDue.innerText=message;
}
if(cashInDrawer===(parseFloat(cash.value)-price) && price<parseFloat(cash.value)) {
message += ` CLOSED`;
} else if(cashInDrawer>parseFloat(cash.value)-price && price<parseFloat(cash.value)) {
message += ` OPEN`;
}
if(hundreds) {
message+= ` HUNDRED: $${hundreds*100}`;
}
if(twentys) {
message+= ` TWENTY: $${twentys*20}`;
}
if(tens) {
message+= ` TEN: $${tens*10}`;
}
if(fives) {
message+= ` FIVE: $${fives*5}`;
}
if(ones) {
message+= ` ONE: $${ones}`;
}
if(quarters) {
message+= ` QUARTER: $${quarters*.25}`;
}
if(dimes) {
message+= ` DIME: $${dimes*.1}`;
}
if(nickles) {
message+= ` NICKLE: $${nickles*.05}`;
}
if(pennies) {
message+= ` PENNY: $${pennies * .01}`;
}
return changeDue.innerText=message;
}
}
purchaseBtn.addEventListener("click", () => {
drawerLogic();
});
this code as is passes 1-18 on my end
edit: i lied 13 also doesnt pass
ILM
December 20, 2024, 2:49pm
8
I’ve edited your code for readability. When you enter a code block into a forum post, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make it easier to read.
You can also use the “preformatted text” tool in the editor (</>
) to add backticks around text.
See this post to find the backtick on your keyboard.
Note: Backticks (`) are not single quotes (').
ILM
December 20, 2024, 3:03pm
9
you have some issues, 13 also fails sometimes
13 and 19 have different values each time they run, but I am having difficulties in getting some values your code fail for, as your function changes cid
while executing, which is a bad idea
how would you recommend i record the decreasing cash amount in the drawer without changing cid? maybe creating a shallow array based off of it?
ILM
December 20, 2024, 3:05pm
11
you can try, there are different possible ways
what would you do? or are you not allowed to tell me that
ILM
December 20, 2024, 3:07pm
13
I could tell you, but this is your exam, I would not feel I respect the Academic Honesty Policy if I told you how to implement your function
i see. would using a .map on the cid array be a possible solution or is that the wrong direction.
What would you use the map for?
ILM
December 20, 2024, 3:10pm
16
I don’t know, I have no idea what you want to do with it. Try it out, and find out
to avoid altering the original cid array and the problems that causes
How though? How does map
do that for you?
im not sure maybe map isnt the correct choice but i want to use an array method to populate a new array with the value of the denominations from cid
let price = 19.5;
let cid = [
['PENNY', 0.5],
['NICKEL', 0],
['DIME', 0],
['QUARTER', 0],
['ONE', 0],
['FIVE', 0],
['TEN', 0],
['TWENTY', 0],
['ONE HUNDRED', 0]
];
const cash = document.getElementById("cash");
const changeDue = document.getElementById("change-due");
const purchaseBtn = document.getElementById("purchase-btn");
const drawerLogic = () => {
let cashArr=[];
for(let i = 0; i<cid.length; i++){
let j = 1;
cashArr[i]=parseFloat(cid[i][j]);
}
let cashInDrawer = 0;
for(let i = 0; i<cashArr.length; i++) {
cashInDrawer+=cashArr[i];
}
if(cash.value<price) {
alert("Customer does not have enough money to purchase the item");
return;
} else if(parseFloat(cash.value)===price) {
changeDue.innerText="No change due - customer paid with exact cash";
return;
} else {
let dollars = Math.floor(cash.value-price);
let cents = cash.value - dollars - price;
let quarters;
let dimes;
let nickles;
let pennies;
let hundreds;
let twentys;
let tens;
let fives;
let ones;
let message = `Status:`;
if(dollars>=100 && cashArr[8]>=100) {
for(let i = 1; cashArr[8]>=100 && dollars>=100; i++) {
hundreds = i;
dollars-=100;
cashArr[8]-=100;
}
} if(dollars>=20 && cashArr[7]>=20) {
for(let i = 1; cashArr[7]>=20 && dollars>=20; i++) {
twentys = i;
dollars-=20;
cashArr[7]-=20;
}
} if(dollars>=10 && cashArr[6]>=10) {
for(let i = 1; cashArr[6]>=10 && dollars>=10; i++) {
tens = i;
dollars-=10;
cashArr[6]-=10;
}
} if(dollars>=5 && cashArr[5]>=5) {
for(let i = 1; cashArr[5]>=5 && dollars>=5; i++) {
fives = i;
dollars-=5;
cashArr[5]-=5;
}
} if(dollars>=1 && cashArr[4]>=1) {
for(let i = 1; cashArr[4]>=1 && dollars>=1; i++) {
ones = i;
dollars-=1;
cashArr[4]-=1;
}
}
if(cents>=.25 && cashArr[3]>=.25) {
for(let i = 1; cashArr[3]>=.25 && cents>=.25; i++) {
quarters = i;
cents-=.25;
cashArr[3]-=.25;
}
} if(cents>=.10 && cashArr[2]>=.10) {
for(let i = 1; cashArr[2]>=.10 && cents>=.1; i++) {
dimes = i;
cents-=.10;
cashArr[2]-=.10;
}
} if(cents>=.05 && cashArr[1]>=.05) {
for(let i = 1; cashArr[1]>=.05 && cents>= .05; i++) {
nickles = i;
cents-=.05;
cashArr[1]-=.05;
}
} if(cashArr[0]>=.01) {
for(let i = 1; cashArr[0]>=0.01 && cents>= 0.01; i++) {
pennies = i;
cents = (cents - .01).toFixed(2);
cashArr[0]= (cashArr[0]-.01).toFixed(2);
}
}
if(cashInDrawer<parseFloat(cash.value)-price || cents!=0) {
console.log(cents);
message += ` INSUFFICIENT_FUNDS`;
return changeDue.innerText=message;
}
if(cashInDrawer===(parseFloat(cash.value)-price) && price<parseFloat(cash.value)) {
message += ` CLOSED`;
} else if(cashInDrawer>parseFloat(cash.value)-price && price<parseFloat(cash.value)) {
message += ` OPEN`;
}
if(hundreds) {
message+= ` HUNDRED: $${hundreds*100}`;
}
if(twentys) {
message+= ` TWENTY: $${twentys*20}`;
}
if(tens) {
message+= ` TEN: $${tens*10}`;
}
if(fives) {
message+= ` FIVE: $${fives*5}`;
}
if(ones) {
message+= ` ONE: $${ones}`;
}
if(quarters) {
message+= ` QUARTER: $${quarters*.25}`;
}
if(dimes) {
message+= ` DIME: $${dimes*.1}`;
}
if(nickles) {
message+= ` NICKLE: $${nickles*.05}`;
}
if(pennies) {
message+= ` PENNY: $${pennies * .01}`;
}
return changeDue.innerText=message;
}
}
purchaseBtn.addEventListener("click", () => {
drawerLogic();
});
new code replaces all references to cid in the function drawerLogic with references to array cashArr. 13 and 19 still failing?