Nhiệm vụ của bạn là viết một chương trình sẽ nhận đầu vào như thế này:
a + b * c + a / 2
và sẽ tạo mã nguồn cho một chương trình lấy đầu vào của người dùng và sau đó đánh giá biểu thức.
Các biểu hiện có thể chứa các nhà khai thác +, -, *, /; biến chữ thường một chữ cái; và số nguyên trong khoảng từ 0 đến 32000. Ưu tiên số học tiêu chuẩn phải được tuân thủ chính xác. Biểu thức được giới hạn ở 26 biến duy nhất từ a đến z. Tuy nhiên, một biến duy nhất có thể xuất hiện nhiều lần.
Bạn có thể giả sử rằng biểu thức đầu vào là hợp lệ (tuân theo các quy tắc này).
Chương trình được tạo phải nhắc nhập dữ liệu người dùng ở dạng này, chỉ nhắc một lần cho mỗi biến:
a =
Đầu vào của người dùng từ 0 đến 32000 phải được xử lý chính xác. Sau đó nó sẽ in biểu thức và kết quả chính xác. Bạn có thể sử dụng số học số nguyên hoặc dấu phẩy động. Các tính toán nên được thực hiện với độ chính xác ít nhất 32 bit. Ngoài ra, bạn không phải lo lắng về việc tràn hoặc chia cho số không.
Ví dụ về chương trình Perl không được tạo ra cho biểu thức trên:
print "a = ";
my $a = <>;
print "b = ";
my $b = <>;
print "c = ";
my $c = <>;
print "a + b * c + a / 2 = " . ($a + $b * $c + $a / 2);
Ví dụ đầu vào và đầu ra của chương trình được tạo cho biểu thức trên:
a = 1
b = 2
c = 3
a + b * c + a / 2 = 7.5
Điểm được tính bằng độ dài của chương trình + độ dài của chương trình được tạo cho biểu thức này:
1 + a * 4 * b + 2 / d * e - a - 3 + g / h * 32000
Điểm số thấp nhất chiến thắng.
Cập nhật: Chỉ để làm nổi bật một số yêu cầu của vấn đề, như đã nêu ở trên:
- Đầu ra của chương trình phải là mã nguồn cho một chương trình khác để đánh giá biểu thức.
- Chương trình phải in biểu thức gốc . Có lẽ có một sự mơ hồ trong điều này (người ta có thể lập luận rằng đó
a+blà cùng một biểu thứca + b), nhưng để rõ ràng, hãy nói rằng đó phải là biểu thức ban đầu với không gian trắng nguyên vẹn. Tất cả các câu trả lời hợp lệ cho đến nay đã làm điều đó theo cách đó.