TGViewer
JavaScript | LeetCode JavaScript | LeetCode @easy_frontend_task · 8.32K subscribers
Post #2184 831
Задача: 736. Parse Lisp Expression
Сложность: hard

Нам дан массив asteroids, состоящий из целых чисел, представляющих астероиды в ряд. Для каждого астероида абсолютное значение обозначает его размер, а знак - направление движения (положительное - вправо, отрицательное - влево). Каждый астероид движется с одинаковой скоростью. Определите состояние астероидов после всех столкновений. Если два астероида столкнутся, меньший из них взорвется. Если оба одинакового размера, то взорвутся оба. Два астероида, движущиеся в одном направлении, никогда не встретятся.

Пример:
Input: expression = "(let x 2 (mult x (let x 3 y 4 (add x y))))"
Output: 14


👨‍💻 Алгоритм:

1⃣Определите функцию для оценки выражений.

2⃣Используйте рекурсивный подход для обработки различных типов выражений (let, add, mult, и переменных).

3⃣Используйте словарь для отслеживания значений переменных с учетом области видимости.

😎 Решение:
class Solution {
evaluate(expression) {
const evaluate = (expression, env) => {
if (!expression.startsWith('(')) {
if (isNaN(expression)) {
return env[expression];
}
return parseInt(expression);
}

const tokens = tokenize(expression);
if (tokens[0] === 'let') {
for (let i = 1; i < tokens.length - 2; i += 2) {
env[tokens[i]] = evaluate(tokens[i + 1], env);
}
return evaluate(tokens[tokens.length - 1], env);
} else if (tokens[0] === 'add') {
return evaluate(tokens[1], env) + evaluate(tokens[2], env);
} else if (tokens[0] === 'mult') {
return evaluate(tokens[1], env) * evaluate(tokens[2], env);
}
};

const tokenize = (expression) => {
let tokens = [];
let token = '';
let parens = 0;
for (let char of expression) {
if (char === '(') {
parens++;
if (parens === 1) {
continue;
}
} else if (char === ')') {
parens--;
if (parens === 0) {
tokens.push(tokenize(token));
token = '';
continue;
}
} else if (char === ' ' && parens === 1) {
if (token) {
tokens.push(token);
token = '';
}
continue;
}
token += char;
}
if (token) {
tokens.push(token);
}
return tokens;
};

return evaluate(expression, {});
}
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_frontend_task
  1. Oct 11, 2026Задача: 651. 4 Keys Keyboard Сложность: medium Представьте, что у вас есть специальная кла…
  2. Oct 9, 2026Задача: 1054. Distant Barcodes Сложность: medium На складе имеется ряд штрих-кодов, где i-…
  3. Oct 9, 2026Задача: 1237. Find Positive Integer Solution for a Given Equation Сложность: medium Если д…
  4. Oct 8, 2026Задача: №19. Remove Nth Node From End of List Сложность: medium Дан связанный список и чис…
  5. Oct 7, 2026Задача: 1057. Campus Bikes Сложность: medium В городке, изображенном на плоскости X-Y, ест…
  6. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для Frontend разработчика, которые нигде больше не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →