Пятница — время дурных математических задач.
Один вебмастер сделал сайт для зарубежной компании и получил гонорар в долларах. Но когда сумма поступила, в банковском отчёте он увидел такую же сумму, но в рублях. Когда он обратился в банк с вопросом, почему так, ему объяснили:
«Банк конвертирует доллары в рубли по текущему курсу банка — 48,5 рубля за доллар. После этого берёт комиссию за перевод — 3% от суммы, но не менее 15 000 рублей. Так как перевод был хоть и в долларах, но на рублёвую карточку, банк взял минимальную рублёвую комиссию. А ещё банк не может взять комиссию больше, чем сам перевод».
Вопрос: сколько заплатила зарубежная компания вебмастеру в долларах, если он получил столько же, но рублей (например, если сайт стоил 200 долларов, то вебмастер получил на счёт 200 рублей)? Чтобы было проще, можно пренебречь копейками и центами.
Чтобы не усложнять решение и не строить сложные формулы и уравнения, используем силу машин: напишем код, который сам проверит все условия и подберёт подходящий ответ.
Сначала опишем все переменные, которые нам понадобятся для решения:
// размер перевода в долларах и результат в рублях
// для простоты допустим, что минимальный перевод — 1 доллар
var income = 1;
var roubles;
// размер обычной и минимальной комиссии
const fee = 0.03;
const fee_min = 15000;
// курс доллара
const usd = 48.5;
Теперь сделаем функцию, которая имитирует перевод из-за рубежа: она пересчитывает всё в рубли, считает комиссию и возвращает сумму в рублях, которая останется после перевода:
// обрататываем перевод
function swift(income) {
// переменная для расчёта комиссии
var tax;
// сумма в рублях
var income_roubles;
// переводим в рубли
income_roubles = income * usd;
// считаем комиссию в процентах
tax = income_roubles * fee;
// если она меньше минимальной
if (tax < fee_min) {
// то берём минимальную комиссию
tax = fee_min;
}
// если комиссия больше поступившей суммы
if (tax > income_roubles) {
// то берём саму сумму
tax = income_roubles;
}
// результат функции — остаток в рублях
return(income_roubles - tax);
}
Последнее, что осталось сделать, — проверить, равны ли числа в рублях и долларах. По условию мы можем отбросить копейки и центы — используем для этого функцию toFixed(0)
. Она откинет всё, что после точки, а результат вернёт в виде строки.
// пока сумма в долларах не сравняется с рублёвым остатком
while (income.toFixed(0) != roubles.toFixed(0)) {
// увеличиваем размер перевода на один доллар
income += 0.1;
// и получаем рублёвый остаток на счету
roubles = swift(income);
// если сайт стоит больше миллиона долларов — отказываемся от разработки
if (income > 1000000) {break;}
}
Чтобы увидеть результат, используем команду console.log(income.toFixed(1)); — она выведет сумму в долларах с точностью до одного знака после запятой. Если эту сумму отправить переводом, то по условиям банка на счету мы получим ту же самую сумму в рублях (без учёта копеек и центов, конечно).
if (income < 1000000) {
console.log(income.toFixed(1));
} else {
console.log('Сумма превысила доступный бюджет');
}
Теперь соберём код в одно целое и запустим в консоли:
// размер перевода в долларах и результат в рублях
// для простоты допустим, что минимальный перевод — 1 доллар
var income = 1;
var roubles = 0;
// размер обычной и минимальной комиссии
const fee = 0.03;
const fee_min = 15000;
// курс доллара
const usd = 48.5;
// обрататываем перевод
function swift(income) {
// переменная для расчёта комиссии
var tax;
// сумма в рублях
var income_roubles;
// переводим в рубли
income_roubles = income * usd;
// считаем комиссию в процентах
tax = income_roubles * fee;
// если она меньше минимальной
if (tax < fee_min) {
// то берём минимальную комиссию
tax = fee_min;
}
// если комиссия больше поступившей суммы
if (tax > income_roubles) {
// то берём саму сумму
tax = income_roubles;
}
// результат функции — остаток в рублях
return(income_roubles - tax);
}
// пока сумма в долларах не сравняется с рублёвым остатком
while (income.toFixed(0) != roubles.toFixed(0)) {
// увеличиваем размер перевода на один доллар
income += 0.1;
// и получаем рублёвый остаток на счету
roubles = swift(income);
// если сайт стоит больше миллиона долларов — отказываемся от разработки
if (income > 1000000) {break;}
}
if (income < 1000000) {
console.log(income.toFixed(1));
} else {
console.log('Сумма превысила доступный бюджет');
}
Получается, что разработка сайта стоила 315,8 доллара. Иногда проще написать код, чем поразмышлять логически.
Всё, идите уже на выходные, хватит. Давайте. До встречи в понедельник!