Какуро Комбінації
Оскільки я не можу займатися розумовою арифметикою, я часто борюся з головоломкою Какуро , яка вимагає від жертви багаторазово розробити, які чіткі числа в діапазоні від 1 до 9 (включно) складають до іншого числа в діапазоні від 1 до 45, коли ви знаєте, як багато номерів є. Наприклад, якщо ви, можливо, хочете знати, як отримати 23 з 3-х чисел, єдина відповідь - 6 + 8 + 9. (Це та сама ідея, що і Killer Sudoku, якщо ви знайомі з цим).
Іноді у вас буде інша інформація, наприклад, що число 1 не може бути присутнім, таким чином, щоб досягти 8 лише в 2 числах, ви можете використовувати лише 2 + 6 і 3 + 5 (ви не можете використовувати 4 + 4, оскільки вони є не виразно). Як варіант, можливо, ви вже знайшли 3 у рішенні, і тому щось на зразок 19 у 3 числах має бути 3 + 7 + 9.
Ваше завдання - написати програму, в якій перераховані всі можливі рішення даної проблеми, у чіткому порядку, із суворим макетом.
Вхідні дані
Ваше рішення може отримувати вхідні дані як окремий рядок ASCII через stdin, аргумент командного рядка, аргумент функції, значення, залишене у стеку, або будь-яке безумство вашої улюбленої езотеричної мови. Рядок у формі
number_to_achieve number_of_numbers_required list_of_rejected_numbers list_of_required_numbers
Перші два аргументи є типовими базовими-10 невід'ємними ненульовими цілими числами у межах від 1 до 45 та від 1 до 9 відповідно (з використанням десяткової крапки буде недійсним введенням); два списки - це просто цифри, накреслені разом із відмежуванням у немає жодного конкретного замовлення без повторення або "0", якщо вони порожні списки. Не може бути загальних цифр між списками (крім 0). Розмежувачі - це одинарні пробіли.
Вихідні дані
Ваш вихід повинен починатися з рядка, який містить кількість можливих рішень. Ваша програма повинна роздрукувати розмежовані рядки розв’язків, відсортовані за кожною все більш значущою цифрою, де кожна цифра розміщується на такому місці, як це було б, якби ви перерахували числа від 1 до 9. Наведені нижче приклади, сподіваємось, це зрозуміють.
Якщо надано недійсний вхід, мені байдуже, що робить ваша програма, хоч я вважаю за краще, щоб це не занурило мій завантажувальний сектор.
Приклади
Для цього прикладу введення
19 3 0 0
Очікуваний результат буде
5
2 89
3 7 9
4 6 9
4 78
56 8
Зверніть увагу на пробіли замість кожного "пропущеного" номера, вони потрібні; Мене не турбує пробіли, які не мають номера після них (наприклад, про відсутніх 9-ти вище). Ви можете припустити, що все, що ви друкуєте, буде використовувати шрифт монопробілу. Зверніть увагу також на впорядкування, в якому спочатку перераховуються рішення з меншою найменшою цифрою, а потім ті, що мають найменшу наступну найменшу цифру тощо.
Ще один приклад, виходячи з цього вище
19 3 57 9
Очікуваний результат буде
2
2 89
4 6 9
Зауважте, що кожен результат містить 9, а жоден результат не містить 5 або 7.
Якщо немає рішень, наприклад
20 2 0 0
Тоді вам слід просто вивести один рядок з 0 на ньому.
0
Я навмисно зробив розбір вхідної частини із задоволенням цього питання. Це код-гольф, можливо найкоротше рішення виграє.