介绍
Forte是一种非常奇特的深奥语言,基于修改数字值的概念。在Forte中,数字不是常数而是变量,您可以使用LET
指令为其分配新值。
例如,LET 2=4-1
从现在开始执行后,2
假设值为3
,这意味着只要2
表达式中的值出现,它就会由代替3
。该表达式(1+1)*2
现在将计算为9
。
Forte中的此指令既用于存储信息,又用于流控制(对行进行编号,并通过更改其编号的值可以确定其执行顺序)。在这个挑战中,我们将不处理第二个方面。
挑战
您需要为Forte LET
表达式的简化子集编写解释器。
您将收到以下遵循以下语法的输入行:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
注意:此语法无效,因为它缺少行号,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
有效号码吗?