Ctrl K

Калькулятор со скобками и переменными

Сложная
Дана строка program — выражение на маленьком скобочном языке. Вычислите его и верните целое число. Выражение — это одно из: - целое число, возможно отрицательное, например 7 или -12; - имя переменной — строчная латинская буква, за которой могут идти строчные буквы и цифры; - (add e1 e2) — сумма значений e1 и e2; - (mult e1 e2) — произведение значений e1 и e2; - (let v1 e1 v2 e2 ... vk ek body) — по очереди присваивает переменной v1 значение e1, затем v2 значение e2 и так далее (каждое следующее выражение уже видит предыдущие присваивания), а потом возвращает значение body. Пар «имя — выражение» хотя бы одна. Каждый let открывает собственную область видимости: присваивания внутри него не видны снаружи. Когда встречается имя переменной, её значение берётся из ближайшей объемлющей области, где она задана. Слова add, mult и let никогда не используются как имена переменных. Все токены разделены ровно одним пробелом, выражение всегда корректно.
Пример 1
program="(add 3 (mult 4 5))" → 23

Сначала 4 · 5 = 20, затем 3 + 20 = 23.

Пример 2
program="(let a 5 (add a (let a 10 (mult a 2))))" → 25

Внутренний let заводит своё a = 10, поэтому (mult a 2) даёт 20. Снаружи a по-прежнему равно 5, и ответ 5 + 20 = 25.

Пример 3
program="(let n 2 n (mult n n) n (add n -1) n)" → 3

Присваивания идут по порядку: n = 2, затем 2 · 2 = 4, затем 4 − 1 = 3.

Ограничения
  • 1 ≤ len(program) ≤ 2000
  • В начале и в конце строки нет пробелов, токены разделены одним пробелом
  • Выражение корректно, все используемые переменные заданы
  • Ответ и все промежуточные значения помещаются в 32-битное знаковое целое
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиУпрощение многочлена с буквами СложнаяКалькулятор со скобками: плюс и минус СложнаяПодсчёт элементов в формуле СложнаяКалькулятор со скобками и четырьмя действиями СложнаяВложенная логическая формула Сложная
загружаем Python…
Вход
program="(add 3 (mult 4 5))"
Ожидается
23

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 91 тест на сервере, включая скрытые.