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

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

史上難問の内の一つをMacbookに解かせてみた


解けるかな? 史上最難問10題 : ギズモード・ジャパン


こうゆうのを見ると、

ついプログラムを組んで解かせてみたくなります(笑)



数独ナンプレなど、

プログラムで解かせるにはちょっと面倒な問題が多いですが、

唯一、8番のマーティン・ガードナーの最難問は

簡単にプログラムが書けそうです。

ある数の粘度は、すべての桁を掛けて出る答えが1桁になるまでにかかる積算の回数で表す。それぞれの桁の数を掛け算して出るのが2番目の数で、そのまた全桁の数を掛けて出るのが3番目の数…こうして1桁の数が出るまでやり、出るまでに重ねた掛け算の回数を数えるのだ。
例えば、77は粘度4だ。なぜなら1桁になるまで4回掛け算しなきゃならないからね(77-49-36-18-8)。粘度1で一番小さい数は10、粘度2で一番小さい数は25、粘度3で一番小さい数は39、粘度4の最小数は77だ。では、粘度5で一番小さい数は何?


約30分ぐらいでこの問題を解くPythonスクリプトを書いてみました。



結論から言うと、各粘度で最も小さい値は1000000以下の値で下記の通りです。

粘度1:0
粘度2:25
粘度3:39
粘度4:77
粘度5:679 (答え)
粘度6:6788
粘度7:68889


今回作ったスクリプトは下記の通りです。

gist リンク:マーティン・ガードナーの最難問を解くPython Script



このスクリプトを動かすと、maxNum以下の値で

各粘度の最小値を、

記事冒頭のスクリーンショットのように表示します。



プログラムって本当に楽しいですね(笑)