Préambule
Les entiers sont toujours pairs ou impairs . Les entiers pairs sont divisibles par deux, les entiers impairs ne le sont pas.
Lorsque vous ajoutez deux nombres entiers, vous pouvez en déduire si le résultat sera pair ou impair en fonction de la nature des sommands:
- Même + Même = Même
- Even + Odd = Odd
- Impair + Pair = Impair
- Odd + Odd = Pair
De même, lorsque vous multipliez deux nombres entiers, vous pouvez en déduire si le résultat sera pair ou impair en fonction du fait que les facteurs sont pairs ou impairs:
- Même * Même = Même
- Even * Odd = Even
- Odd * Even = Even
- Impair * Impair = Impair
Ainsi, si vous connaissez l'uniformité ou l'étrangeté de toutes les variables d'une expression mathématique impliquant uniquement l'addition et la multiplication, vous pouvez en déduire si le résultat sera pair ou impair.
Par exemple, nous pouvons affirmer avec certitude que cela (68 + 99) * 37donne un impair, car un pair plus un impair ( 68 + 99) est un impair, et que, parfois, un autre impair ( odd * 37) donne un étrange.
Défi
Ecrivez un programme ou une fonction qui accepte une chaîne contenant uniquement les quatre caractères eo+*. Cette chaîne représente une expression mathématique donnée sous forme de préfixe impliquant uniquement add ( +) et multiplication ( *). Chacun ereprésente un nombre pair arbitraire et chacun oun nombre impair arbitraire.
Votre tâche consiste à simplifier l'expression, à en imprimer ou à en renvoyer une seule, eou oà déterminer si le résultat de l'expression est pair ou impair.
Vous pouvez supposer que l'entrée sera toujours en notation de préfixe valide. Plus précisément, chaque +et *aura toujours deux opérandes correspondants qui se produisent après. Ces opérandes peuvent être un seul eou o, ou un autre +ou une *expression qui à son tour possède des opérandes.
Par exemple, l’entrée *+eoopourrait être lue comme mul(add(e, o), o), ou (e + o) * oen notation infixe normale . Le eet le premier osont les opérandes correspondant au +, et +eoet le dernier osont les opérandes correspondant au *.
Pour que tout soit clair, voici quelques entrées non valides qui ont une notation de préfixe incorrecte:
eo
ooe
o+e
ee*
+*oe
+e*o
Une nouvelle ligne de fin dans la sortie convient, mais dans le cas contraire, un simple epour pair ou oimpair est tout ce qui doit être affiché.
Le code le plus court en octets gagne.
Cas de test
(Les lignes vides servent uniquement à séparer visuellement des cas similaires.)
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
evalOK?