Tạo một chương trình giải một biểu thức toán học bằng cách sử dụng các phần tử từ các cạnh xen kẽ của biểu thức. Cách thực hiện là, thay vì đọc từ trái sang phải, bạn đọc ký tự đầu tiên, sau đó đến cuối cùng, sau đó là thứ hai để cuối cùng, v.v. Điều này sẽ cung cấp cho bạn một biểu thức mới mà bạn phải đánh giá và xuất ra.
a*b/c+d-e
135798642 <-- Order you read the expression in
ae*-bd/+c <-- Order of operation.
Thí dụ:
1*3/2+4-5
15*-34/+2 = -255
Nếu biểu thức không «hoạt động», 1
phải chèn vào các vị trí cần thiết để làm cho biểu thức hoạt động.
Một vài ví dụ có thể sẽ minh họa nó tốt hơn:
Input: 1+1+1+1+1
Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23
Input: 1+2-3+12-5
Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19
// |
// Not valid expression
Input: 2*2*2*2*2
Result: 968 // Because 2*2*2*2*2 -> 22**22**2 -> 22*1*22*1*2 -> 968
// || ||
// Not valid, 1 must be inserted
Input: 17/2
Output: 127 // Because 17/2 = 127/ -> 127/1 -> 127
Các toán tử phải được hỗ trợ là + - * /
. Sẽ không có dấu ngoặc đơn. Các quy tắc toán học thông thường và "cú pháp" được sử dụng, vì vậy, ví dụ **
không có nghĩa là lũy thừa. a++++1
tương đương với a+1
(tức là kiểu MATLAB, không phải C ++).
Trong trường hợp có nghi ngờ, một số hoạt động hợp lệ là:
-a
+a
a++b
a+-b
a*-b
a*+b
a*++b
a/b
a/-b
a/+b
-a/--b
Trong khi tất cả những điều sau đây không hợp lệ. Nó cho thấy những gì họ nên được thay thế bằng:
a+ | a+1
a- | a-1
a++++ | a++++1 (This is equivalent to a+1)
a*+++ | a*+++1 (This is equivalent to a*1)
a**b | a*1*b
a*/b | a*1/b
a/*b | a/1*b
a* | a*1
*a | 1*a
***a | 1*1*1*a
Quy tắc:
- Mã có thể là một chức năng hoặc một chương trình đầy đủ
- Đầu vào có thể là STDIN hoặc đối số chức năng
- Đầu vào phải là một biểu thức toán học hợp lệ, không có dấu ngoặc kép
''
hoặc""
. - Đầu ra phải là câu trả lời cho biểu thức mới, dưới dạng một số nguyên, thập phân hoặc một phần được đơn giản hóa.
- Ít nhất ba chữ số sau dấu thập phân phải được hỗ trợ. Vì vậy
1/3 = 0.333
, không0.33
.0.333333333
được chấp nhận. ans = ...
được chấp nhận.- Dòng mới và dấu vết hàng đầu và không gian được chấp nhận.
- Đầu vào sẽ chỉ là số nguyên
- Chia cho số 0 có thể dẫn đến lỗi, NaN, Inf, v.v. Xuất ra một số không được chấp nhận.
Như mọi khi, mã ngắn nhất trong byte thắng. Một người chiến thắng sẽ được chọn một tuần kể từ ngày thử thách được đăng. Câu trả lời được đăng sau đó vẫn có thể giành chiến thắng nếu nó ngắn hơn nhà lãnh đạo hiện tại.
0/0
nếu biểu thức thay đổi thành phép chia số nguyên hoặc modulo bằng 0 không?
x/0
là một đầu ra hợp lệ. Miễn là nó không đưa ra một câu trả lời không chính xác, nó ổn. Lỗi và "Không phải là số" là theo định nghĩa chính xác và vô cùng là "đủ chính xác",
2^64
, và nó có bị lỗi hay không nếu bạn đi qua?