PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 240 / 上位のサイコロ

6面のサイコロ(各面は1から6)を5個振って,上位3個の合計が 15 となる場合は 1111 通りある。 いくつか例をあげる。

  • D1,D2,D3,D4,D5 = 4,3,6,3,5
  • D1,D2,D3,D4,D5 = 4,3,3,5,6
  • D1,D2,D3,D4,D5 = 3,3,3,6,6
  • D1,D2,D3,D4,D5 = 6,6,3,3,3

12面のサイコロ(各面は1から12)を 20 個振って,上位 10 個の合計が 70 となる場合は何通りあるか。

Problem 240 - Project Euler


上位10個のサイコロの目は「1~12 を 10 個使って 70 を作る方法」として IntegerPartitions で求めます。コード中の upper がこれです。

upper の各要素にあわせて下位10個のサイコロの目(lower)を作って連結し,各数の登場回数を数えて多項係数の和を求めました。

上位10個の目の出方は9000通りくらいしかないので,あまり時間はかかりません。