Skip to content

Instantly share code, notes, and snippets.

@SoftwareDevPro
Created May 24, 2019 00:32
Show Gist options
  • Save SoftwareDevPro/77021381425e9e58be9b711993673705 to your computer and use it in GitHub Desktop.
Save SoftwareDevPro/77021381425e9e58be9b711993673705 to your computer and use it in GitHub Desktop.
Implementation of Cash Register for Free Code Camp
{"index.js":"\nvar denominations = [\n { name: 'ONE HUNDRED', val: 100.00},\n { name: 'TWENTY', val: 20.00},\n { name: 'TEN', val: 10.00},\n { name: 'FIVE', val: 5.00},\n { name: 'ONE', val: 1.00},\n { name: 'QUARTER', val: 0.25},\n { name: 'DIME', val: 0.10},\n { name: 'NICKEL', val: 0.05},\n { name: 'PENNY', val: 0.01}\n];\n\nfunction checkCashRegister(price, cash, cid) {\n var result = { status: null, change: [] };\n var change = cash - price;\n\n var register = cid.reduce(function(acc, curr) {\n acc.total += curr[1];\n acc[curr[0]] = curr[1];\n return acc;\n }, { total: 0 });\n\n if (register.total === change) {\n result.status = 'CLOSED';\n result.change = cid;\n return result;\n }\n\n // Handle obvious insufficient funds\n if (register.total < change) {\n result.status = 'INSUFFICIENT_FUNDS';\n return result;\n }\n\n var change_arr = denominations.reduce(function(acc, curr) {\n var value = 0;\n \n while (register[curr.name] > 0 && change >= curr.val) {\n change -= curr.val;\n register[curr.name] -= curr.val;\n value += curr.val;\n\n change = Math.round(change * 100) / 100;\n }\n \n if (value > 0) {\n acc.push([ curr.name, value ]);\n }\n return acc; \n }, []);\n\n if (change_arr.length < 1 || change > 0) {\n result.status = 'INSUFFICIENT_FUNDS';\n return result;\n }\n\n result.status = 'OPEN';\n result.change = change_arr;\n return result;\n}\n\n// Example cash-in-drawer array:\n// [[\"PENNY\", 1.01],\n// [\"NICKEL\", 2.05],\n// [\"DIME\", 3.1],\n// [\"QUARTER\", 4.25],\n// [\"ONE\", 90],\n// [\"FIVE\", 55],\n// [\"TEN\", 20],\n// [\"TWENTY\", 60],\n// [\"ONE HUNDRED\", 100]]\n\ncheckCashRegister(19.5, 20, [[\"PENNY\", 1.01], [\"NICKEL\", 2.05], [\"DIME\", 3.1], [\"QUARTER\", 4.25], [\"ONE\", 90], [\"FIVE\", 55], [\"TEN\", 20], [\"TWENTY\", 60], [\"ONE HUNDRED\", 100]]);"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment