Вступление
Форте - это очень своеобразный эзотерический язык, основанный на концепции изменения значений чисел. В числах Forte не константы, а переменные, вы можете использовать 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
допустимый номер?