Thử thách này nhưng với một thông số tốt hơn.
Thông số kỹ thuật
Chương trình của bạn sẽ có một phương trình tuyến tính chứa một biến duy nhất x
và xuất giá trị của x
.
Nhập / phân tích cú pháp
- Đầu vào sẽ chỉ chứa số, toán tử, dấu ngoặc đơn (
()
)x
và=
dấu (điều này có nghĩa là không có khoảng trắng). - Dấu ngoặc sẽ luôn được cân bằng.
- Sẽ luôn có ít nhất 1
x
. Anx
có thể được đi trước bởi một số. - Tất cả các phương trình chính xác sẽ có một kết quả.
Một số có thể được xác định bằng cách làm theo các bước sau. Một số có thể được xác định bởi regex : -?(\d+(\.\d+)?|\.\d+)
.
Nếu bạn không nói regex: Một chữ số được định nghĩa là 0-9
- Nó có thể có một
-
ở đầu của nó biểu thị tiêu cực - Sau đó có thể có một số chữ số. Nếu chúng không có bất kỳ chữ số nào thì sẽ có dấu thập phân
- Nếu một dấu thập phân tồn tại, ít nhất một chữ số sẽ theo sau nó
Số / giá trị lớn nhất sẽ được xác định bởi khả năng ngôn ngữ của bạn.
Một toán tử là bất kỳ : +-*/
, chúng sẽ luôn xuất hiện giữa các số và hoặc dấu ngoặc đơn
điều này có nghĩa (5)(5)
không phải là một đầu vào hợp lệ vì đơn giản.
Dấu ngoặc đơn sẽ luôn chứa một biểu thức hợp lệ (một tổ hợp số và / hoặc toán tử hợp lệ) bên trong chúng. Dấu ngoặc đơn "Cân bằng" được định nghĩa vì mọi (
sẽ có kết thúc đóng)
Đánh giá
- Thứ tự của các hoạt động nên được tuân theo và các ưu tiên là (cao nhất đến thấp nhất):
- Dấu ngoặc đơn (được lồng sâu nhất trước)
- Nhân & chia
- Phép cộng và phép trừ
- Nếu hai toán tử có cùng mức ưu tiên xảy ra, bạn nên đi sang trái -> phải
Đầu ra
Bạn nên xuất kết quả theo một cách nào đó. Nếu bạn không xuất kết quả chỉ là số, hãy làm rõ trong câu trả lời của bạn về cách xuất ra. Định dạng đầu ra của bạn phải nhất quán. Đầu ra có thể là số thập phân, nhưng nó sẽ luôn hợp lý, độ chính xác bị giới hạn ở độ chính xác của ngôn ngữ của bạn. Chỉ khi ngôn ngữ của bạn không hỗ trợ số học dấu phẩy động, bạn không cần hỗ trợ ngôn ngữ đó.
Quy tắc
- Việc xây dựng tầm thường hóa nhiệm vụ này được cho phép nhưng , bạn phải thêm
[uses built-in]
rõ ràng vào tiêu đề của câu trả lời. Điều này miễn cho câu trả lời của bạn từ chiến thắng - Một "tích hợp tầm thường hóa nhiệm vụ này" là bất kỳ:
- Một cái gì đó có trong một phương trình và đưa ra giá trị cho a / biến
- Một cái gì đó sẽ hoàn toàn đơn giản hóa một phương trình
- Sử dụng
eval
hoặc một chức năng liên quan để thực hiện một số lượng đáng kể phân tích cú pháp. Việc sử dụngeval
và các hàm liên quan không được phép nếu chúng được sử dụng để (với sự điều chỉnh tối thiểu cho đầu vào) giải phương trình tuyến tính. - Nếu bạn nghi ngờ, chỉ cần hỏi trong một nhận xét.
- Được xây dựng mà phân tích phương trình được phép
Ví dụ
3+4=x
7
4+x=5
1
3+3*3=x
12
3x-4=7+2x
11
3--1=x
4
3*(2+4x)=7x-4
-2
1.2+2.3x=5.8
2
10=4x
2.5
Đầu vào INVALID :
(5)(4)=x no operator between (5) and (4)
5(x+3)=2 no operator 5 and (...)
x=y the only variable is x
4=3 there is no x
x+3=x-7 no solution
x=x infinite solutions
+5=x + is not an unary operator. -5=x would be valid though
1/(x-3)=5 Nonlinear
3/x Nonlinear
eval
được coi là tầm thường hóa thách thức không? Ngoài ra, sẽ hình thức new Function(...)
đếm?