017: 列車が到着する前に¶
難易度: ☆☆☆
問題¶
関数 unsolvable_ten_puzzle_combinations() を書いてください。
この関数は、通常ルールのテンパズルでは10を作れない数字の組み合わせをすべて返します。
テンパズルでは、4個の数字をすべて1回ずつ使い、四則演算と括弧で10を作ります。
この問題では、0から9までの数字から重複を許して4個を選びます。
同じ数字の並べ替えは同じ組み合わせとして扱います。
たとえば、1358 と 5381 は同じ組み合わせです。
組み合わせは、数字を昇順に並べた4桁の文字列で表します。 通常ルールでは、次の操作だけを許します。
- 数字を4個とも使う
- 数字の順番を自由に入れ替える
+、-、*、/を使う- 括弧を自由に使う
数字の結合は使いません。
たとえば、1 と 2 をつなげて 12 にしてはいけません。
累乗、平方根、小数点、階乗も使いません。
全715通りの組み合わせを調べ、10を作れる式が1つもない組み合わせだけを返してください。 このルールでは、該当する組み合わせは163個あります。
制約¶
unsolvable_ten_puzzle_combinations()は、昇順に並んだ4桁の文字列のリストを返します。- 返すリストも辞書順に並べます。
- 割り算を含むため、丸め誤差で10かどうかを判定しないでください。
main()では、見つかった組み合わせを1行に1つずつ出力してください。
例¶
>>> can_make_ten((1, 3, 5, 8))
True
>>> can_make_ten((1, 1, 1, 1))
False
>>> unsolved = unsolvable_ten_puzzle_combinations()
>>> len(unsolved)
163
>>> unsolved[:5]
['0000', '0001', '0002', '0003', '0004']
>>> unsolved[-3:]
['7888', '7999', '8899']
出力形式¶
main() は、unsolvable_ten_puzzle_combinations() が返す文字列を順に出力します。
個数は出力しません。