Giới thiệu
Có một điểm trong thời thơ ấu khi bạn nghĩ rằng bạn đã thành thạo việc thêm và nhân, sau đó ai đó sẽ đến và thông báo cho bạn rằng:
a * b + c = (a * b) + c! = a * (b + c),
và đó không phải là một quá trình đơn giản hay tuyến tính như bạn đã được dạy trước đó. Bạn học được rằng tồn tại một cái gì đó gọi là thứ tự của các hoạt động . Đây là một cách rất quan trọng để giữ một số mức độ nhất quán và trong các biểu thức, mà không có dấu ngoặc đơn cản trở mọi thứ.
Cốt truyện chung
Một ngày nọ, bạn thức dậy với âm thanh hoảng loạn trên đường phố. Một nhóm cực đoan dưới cái tên " The 2560 " (viết tắt của "Tổ chức chống lại trật tự hoạt động", với một vòng xoắn hex-ish) đã sử dụng các phương pháp xấu xa của chúng để kiểm soát tất cả các vũ khí hạt nhân trên thế giới. Họ đang giữ toàn bộ con tin hành tinh và họ có một yêu cầu đơn giản: đảo ngược trật tự hoạt động được chấp nhận hoặc đối mặt với việc xóa sổ (dấu ngoặc đơn là để duy trì ưu tiên của họ). Hệ thống mới được gọi là PSADME (dấu ngoặc đơn, phép trừ / phép cộng, phép chia / phép nhân, số mũ) và các biểu thức đánh giá từ phải sang trái:
a - b - c = a - (b - c) = a + c - b
Ngày trôi qua, và quá trình chuyển đổi đang diễn ra. Trong khi các nhà toán học và vật lý học đang bận rộn viết lại phương trình của họ, các nhà khoa học máy tính phải đối mặt với nhiệm vụ thay đổi thời trang trong đó các biểu thức toán học được giải thích bằng máy tính. Bạn thuộc nhóm lập trình phiến quân bí mật nhằm gây ra nhiều đau khổ cho các lớp phủ toàn cầu mới - và, tình cờ, bạn được The 2560 chọn ngẫu nhiên và được giao nhiệm vụ sản xuất chương trình tính toán điểm chuẩn.
Nhiệm vụ của bạn
Viết chương trình (hoặc hàm) lấy biểu thức toán học (số) làm đầu vào, tính toán biểu thức bằng PSADME làm thứ tự các thao tác và đưa ra kết quả. Biểu thức nên đánh giá từ phải sang trái, vì vậy
Để đơn giản, tất cả các số được cung cấp sẽ là số nguyên và các phép tính sẽ tạo ra kết quả số nguyên.
Quy tắc và tính điểm
- Chương trình nên chấp nhận độ dài đầu vào tối đa 128 ký tự - nếu ngôn ngữ / nền tảng của bạn có độ dài đầu vào tối đa thấp hơn, đó là một lý do có thể chấp nhận được.
- Sơ hở tiêu chuẩn bị cấm.
- Mã chiến thắng sẽ được chọn vào ngày 18 tháng 11 (4 tuần kể từ ngày đăng bài này).
- Vui lòng gửi mã không được coi là xứng đáng chơi gôn. Đây là về niềm vui. Nếu bạn có một cách thú vị để làm điều này nhưng không thể tự đánh golf nó (hoặc theo bản chất của phương pháp của bạn), bạn vẫn có thể đăng nó.
Như thường lệ, mã chiến thắng là mã có số byte ít nhất, với một số phần thưởng giá trị giải trí:
- -5 để tránh sử dụng các ký tự trong biểu thức được cung cấp: + , - , ( , ) , ^ , * , /
- -5 để thực hiện các phép tính mất hơn 5 phút (nhưng không quá 10 phút) để tính toán trên một máy tính tiêu chuẩn, mà không có phương pháp rõ ràng (sử dụng đồng hồ hoặc các vòng lặp không cần thiết); Mục đích là để thuyết phục các lớp phủ mới mà bạn không cố gắng phá vỡ tính toán của họ.
- - (5 + N) cho một tin nhắn tấn công trực tiếp (có độ dài N, không bao gồm khoảng trắng hàng đầu / dấu) về các thành viên của The 2560 được viết trong tầm nhìn rõ ràng trong mã của bạn, với một số giải thích nực cười về lý do tại sao nó cần phải được ở đó Nếu nó được gỡ bỏ, mã phải không hoạt động chính xác. Có, điểm miễn phí cho giá trị giải trí.
Ví dụ và giải thích
[program] 2 - 2 - 2
2
2 - (2 - 2) = 2
[program] (2 + 2 * 3 + 3) / 3 + 3
4
(4 * 6) / (3 + 3) = 4
[program] 3 + 2 + 1 ^ 3
216
(3 + 2 + 1) ^ 3 = 216
[program] -5^2
25
(-5) ^ 2 = 25
[program] 32 / 8 * 3 - 1
2
32 / (8 * (3 - 1)) = 32/16 = 2
P(SA)(DM)E.
1 - 3 + 4 = 1 - 7? Phải sang trái sẽ đề xuất như vậy, nhưng đó là sự bổ sung đi trước phép trừ, trái với PSADME, phải không?