Điều này dựa trên một trò chơi mà một trong những giáo viên toán của tôi đã từng chơi ở trường cấp hai. Anh ta sẽ viết 5 số một chữ số ngẫu nhiên lên bảng, và sau đó là một số có hai chữ số ngẫu nhiên. Chúng tôi sẽ cố gắng tạo một phương trình sử dụng tất cả 5 số có một chữ số để tạo ra số có hai chữ số. Dưới đây là một số ví dụ với các giải pháp để giải thích điều này tốt hơn:
Input: Solution:
7 5 4 8 4 34 5*8-7+4/4 = 34
3 1 5 7 6 54 (7+3)*6-5-1 = 54
3 9 2 1 6 87 9*(2+1)*3+6 = 87
2 1 6 9 7 16 (9-7+6*1)*2 = 16
2 4 5 8 6 96 8*(5+6)+2*4 = 96
3 8 4 5 4 49 8*(4+4)-3*5 = 49
Thách thức này là viết một chương trình có thể tạo ra các phương trình như vậy cho một đầu vào nhất định. Đầu vào có thể được cung cấp thông qua dòng lệnh hoặc qua dấu nhắc. 5 số có một chữ số sẽ luôn được nhập trước (không theo thứ tự cụ thể), theo sau là số có hai chữ số. Chương trình sau đó sẽ in ra một phương trình giải pháp mà nó tìm thấy; bạn không phải xử lý các tình huống không có giải pháp. Hàm phải có khả năng sử dụng các hoạt động sau trong phương trình: cộng, trừ, nhân và chia. Nếu bạn muốn cho phép các hoạt động cơ bản bổ sung, điều đó tốt miễn là chúng vẫn duy trì tinh thần của thách thức (phủ định, lũy thừa và mô đun sẽ là những bổ sung tốt). Thứ tự các phép toán tuân theo các quy tắc toán học tiêu chuẩn, vì vậy sẽ cần có dấu ngoặc đơn để phân nhóm.
Các chương trình sẽ được tính điểm dựa trên độ dài mã (bao gồm cả khoảng trắng cần thiết). Lưu ý: phép chia phải chính xác, không được làm tròn hoặc cắt thành số nguyên gần nhất.