Evaluate Reverse Polish Notation @ Алгосики для самых маленьких, s1e4 / Стеки

preview_player
Показать описание
💻 Алгоритмы для «тех кто входит в IT» — никаких предварительных знаний не требуется. Разбираемся с нуля.

#Stack #Алгоритмы #JavaScript

«Алгосики для самых маленьких» полезны если вы обучаетесь фронтенд-разработке без бекграунда в программировании, уроки помогут развить алгоритмическое мышление и научиться в «нативный джаваскрипт».

---

0:00 Начало
0:17 Постановка задачи
6:00 Проектируем алгоритм
13:10 Пишем код
21:24 Что такое исключение?
24:44 Как работает сложение строк?
28:05 Где такое может использоваться?

---

Рекомендации по теме
Комментарии
Автор

Эх помню как когда был нубом, делал свой калькулятор с помощью стека, с валидацией скобок и преобразованием из инфиксной формы в постфиксную и так считал, самое неприятное это унарные минусы 😂

lord
Автор

сначала решаю на го, потом смотрю выпуск

stnsa
Автор

Несколько раз переписывал решение, чтобы ускорить работу кода. В итоге Runtime: 84 ms, faster than 68.86%, Memory Usage: 41.7 MB, less than 49.34%. Первое решение совсем плоховато было в этом плане. Около 10% в каждом параметре. Знать бы, как ещё ускориться))
К слову, switch даёт хороший буст, как else if'ы заменил, скорость заметно выросла.
Если кто подскажет, как улучшить код, буду признателен.

var evalRPN = function(tokens) {
let numStack = [];

for (let i = 0; i < tokens.length; i++) {
let sum, lastArgument, firstArgument

switch(tokens[i]){
case "+":
lastArgument = numStack.pop();
firstArgument = numStack.pop();
sum = +firstArgument + +lastArgument;
numStack.push(sum)
break;
case "-":
lastArgument = numStack.pop();
firstArgument = numStack.pop();
sum = +firstArgument - +lastArgument;
numStack.push(sum)
break;
case "*":
lastArgument = numStack.pop();
firstArgument = numStack.pop();
sum = +firstArgument * +lastArgument;
numStack.push(sum)
break;
case "/":
lastArgument = numStack.pop();
firstArgument = numStack.pop();
sum = Math.trunc(+firstArgument / +lastArgument);
numStack.push(sum)
break;
default:
numStack.push([tokens[i]]);
break;
}
}

return numStack[0]
};

Эдик-ег
Автор

«Где это будет использоваться в вебе?» 🤦‍♂️

betterlucknexttime