преамбула
Целые числа всегда либо четные, либо нечетные . Четные целые числа делятся на два, нечетные целые - нет.
Когда вы добавляете два целых числа, вы можете определить, будет ли результат четным или нечетным, основываясь на том, были ли слагаемые четными или нечетными:
- Даже + Даже = Даже
- Четный + Нечетный = Нечетный
- Нечетный + Четный = Нечетный
- Нечетный + Нечетный = Четный
Аналогично, когда вы умножаете два целых числа, вы можете сделать вывод, будет ли результат четным или нечетным, исходя из того, были ли факторы четными или нечетными:
- Даже * даже = даже
- Четный * Нечетный = Четный
- Нечетный * Четный = Четный
- Нечетный * Нечетный = Нечетный
Таким образом, если вы знаете четность или нечетность всех переменных в математическом выражении, которое включает только сложение и умножение, вы можете сделать вывод, будет ли результат четным или нечетным.
Например, мы можем с уверенностью сказать, что это (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
ОК?