読者です 読者をやめる 読者になる 読者になる

PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 24 / 辞書式順列

順列とはモノの順番つきの並びのことである。たとえば3124は数1, 2, 3, 4の順列である。0と1と2の順列を辞書順に並べると012, 021, 102, 120, 201, 210になる。

0, 1, 2, 3, 4, 5, 6, 7, 8, 9からなる順列を辞書式に並べたときの100万番目はいくつか?

Problem 24 - Project Euler

順列は Permutations で作れます。

こんな方法を考えました。

  1. Permutations で順列を作る
  2. Take で100万番目を取り出す
  3. FromDigits で数に直す

ところがやってみるとうまくいかない。Take で取り出すとリストのリストになってしまい,FromDigits がうまく働きません。

いい手が思いつかなかったので,First で子リストを取り出して FromDigits に渡すことにしました。

また,Flatten を使えばネストしたリストを平坦化できることがわかりました。First をこれに変えます。

追記(2017/04/20)

もう一度考えてみたら Take も Flatten もいらないですね。リストの10^6番目を直接指定して解きました。