Preambolo
I numeri interi sono sempre pari o dispari . Gli interi pari sono divisibili per due, gli interi dispari no.
Quando aggiungi due numeri interi puoi dedurre se il risultato sarà pari o dispari in base al fatto che i riepiloghi fossero pari o dispari:
- Pari + Pari = Pari
- Pari + Dispari = Dispari
- Dispari + Pari = Dispari
- Dispari + Dispari = Pari
Allo stesso modo, quando moltiplichi due numeri interi puoi dedurre se il risultato sarà pari o dispari in base al fatto che i fattori fossero pari o dispari:
- Pari * Pari = Pari
- Pari * Dispari = Pari
- Dispari * Pari = Pari
- Dispari * Dispari = Dispari
Pertanto, se si conosce l'uniformità o la stranezza di tutte le variabili in un'espressione matematica che implica solo addizione e moltiplicazione, è possibile dedurre se il risultato sarà pari o dispari.
Ad esempio, possiamo affermare con certezza che il (68 + 99) * 37
risultato è dispari perché un pari più un dispari ( 68 + 99
) è dispari e che volte dispari un altro dispari ( odd * 37
) dà uno strano.
Sfida
Scrivi un programma o una funzione che accetta una stringa contenente solo i quattro caratteri eo+*
. Questa stringa rappresenta un'espressione matematica data nella notazione del prefisso che coinvolge solo addizione ( +
) e moltiplicazione ( *
). Ciascuno e
rappresenta un numero pari arbitrario e ciascuno o
rappresenta un numero dispari arbitrario.
Il tuo compito è semplificare l'espressione, stampando o restituendo un singolo e
o in o
base al risultato dell'espressione pari o dispari.
Si può presumere che l'input sarà sempre in notazione con prefisso valida. In particolare, ciascuno +
e *
avrà sempre due operandi corrispondenti che si verificano dopo di esso. Questi operandi possono essere una singola e
o o
, o un'altra, +
o *
un'espressione che a sua volta ha operandi.
Ad esempio, l'input *+eoo
può essere letto come mul(add(e, o), o)
o (e + o) * o
nella normale notazione infix . Il e
e il primo o
sono gli operandi corrispondenti a +
, +eo
e l'ultimo o
sono gli operandi corrispondenti a *
.
Giusto per chiarire, ecco alcuni input non validi con notazione prefisso errata:
eo
ooe
o+e
ee*
+*oe
+e*o
Una sola nuova riga finale nell'output va bene, ma per il resto dovrebbe essere emessa una semplice e
per pari o o
dispari.
Vince il codice più breve in byte.
Casi test
(Le righe vuote servono solo a separare visivamente casi simili.)
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?