Präambel
Ganzzahlen sind immer entweder gerade oder ungerade . Gerade ganze Zahlen sind durch zwei teilbar, ungerade ganze Zahlen nicht.
Wenn Sie zwei Ganzzahlen hinzufügen, können Sie ableiten, ob das Ergebnis gerade oder ungerade ist, je nachdem, ob die Summanden gerade oder ungerade waren:
- Gerade + Gerade = Gerade
- Gerade + Ungerade = Ungerade
- Ungerade + Gerade = Ungerade
- Ungerade + Ungerade = Gerade
Wenn Sie zwei Ganzzahlen multiplizieren, können Sie auch ableiten, ob das Ergebnis gerade oder ungerade ist, je nachdem, ob die Faktoren gerade oder ungerade waren:
- Gerade * Gerade = Gerade
- Gerade * Ungerade = Gerade
- Ungerade * Gerade = Gerade
- Ungerade * Ungerade = Ungerade
Wenn Sie also die Gleichmäßigkeit oder Ungleichmäßigkeit aller Variablen in einem mathematischen Ausdruck kennen, bei dem es nur um Addition und Multiplikation geht, können Sie ableiten, ob das Ergebnis gerade oder ungerade ist.
Zum Beispiel können wir zuversichtlich sagen, dass dies (68 + 99) * 37eine Ungerade ergibt, weil ein gerades Plus eine ungerade ( 68 + 99) eine ungerade ist, und dass ungerade mal eine andere ungerade ( odd * 37) eine ungerade ergibt.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die nur eine Zeichenfolge mit den vier Zeichen enthält eo+*. Diese Zeichenfolge stellt einen mathematischen Ausdruck dar, der in Präfixnotation angegeben wird und nur Addition ( +) und Multiplikation ( *) umfasst. Jedes erepräsentiert eine beliebige gerade Zahl und jedes orepräsentiert eine beliebige ungerade Zahl.
Ihre Aufgabe ist es, den Ausdruck, Druck oder Rückgabe eines einzigen zu vereinfachen eoder obasierend darauf , ob das Ergebnis des Ausdrucks gerade oder ungerade ist .
Sie können davon ausgehen, dass die Eingabe immer in gültiger Präfixnotation erfolgt. Insbesondere werden hinter jedem +und *immer zwei entsprechende Operanden vorkommen. Diese Operanden können ein einzelnes eoder ooder ein anderes +oder ein *Ausdruck sein, der wiederum Operanden enthält.
Beispielsweise *+eookönnte die Eingabe als mul(add(e, o), o)oder (e + o) * oin normaler Infixnotation gelesen werden . Das eund das erste osind die Operanden, die dem entsprechen +, +eound das letzte osind die Operanden, die dem entsprechen *.
Zur Verdeutlichung hier einige ungültige Eingaben mit falscher Präfixnotation:
eo
ooe
o+e
ee*
+*oe
+e*o
Eine einzelne nachgestellte Zeile in der Ausgabe ist in Ordnung, ansonsten sollte nur eine egerade oder oungerade Zeile ausgegeben werden.
Der kürzeste Code in Bytes gewinnt.
Testfälle
(Leerzeilen dienen nur zur optischen Trennung ähnlicher Fälle.)
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?