Kết hợp Kakuro
Vì tôi không thể làm số học tinh thần, tôi thường phải vật lộn với Câu đố Kakuro , đòi hỏi nạn nhân phải liên tục tìm ra các số khác nhau trong phạm vi từ 1 đến 9 (bao gồm) tổng hợp với một số khác trong phạm vi từ 1 đến 45 khi bạn biết cách Có nhiều số. Ví dụ: nếu bạn có thể muốn biết cách lấy 23 từ 3 số, câu trả lời duy nhất là 6 + 8 + 9. (Đây là ý tưởng tương tự như Killer Sudoku nếu bạn quen với điều đó).
Đôi khi bạn sẽ có thông tin khác, chẳng hạn như số 1 không thể có mặt, do đó để đạt được 8 chỉ trong 2 số, bạn chỉ có thể sử dụng 2 + 6 và 3 + 5 (bạn không thể sử dụng 4 + 4, vì chúng là không phân biệt). Ngoài ra, có thể là bạn đã tìm thấy số 3 trong giải pháp, và do đó, một số như 19 trong 3 số phải là 3 + 7 + 9.
Nhiệm vụ của bạn là viết một chương trình liệt kê tất cả các giải pháp có thể cho một vấn đề nhất định, theo một trật tự nghiêm ngặt, trong một bố cục nghiêm ngặt.
Đầu vào
Giải pháp của bạn có thể nhận các đầu vào dưới dạng một chuỗi ASCII duy nhất thông qua stdin, đối số dòng lệnh, đối số cho hàm, giá trị còn lại trên ngăn xếp hoặc bất kỳ điều gì điên rồ mà ngôn ngữ bí truyền yêu thích của bạn sử dụng. Chuỗi có dạng
number_to_achieve number_of_numbers_required list_of_rejected_numbers list_of_required_numbers
Hai đối số đầu tiên là các số nguyên không âm 0 không âm cơ bản điển hình trong các phạm vi từ 1 đến 45 và 1 đến 9 tương ứng (sử dụng dấu thập phân sẽ là đầu vào không hợp lệ), hai danh sách chỉ là các chữ số được xâu chuỗi lại với nhau mà không phân định không có thứ tự cụ thể nào mà không lặp lại hoặc '0' nếu chúng là danh sách trống. Không thể có chữ số chung giữa các danh sách (ngoại trừ 0). Các dấu phân cách là không gian đơn.
Đầu ra
Đầu ra của bạn phải bắt đầu bằng một dòng chứa số lượng giải pháp có thể. Chương trình của bạn phải in ra các giải pháp phân cách ngắt dòng được sắp xếp theo từng chữ số ngày càng có ý nghĩa, trong đó mỗi chữ số được đặt ở vị trí sẽ là nếu bạn liệt kê các số từ 1 đến 9. Các ví dụ dưới đây hy vọng sẽ làm cho điều này rõ ràng hơn.
Nếu một đầu vào không hợp lệ được cung cấp, tôi không quan tâm chương trình của bạn làm gì, mặc dù tôi muốn nó không phải là khu vực khởi động của tôi.
Ví dụ
Đối với ví dụ này đầu vào
19 3 0 0
Sản lượng dự kiến sẽ là
5
2 89
3 7 9
4 6 9
4 78
56 8
Lưu ý các khoảng trắng thay cho mỗi số "thiếu", những số này là bắt buộc; Tôi không bận tâm về những không gian không có số sau chúng (chẳng hạn như số 9 bị thiếu ở trên). Bạn có thể giả định rằng bất cứ điều gì bạn đang in sẽ sử dụng phông chữ đơn không gian. Cũng lưu ý thứ tự, theo đó các giải pháp có chữ số nhỏ nhất nhỏ hơn được liệt kê trước, và sau đó là các giải pháp có chữ số nhỏ nhất tiếp theo, v.v.
Một ví dụ khác, dựa trên điều đó
19 3 57 9
Sản lượng dự kiến sẽ là
2
2 89
4 6 9
Lưu ý rằng mọi kết quả đều chứa 9 và không có kết quả nào chứa 5 hoặc 7.
Nếu không có giải pháp, ví dụ
20 2 0 0
Sau đó, bạn chỉ nên xuất một dòng duy nhất có 0 trên đó.
0
Tôi đã cố tình phân tích phần đầu vào của niềm vui của câu hỏi này. Đây là mã golf, có thể là giải pháp ngắn nhất giành chiến thắng.