Các thách thức
Bạn là chủ sở hữu của một dịch vụ tuyệt vời có tên Coyote Beta , trả lời một cách kỳ diệu những câu hỏi toán học mà người dùng của nó gửi cho nó qua internet.
Nhưng hóa ra, băng thông đắt tiền. Bạn có hai lựa chọn, hoặc tạo " Coyote Beta Pro" hoặc tìm cách giải quyết vấn đề này. Mới gần đây, có người hỏi thăm (x + 2)
. Không thể khách hàng gửi x+2
, và người dùng sẽ không thấy sự khác biệt?
Nhiệm vụ
Nhiệm vụ của bạn là "thu nhỏ" các biểu thức toán học. Đưa ra một biểu thức đầu vào, bạn phải loại bỏ khoảng trắng và dấu ngoặc đơn cho đến khi nó đưa ra một biểu diễn tối thiểu của cùng một đầu vào. Các dấu ngoặc đơn xung quanh các hoạt động liên kết không cần phải được bảo tồn.
Các nhà khai thác chỉ đưa ra ở đây là +
, -
, *
, /
, và^
(lũy thừa), với associativity toán học tiêu chuẩn và được ưu tiên. Khoảng trắng duy nhất được đưa ra trong đầu vào sẽ là các ký tự khoảng trắng thực tế.
Đầu vào / đầu ra mẫu
Input | Output
------------|--------------
(2+x) + 3 | 2+x+3
((4+5))*x | (4+5)*x
z^(x+42) | z^(x+42)
x - ((y)+2) | x-(y+2)
(z - y) - x | z-y-x
x^(y^2) | x^y^2
x^2 / z | x^2/z
- (x + 5)+3 | -(x+5)+3
Chấm điểm
Đầu vào / đầu ra có thể sử dụng bất kỳ phương pháp ưa thích. Chương trình nhỏ nhất tính bằng byte thắng.
Bit chính xác
Lũy thừa là liên kết đúng và cũng tuân theo ưu tiên toán học tiêu chuẩn (là cao nhất). Một chữ số hợp lệ là /[0-9]+/
, và một biến số hợp lệ là /[a-z]+/
. Một biến số duy nhất đại diện cho một giá trị ngay cả khi độ dài ký tự của nó dài hơn 1.
"Các dấu ngoặc đơn xung quanh các hoạt động kết hợp không cần phải được bảo tồn" là đầu ra phải bao gồm một biểu thức dẫn đến một cây phân tích giống hệt nhau, ngoại trừ các hoạt động kết hợp có thể được sắp xếp lại.
/[a-z]+/
, điều đó có nghĩa là nhân với vị trí kề nhau như ab
không được phép?
2+(3+4)
được thay đổi 2+3+4
, phải không? Điều này không thay đổi cây phân tích.
x^(y/2)=x^y/2
; lũy thừa có thứ tự ưu tiên cao hơn, ergo x^y/2=(x^y)/2
,.
Prompt X:expr(X)
TI-BASIC nhưng bạn không thể đơn giản hóa :(