カクロの組み合わせ
暗算はできないので、カクロパズルに苦労することがよくあります。カクロパズルでは、被害者が、1〜9の範囲内の異なる数字の合計を1〜45の範囲の別の数字と繰り返し計算する必要があります。多くの数字があります。たとえば、3つの数字から23を取得する方法を知りたい場合、答えは6 + 8 + 9だけです(これに精通している場合、これはKiller Sudokuと同じ考えです)。
場合によっては、数字1 が存在できないなど、他の情報があるため、2つの数字だけで8を達成するには、2 + 6と3 + 5しか使用できません(4 + 4は使用できないため、4 + 4は使用できません)明確ではありません)。あるいは、ソリューションで既に3を見つけている可能性があるため、3の数字の19のようなものは3 + 7 + 9でなければなりません。
あなたの仕事は、与えられた問題に対するすべての可能な解決策を厳密な順序で、厳密なレイアウトでリストするプログラムを書くことです。
入力
ソリューションは、入力を単一のASCII文字列として、stdin、コマンドライン引数、関数の引数、スタックに残された値、またはお気に入りの難解な言語が採用している狂気のいずれかを介して受け取ることができます。文字列は次の形式です
number_to_achieve number_of_numbers_required list_of_rejected_numbers list_of_required_numbers
最初の2つの引数は、それぞれ1から45および1から9の範囲の典型的な10進数の非負の非ゼロ整数です(小数点を使用すると無効な入力になります)。2つのリストは、繰り返しのない特定の順序、または空のリストの場合は「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を1行だけ出力する必要があります。
0
この質問の楽しみの入力部分の解析を意図的に行いました。これはコードゴルフであり、最短のソリューションが勝つかもしれません。