Вступ
Форте - дуже своєрідна езотерична мова, заснована на концепції модифікації значень чисел. У числах Форте не константи, а змінні, ви можете використовувати LET
інструкцію, щоб призначити їм нові значення.
Наприклад, після виконання LET 2=4-1
відтепер 2
набуває значення 3
, що означає, що щоразу, коли значення 2
з'являється у виразі, воно замість цього "замінюється" на 3
. Вираз (1+1)*2
тепер оцінюватиме 9
.
Ця інструкція в Forte використовується як для зберігання інформації, так і для управління потоком (рядки нумеруються і, змінивши значення їх числа, можна визначити порядок їх виконання). У цьому виклику ми не будемо мати справу з цим другим аспектом.
Змагання
Вам потрібно написати інтерпретатора для спрощеного підмножини LET
виразів Forte .
Ви отримаєте як введення ряд рядків, наступних за цією граматикою:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
Примітка: ця граматика не є дійсною Forte, оскільки в ній відсутні номери рядків, LET та круглі дужки (які завжди обов'язкові)
Тобто вам потрібно буде мати справу лише з обчисленням підсумків та призначенням значень чисел. Дужки не будуть присутні у введенні, і кожен вираз повинен бути оцінений зліва направо: будьте уважні, що часткові результати впливають на повторні визначення!
Числа завжди будуть невід'ємними цілими числами, аж до межі нативного цілого типу вашої мови (або 2 ^ 32, залежно від того, що вище).
Для кожного рядка слід вивести результат виразу і призначити цей результат значення (можливо, переназначене) першого числа, що вплине на те, як будуть інтерпретуватися наступні рядки.
Це код-гольф , виграє найкоротший код (у байтах)!
Інші правила
- Формат введення є гнучким, ви можете, наприклад, взяти один рядок з новими рядками, списком рядків, списком списків чисел ... Те саме стосується виводу, доки зрозуміло, що результат кожного виразу в вхід.
- Ви можете подати або функцію, повну програму, або рішення, яке потрібно запустити у середовищі REPL, викликаючи його один раз для кожного рядка.
- Стандартні лазівки заборонені, зокрема ви не можете викликати зовнішній інтерпретатор Forte у своєму коді.
Приклади
Всі вони є частиною одного входу. Після кожного рядка відображається очікуваний вихід відносно цього рядка, іноді із коментарем із зазначенням відповідних перепризначень (не є частиною необхідного результату).
5=4
4
6=5
4 # 5 -> 4
7=1+2+5
7
7=5+2+1
4 # Order of operations matters! 5+2 -> 4+2 -> 6 -> 4
18=5+6+7
12
5=3
3 # Remember: 5 -> 4
10=6+4
3 # 6 -> 4 -> 3, 3+3 = 6 -> 3
0
дійсний ("Числа завжди будуть невід'ємними цілими числами")
0
дійсне число?