Kombinasi Kakuro
Karena saya tidak dapat melakukan aritmatika mental, saya sering bergumul dengan Puzzle Kakuro , yang mengharuskan korban untuk berulang kali mencari angka yang berbeda di kisaran 1 hingga 9 (termasuk) jumlah ke angka lain di kisaran 1 hingga 45 ketika Anda tahu caranya banyak jumlahnya ada. Misalnya, jika Anda ingin tahu cara mendapatkan 23 dari 3 angka, satu-satunya jawaban adalah 6 + 8 + 9. (Ini adalah ide yang sama dengan Killer Sudoku jika Anda terbiasa dengan itu).
Kadang-kadang Anda akan memiliki informasi lain, seperti bahwa angka 1 tidak dapat hadir, sehingga untuk mencapai 8 hanya dalam 2 angka, Anda hanya dapat menggunakan 2 + 6 dan 3 + 5 (Anda tidak dapat menggunakan 4 + 4, karena mereka adalah tidak berbeda). Atau, mungkin Anda telah menemukan angka 3 dalam solusi, dan sekitar 19 dalam 3 angka harus 3 + 7 + 9.
Tugas Anda adalah menulis program yang mencantumkan semua solusi yang mungkin untuk masalah yang diberikan, dalam urutan yang ketat, dalam tata letak yang ketat.
Memasukkan
Solusi Anda dapat menerima input sebagai string ASCII tunggal baik melalui stdin, argumen baris perintah, argumen ke fungsi, nilai yang tersisa di tumpukan, atau apa pun kegilaan yang dipekerjakan oleh bahasa esoterik favorit Anda. String dalam bentuk
number_to_achieve number_of_numbers_required list_of_rejected_numbers list_of_required_numbers
2 argumen pertama adalah tipikal basis-10 non-negatif bilangan bulat nol di kisaran 1 hingga 45 dan 1 hingga 9 masing-masing (menggunakan titik desimal akan menjadi input yang tidak valid), kedua daftar hanyalah digit yang digantung bersama tanpa batas dalam tidak ada urutan tertentu tanpa pengulangan, atau '0' jika daftar kosong. Tidak boleh ada angka bersama di antara daftar (kecuali untuk 0). Pembatas adalah ruang tunggal.
Keluaran
Output Anda harus mulai dengan garis yang berisi sejumlah solusi yang mungkin. Program Anda harus mencetak solusi batas-batas yang dipisah-pisah yang diurutkan berdasarkan setiap digit yang semakin signifikan, di mana setiap digit ditempatkan pada posisi semestinya jika Anda mencantumkan angka dari 1 hingga 9. Contoh-contoh di bawah ini diharapkan akan membuat ini lebih jelas.
Jika input yang tidak valid diberikan, saya tidak peduli apa program Anda, meskipun saya lebih suka itu tidak nol sektor boot saya.
Contohnya
Untuk input contoh ini
19 3 0 0
Output yang diharapkan adalah
5
2 89
3 7 9
4 6 9
4 78
56 8
Perhatikan spasi di tempat masing-masing nomor "hilang", ini diperlukan; Saya tidak peduli tentang ruang yang tidak memiliki nomor setelah mereka (seperti angka 9 yang hilang di atas). Anda dapat mengasumsikan bahwa apa pun yang Anda cetak akan menggunakan font mono-space. Perhatikan juga urutannya, di mana solusi dengan digit terkecil terkecil didaftar pertama, dan kemudian yang dengan digit terkecil terkecil berikutnya, dll.
Contoh lain, berdasarkan itu di atas
19 3 57 9
Output yang diharapkan adalah
2
2 89
4 6 9
Perhatikan bahwa setiap hasil berisi angka 9, dan tidak ada hasil yang mengandung angka 5 atau 7.
Jika tidak ada solusi, misalnya
20 2 0 0
Maka Anda harus menampilkan satu baris dengan 0 di atasnya.
0
Saya sengaja membuat parsing bagian input dari kesenangan dari pertanyaan ini. Ini kode-golf, semoga solusi terpendek menang.