Last active
December 21, 2015 01:48
-
-
Save AtsushiSakai/6230192 to your computer and use it in GitHub Desktop.
マーティン・ガードナーの最難問を解くPython Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
''' | |
マーティン・ガードナーの最難問を解くPython Script | |
解けるかな? 史上最難問10題 : ギズモード・ジャパン http://www.gizmodo.jp/2013/08/_so_you_th.html?utm_source=rss20&utm_medium=rss | |
ある数の粘度は、すべての桁を掛けて出る答えが1桁になるまでにかかる積算の回数で表す。 | |
それぞれの桁の数を掛け算して出るのが2番目の数で、そのまた全桁の数を掛けて出るのが3番目の数…こうして1桁の数が出るまでやり、 | |
出るまでに重ねた掛け算の回数を数えるのだ。 | |
例えば、77は粘度4だ。なぜなら1桁になるまで4回掛け算しなきゃならないからね(77-49-36-18-8)。 | |
粘度1で一番小さい数は10、粘度2で一番小さい数は25、粘度3で一番小さい数は39、粘度4の最小数は77だ。 | |
では、粘度5で一番小さい数は何? | |
Author : Atsushi Sakai | |
Copyright (c): 2013 Atsushi Sakai | |
License : Modified BSD Software License Agreement | |
''' | |
print "Martin Gardner Solver start!!" | |
maxNum=1000000 #粘度を計算する最大数 | |
result={} #各粘度最小値格納用変数 | |
#粘度を1から一つづつ計算 | |
for i in range(maxNum): | |
stri=str(i)#数字を文字列に変換 | |
vis=1#粘度 | |
#粘度の計算 | |
while 1: | |
num=1#桁数を掛け合わせた値 | |
for ii in range(len(stri)):#各桁を掛けあわせる | |
num*=int(stri[ii]) | |
#桁数のチェック | |
if len(str(num))<=1: | |
print str(i)+"'s viscosity is "+str(vis) | |
if ~result.has_key(vis): | |
result.setdefault(vis,i)#DBに各粘度の最小値を登録 | |
break | |
else: | |
vis+=1#粘度をインクリメント | |
stri=str(num)#もう一度各桁を掛け合わせる | |
#各粘度の最小値の結果を表示 | |
print "=====Viscosity Result=====" | |
print result.items() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment