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) * 37
donne 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 e
représente un nombre pair arbitraire et chacun o
un nombre impair arbitraire.
Votre tâche consiste à simplifier l'expression, à en imprimer ou à en renvoyer une seule, e
ou 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 e
ou o
, ou un autre +
ou une *
expression qui à son tour possède des opérandes.
Par exemple, l’entrée *+eoo
pourrait être lue comme mul(add(e, o), o)
, ou (e + o) * o
en notation infixe normale . Le e
et le premier o
sont les opérandes correspondant au +
, et +eo
et le dernier o
sont 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 e
pour pair ou o
impair 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
eval
OK?