Lời nói đầu
Số nguyên luôn luôn là số chẵn hoặc lẻ . Ngay cả số nguyên cũng chia hết cho hai, số nguyên lẻ thì không.
Khi bạn thêm hai số nguyên, bạn có thể suy ra kết quả sẽ là chẵn hay lẻ dựa trên việc triệu hồi là chẵn hay lẻ:
- Chẵn + Chẵn = Chẵn
- Chẵn + lẻ = lẻ
- Chẵn + Chẵn = lẻ
- Tỷ lệ cược + lẻ = chẵn
Tương tự như vậy, khi bạn nhân hai số nguyên, bạn có thể suy ra kết quả sẽ là chẵn hay lẻ dựa trên việc các yếu tố là chẵn hay lẻ:
- Chẵn * Chẵn = Chẵn
- Chẵn * lẻ = chẵn
- Chẵn * lẻ = chẵn
- Tỷ lệ lẻ * lẻ = lẻ
Do đó, nếu bạn biết độ chẵn hoặc lẻ của tất cả các biến trong biểu thức toán học chỉ liên quan đến phép cộng và phép nhân, bạn có thể suy ra kết quả sẽ là chẵn hay lẻ.
Ví dụ, chúng ta có thể tự tin nói rằng (68 + 99) * 37
kết quả là số lẻ vì số chẵn cộng với số lẻ ( 68 + 99
) là số lẻ và số lần lẻ đó một số lẻ khác ( odd * 37
) cho số lẻ.
Thử thách
Viết chương trình hoặc hàm lấy trong một chuỗi chỉ chứa bốn ký tự eo+*
. Chuỗi này biểu thị một biểu thức toán học được đưa ra trong ký hiệu tiền tố chỉ liên quan đến phép cộng ( +
) và phép nhân ( *
). Mỗi e
đại diện cho một số số chẵn tùy ý, và mỗi o
đại diện cho một số số lẻ tùy ý.
Nhiệm vụ của bạn là đơn giản hóa biểu thức, in hoặc trả về một e
hoặc o
dựa trên kết quả của biểu thức là chẵn hay lẻ.
Bạn có thể giả định rằng đầu vào sẽ luôn ở trong ký hiệu tiền tố hợp lệ. Cụ thể, mỗi +
và *
sẽ luôn có hai toán hạng tương ứng xảy ra sau nó. Những toán hạng có thể là một single e
hay o
, hay cách khác +
hoặc *
biểu hiện mà lần lượt có toán hạng.
Ví dụ, đầu vào *+eoo
có thể được đọc là mul(add(e, o), o)
, hoặc (e + o) * o
trong ký hiệu trung bình thông thường . Các e
và là người đầu tiên o
là toán hạng tương ứng với +
, và +eo
và cuối cùng o
là toán hạng tương ứng với *
.
Để làm rõ, đây là một số đầu vào không hợp lệ có ký hiệu tiền tố không chính xác:
eo
ooe
o+e
ee*
+*oe
+e*o
Một dòng mới duy nhất trong đầu ra là tốt, nhưng nếu không thì một số e
chẵn hoặc o
lẻ là tất cả những gì nên là đầu ra.
Mã ngắn nhất tính bằng byte thắng.
Các trường hợp thử nghiệm
(Các dòng trống chỉ để giúp phân tách trực quan các trường hợp tương tự.)
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
ổn không?