Thứ tự các phép toán, PEMDAS, là một quy tắc cơ bản trong toán học cho chúng ta biết nên thực hiện các phép toán thứ tự nào:
"Dấu ngoặc đơn, số mũ, phép nhân và phép chia, phép cộng và phép trừ"
Vấn đề là, PEMDAS không linh hoạt lắm! Điều gì nếu bạn muốn làm điều đó theo thứ tự khác? Chúng tôi sẽ không gây rối với dấu ngoặc đơn, vì vậy chúng tôi giữ chúng ở vị trí của chúng (đầu tiên).
Tạo một chương trình có hai đối số:
- Một chuỗi, cho biết thứ tự các hoạt động nên theo. Một số ví dụ là
"DAMES"
,"SAD, ME"
,"ME SAD"
,"MEADS"
. Có, dấu cách và dấu phẩy là OK, vì nó làm cho thứ tự dễ nhớ hơn.- Theo đề xuất trong trò chuyện: Không gian hỗ trợ và dấu phẩy hiện là tùy chọn.
- Nếu một trong các chữ cái bị thiếu hoặc nếu có thêm các chữ cái không nên ở đó, bạn có thể xem xét đầu vào không hợp lệ và xử lý nó theo cách bạn muốn.
- Một chuỗi hoặc một biểu thức có chứa biểu thức cần được ước tính.
Trả về kết quả của biểu thức dưới dạng số thập phân hoặc số nguyên. Nếu câu trả lời không phải là số nguyên, nó phải được trả về dưới dạng số thập phân.
Quy tắc:
- Bạn có thể kết hợp hai đối số đầu vào thành một, nếu ngôn ngữ của bạn dễ dàng hơn.
- Nó không phải là một chuỗi, nhưng nó phải có các chữ cái. Bạn không thể thay thế Bổ sung bằng 1, Phân chia bằng 2, v.v.
- Bạn có thể chọn đầu vào nào là đầu tiên.
- Biểu thức được đánh giá
từ phải sangtrái sang phải. (Thay đổi quy tắc. Bất kỳ bài đăng nào trong 12 giờ đầu tiên có cách này đều được chấp nhận). - Các hoạt động sử dụng các ký hiệu :
( ) ^ * / + -
. Chẳng hạn, bạn không thể sử dụng¤
thay vì+
bổ sung. - Dấu cách trong biểu thức nhập không hợp lệ làm đầu vào
- Unary +/- không hợp lệ làm đầu vào nếu nó trực tiếp theo sau + hoặc -. Coi
3+-2
như là đầu vào không hợp lệ. Nó có thể được xử lý theo cách bạn muốn (không phải tạo ra lỗi). Nếu+
hoặc-
theo bất kỳ toán tử nào khác ngoài cộng hoặc trừ, thì nó được xử lý theo cách thông thường :3*-3 = -9
,sin(-2)=-0.909
- Chương trình phải tuân thủ nghiêm ngặt các chữ cái, vì vậy
"EMDAS", 1-3+4 => -6
, và"EMDSA", 1-3+4 => 2
.
Ví dụ:
Input: "EMDAS", "3+6*2/4-1" // -> 3+12/4-1 -> 3+3-1 -> 6-1 -> 5
Output: 5
Input: "DAMES", "3+6*2/4-1" // -> 3+6*0.5-1 -> 9*0.5-1 -> 4.5-1 -> 3.5
Output: 3.5
Input: "SAD, ME", "3+6*2/4-1" // -> 3+6*2/3 -> 9*2/3 -> 9*0.66667 -> 6
Output: 6
Input: "ME ADS", "3+5^4/2-3*2 // -> 3+5^4/2-6 -> 3+625/2-6 -> 628/2-6 -> 314-6 -> 308
Output: 308
Input: "AM EDS", "4*3-sin(0.5^2)*3+1" // -> 4*3-sin(0.5^2)*4 -> 12-sin(0.5^2)*4 -> 4*3-(4*sin(0.5^2)) -> 12-(4*sin(0.5^2)) -> 12-(4*sin(0.25)) -> 12-(4*0.24740) -> 12-0.98961 -> 11.01038
Output: 11.01038
Input: "DAMES", "4-5-6" // -> (4-5)-6 -> = -7
Output: -7 // NOT: -> 4-(5-6) -> 4-(-1) -> 5
Lưu ý, các dấu ngoặc đơn được thêm vào để chỉ ra rằng phép nhân 4*sin(0.5^2)
được đánh giá trước khi lũy thừa.
Đây là mã golf, vì vậy mã ngắn nhất tính bằng byte sẽ thắng.
BODMAS
hoặc BIDMAS
ở trường. B
= Chân đế, O
hoặc I
= Đặt hàng hoặc Chỉ số.
p
cần thiết không? Nó không có trong các ví dụ