Thể hiện một số
Trở lại những năm 60, người Pháp đã phát minh ra chương trình trò chơi truyền hình "Des Chiffres et des Lettres" (Chữ số & Chữ cái). Mục tiêu của phần Chữ số của chương trình là đến gần nhất có thể với một số mục tiêu 3 chữ số nhất định, sử dụng một số số được chọn ngẫu nhiên. Các thí sinh có thể sử dụng các toán tử sau:
- ghép (1 và 2 là 12)
- ngoài ra (1 + 2 là 3)
- phép trừ (5 - 3 = 2)
- phép chia (8/2 = 4); phép chia chỉ được phép nếu kết quả là số tự nhiên
- phép nhân (2 * 3 = 6)
- dấu ngoặc đơn, để ghi đè lên quyền ưu tiên thường xuyên của hoạt động: 2 * (3 + 4) = 14
Mỗi số đã cho chỉ có thể được sử dụng một lần hoặc không.
Ví dụ: số mục tiêu 728 có thể được khớp chính xác với các số: 6, 10, 25, 75, 5 và 50 với biểu thức sau:
75 * 10 - ( ( 6 + 5 ) * ( 50 / 25 ) ) = 750 - ( 11 * 2 ) = 750 - 22 = 728
Trong thử thách mã này, bạn được giao nhiệm vụ tìm một biểu thức càng gần càng tốt với một số mục tiêu nhất định. Vì chúng ta đang sống ở thế kỷ 21, chúng tôi sẽ giới thiệu số lượng mục tiêu lớn hơn và số lượng nhiều hơn để làm việc hơn so với những năm 60 trở lại đây.
Quy tắc
- Toán tử được phép: nối, +, -, /, *, (và)
- Toán tử ghép không có ký hiệu. Chỉ cần ghép các số.
- Không có "nối ngược". 69 là 69 và không thể chia thành 6 và 9.
- Số mục tiêu là một số nguyên dương và có tối đa 18 chữ số.
- Có ít nhất hai số để làm việc và tối đa 99 số. Những số này cũng là số nguyên dương với tối đa 18 chữ số.
- Có thể (thực sự hoàn toàn có thể) rằng số mục tiêu không thể được biểu thị theo số lượng và toán tử. Mục tiêu là đến càng gần càng tốt.
- Chương trình sẽ kết thúc trong một thời gian hợp lý (một vài phút trên máy tính để bàn hiện đại).
- Tiêu chuẩn áp dụng.
- Chương trình của bạn có thể không được tối ưu hóa cho bộ kiểm tra trong phần "chấm điểm" của câu đố này. Tôi bảo lưu quyền thay đổi bộ kiểm tra nếu tôi nghi ngờ bất kỳ ai vi phạm quy tắc này.
- Đây không phải là một loại tiền mã hóa.
Đầu vào
Đầu vào bao gồm một dãy các số có thể được định dạng theo bất kỳ cách thuận tiện nào. Số đầu tiên là số mục tiêu. Các số còn lại là những số bạn nên làm việc để tạo thành số mục tiêu.
Đầu ra
Các yêu cầu cho đầu ra là:
- Nó phải là một chuỗi bao gồm:
- bất kỳ tập hợp con của các số đầu vào (ngoại trừ số mục tiêu)
- bất kỳ số lượng các nhà khai thác
- Tôi thích đầu ra là một dòng không có dấu cách, nhưng nếu bạn phải, bạn có thể thêm khoảng trắng và dòng mới khi bạn thấy phù hợp. Họ sẽ bị bỏ qua trong chương trình kiểm soát.
- Đầu ra phải là một biểu thức toán học hợp lệ.
Ví dụ
Để dễ đọc, tất cả các ví dụ này có một giải pháp chính xác và mỗi số đầu vào được sử dụng chính xác một lần.
Đầu vào: 1515483, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Đầu ra:111*111*(111+11+1)
Đầu vào: 153135, 1, 2, 3, 4, 5, 6, 7, 8, 9
Đầu ra:123*(456+789)
Đầu vào: 8888888888, 9, 9, 9, 99, 99, 99, 999, 999, 999, 9999, 9999, 9999, 99999, 99999, 99999, 1
Đầu ra:9*99*999*9999-9999999-999999-99999-99999-99999-9999-999-9-1
Đầu vào: 207901, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
Đầu ra:1+2*(3+4)*(5+6)*(7+8)*90
Đầu vào: 34943, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
Đầu ra: 1+2*(3+4*(5+6*(7+8*90)))
Nhưng đầu ra hợp lệ là:34957-6-8
Chấm điểm
Điểm phạt của một chương trình là tổng các lỗi tương đối của các biểu thức cho testset bên dưới.
Ví dụ: nếu giá trị mục tiêu là 125 và biểu thức của bạn cho 120, điểm phạt của bạn là abs (1 - 120/125) = 0,04.
Chương trình với mức thấp nhất số điểm (tổng cộng sai số tương đối thấp nhất) sẽ chiến thắng. Nếu hai chương trình kết thúc như nhau, lần gửi đầu tiên sẽ thắng.
Cuối cùng, testset (8 trường hợp):
14142, 10, 11, 12, 13, 14, 15
48077691, 6, 9, 66, 69, 666, 669, 696, 699, 966, 969, 996, 999
333723173, 3, 3, 3, 33, 333, 3333, 33333, 333333, 3333333, 33333333, 333333333
589637567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
8067171096, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199
78649377055, 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992
792787123866, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169
2423473942768, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 2000000, 5000000, 10000000, 20000000, 50000000
Câu đố tương tự trước đây
Sau khi tạo câu đố này và đăng nó lên hộp cát, tôi nhận thấy một thứ tương tự (nhưng không giống nhau!) Trong hai câu đố trước: ở đây (không có giải pháp) và ở đây . Câu đố này hơi khác một chút, vì nó giới thiệu toán tử ghép, tôi không tìm kiếm và khớp chính xác và tôi muốn xem các chiến lược để tiến gần đến giải pháp mà không cần vũ lực. Tôi nghĩ đó là một thách thức.