前言
当您将两个整数相加时,可以根据被加数是偶数还是奇数来推断结果是偶数还是奇数:
- 偶数+偶数=偶数
- 偶数+奇数=奇数
- 奇数+偶数=奇数
- 奇数+奇数=偶数
同样,当您将两个整数相乘时,可以根据因子是偶数还是奇数来推断结果是偶数还是奇数:
- 偶数*偶数=偶数
- 偶数*奇数=偶数
- 奇数*偶数=偶数
- 奇数*奇数=奇数
因此,如果您知道数学表达式中仅涉及加法和乘法的所有变量的偶数或奇数,则可以推断结果是偶数还是奇数。
例如,我们可以确信地说(68 + 99) * 37
结果是奇数,因为偶数加上奇数(68 + 99
)就是一个奇数,而奇数乘以另一个奇数(odd * 37
)就是一个奇数。
挑战
编写一个仅包含四个字符的字符串的程序或函数eo+*
。该字符串表示一个以前缀表示法给出的数学表达式,仅涉及加法(+
)和乘法(*
)。每个e
代表任意的偶数,每个o
代表任意的奇数。
您的任务是简化表达式,打印或返回单个e
或o
基于表达式结果是偶数还是奇数。
您可以假设输入将始终使用有效的前缀表示法。具体来说,每个+
和*
将始终具有两个对应的操作数。这些操作数可以是单个e
或o
,或另一个+
或*
表达式,又具有操作数。
例如,输入*+eoo
可以读取为mul(add(e, o), o)
或(e + o) * o
以普通的中止符号表示。在e
与第一o
是对应于操作数+
,以及+eo
最后o
是对应于操作数*
。
为了清楚起见,这是一些无效的输入,这些输入的前缀表示法不正确:
eo
ooe
o+e
ee*
+*oe
+e*o
输出中的单个尾随换行符就可以了,但否则,应该输出的是e
偶数还是o
奇数。
以字节为单位的最短代码获胜。
测试用例
(空行仅用于帮助从视觉上区分相似的案例。)
e -> e
o -> o
+ee -> e
+eo -> o
+oe -> o
+oo -> e
*ee -> e
*eo -> e
*oe -> e
*oo -> o
+e+ee -> e
+e+eo -> o
+e+oe -> o
+e+oo -> e
+e*ee -> e
+e*eo -> e
+e*oe -> e
+e*oo -> o
+o+ee -> o
+o+eo -> e
+o+oe -> e
+o+oo -> o
+o*ee -> o
+o*eo -> o
+o*oe -> o
+o*oo -> e
*e+ee -> e
*e+eo -> e
*e+oe -> e
*e+oo -> e
*e*ee -> e
*e*eo -> e
*e*oe -> e
*e*oo -> e
*o+ee -> e
*o+eo -> o
*o+oe -> o
*o+oo -> e
*o*ee -> e
*o*eo -> e
*o*oe -> e
*o*oo -> o
++eee -> e
++eeo -> o
++eoe -> o
++eoo -> e
++oee -> o
++oeo -> e
++ooe -> e
++ooo -> o
+*eee -> e
+*eeo -> o
+*eoe -> e
+*eoo -> o
+*oee -> e
+*oeo -> o
+*ooe -> o
+*ooo -> e
*+eee -> e
*+eeo -> e
*+eoe -> e
*+eoo -> o
*+oee -> e
*+oeo -> o
*+ooe -> e
*+ooo -> e
**eee -> e
**eeo -> e
**eoe -> e
**eoo -> e
**oee -> e
**oeo -> e
**ooe -> e
**ooo -> o
+e+e+e+ee -> e
+o+o+o+oo -> o
*e*e*e*ee -> e
*o*o*o*oo -> o
+e+o+e+oe -> e
+o+e+o+eo -> o
*e*o*e*oe -> e
*o*e*o*eo -> e
+e*e+e*ee -> e
+o*o+o*oo -> o
*e+e*e+ee -> e
*o+o*o+oo -> o
+**++*+*eeoeeooee -> e
+**++*+***eooeoeooeoe -> e
+**+***+**++**+eooeoeeoeeoeooeo -> o
+e*o*e**eoe -> e
+*e+e+o+e**eeoe -> e
**o++*ee*++eoe*eo+eoo -> o
eval
确定吗?