Каждый день я решаю несколько задач по программированию и головоломок из рейтингового режима Codr. Цель - достичь звания гения, попутно объясняю, как их решаю. Для начала вам не нужен опыт программирования, и вы узнаете массу нового и интересного по ходу дела.
function RPN(tokens) { const stack = []; for (let index = 0; index < tokens.length; index++) { const token = tokens[index]; if (!Number.isNaN(Number(token))) { stack.push(token); } else { const a = Number(stack.pop()); const b = Number(stack.pop()); if (token === '*') { stack.push(b * a); } else if (token === '/') { stack.push(b / a); } else if (token === '+') { stack.push(b + a); } else if (token === 🍎) { stack.push(b - a); } } } return stack.pop(); } let arr = ['5', '4', '1', '2', '+', '7', '*', '/', '*', '2', '+', '4', '+']; let A = RPN(arr); A = Math.floor(A);
// 🍎 = ? (string) // such that A = 6 (number)
Вот интересная задача, в которой нам нужно исправить только одну ошибку 🍎. Это легкая задача. Чтобы решить эту проблему, мы должны взглянуть на среду, в которой возникла ошибка:
if (token === '*') {
stack.push(b * a);
} else if (token === '/') {
stack.push(b / a);
} else if (token === '+') {
stack.push(b + a);
} else if (token === 🍎) {
stack.push(b - a);
}
Обратите внимание, что токен - это некоторая строка, которая представляет операцию (*, /, + и 🍎), операция push под ней показывает ее фактическую операцию, поэтому 🍎 должно быть -
.
Немного подробнее об этом коде; Функция RPN
означает обратную польскую нотацию, это способ представления серии математических операций, которые необходимо вычислить. Вы можете найти его в Google для получения более подробной информации, так как мы можем столкнуться с ним снова позже, я оставлю это здесь.
Решая эти задачи, вы становитесь лучшим программистом. Вы узнаете новые и лучшие способы анализа, отладки и улучшения кода. В результате вы станете более продуктивным и ценным в бизнесе. Начните работу и станьте сертифицированным Codr сегодня на https://nevolin.be/codr/