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