コンテンツにスキップ

017: 列車が到着する前に

ヒント / 解答

難易度: ☆☆☆

問題

関数 unsolvable_ten_puzzle_combinations() を書いてください。 この関数は、通常ルールのテンパズルでは10を作れない数字の組み合わせをすべて返します。

テンパズルでは、4個の数字をすべて1回ずつ使い、四則演算と括弧で10を作ります。 この問題では、0から9までの数字から重複を許して4個を選びます。 同じ数字の並べ替えは同じ組み合わせとして扱います。 たとえば、13585381 は同じ組み合わせです。

組み合わせは、数字を昇順に並べた4桁の文字列で表します。 通常ルールでは、次の操作だけを許します。

  • 数字を4個とも使う
  • 数字の順番を自由に入れ替える
  • +-*/ を使う
  • 括弧を自由に使う

数字の結合は使いません。 たとえば、12 をつなげて 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() が返す文字列を順に出力します。 個数は出力しません。