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) * 37
eine 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 e
repräsentiert eine beliebige gerade Zahl und jedes o
repräsentiert eine beliebige ungerade Zahl.
Ihre Aufgabe ist es, den Ausdruck, Druck oder Rückgabe eines einzigen zu vereinfachen e
oder o
basierend 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 e
oder o
oder ein anderes +
oder ein *
Ausdruck sein, der wiederum Operanden enthält.
Beispielsweise *+eoo
könnte die Eingabe als mul(add(e, o), o)
oder (e + o) * o
in normaler Infixnotation gelesen werden . Das e
und das erste o
sind die Operanden, die dem entsprechen +
, +eo
und das letzte o
sind 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 e
gerade oder o
ungerade 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
eval
OK?