Skip to content

Instantly share code, notes, and snippets.

@PetukhovArt
Created January 2, 2025 17:09
Show Gist options
  • Save PetukhovArt/0d9990b054da080704da2574dea63339 to your computer and use it in GitHub Desktop.
Save PetukhovArt/0d9990b054da080704da2574dea63339 to your computer and use it in GitHub Desktop.
// написать функцию банкомат, которая принимает на вход кол-во денег для возврата и лимиты купюр в банкомате
// должна вернуть объект с минимальным кол-вом купюр, чтобы разменять данный total
// перед возвратом значения, мы должны смутировать limits
// чтобы при последующем вызове функции atm, кол-во оставшихся купюр в банкомате изменилось
// если банкомат не может выдать сумму, то мутацию limits не делаем и возвращаем строку "cant change"
function atm(total, limits) {
const bills = Object.keys(limits)
.map(Number)
.sort((a, b) => b - a);
const result = {};
bills.forEach((bill, idx) => {
// тут основное это данный Math.min , который позволяет не перевалить за кол-во доступных банкнот
const billCount = Math.min(Math.floor(total / bill), limits[bill]);
if (billCount > 0) {
result[bill] = billCount;
}
total -= billCount * bill;
});
if (total > 0) {
return "cant change";
}
Object.keys(result).forEach((key) => {
limits[key] -= result[key];
});
return result;
}
const limits = {
5000: 5,
1000: 5,
500: 5,
100: 5,
23: 13,
3: 5,
};
console.log(atm(15600, limits));
// return {5000:3,500:1,100:1}
// limits = {
// 5000: 2,
// 1000: 5,
// 500: 4,
// 100: 4,
// 23: 13,
// 3: 5,
// };
console.log(atm(15600, limits));
// return {5000:2, 1000: 5, 500: 1, 100: 1}
// limits = {
// 5000: 0,
// 1000: 0,
// 500: 3,
// 100: 3,
// 23: 13,
// 3: 5,
// };
console.log(atm(222222, limits));
//"cant change"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment