孤独の7のCプログラムをPythonに翻訳してみました。(^_^;
遅くなりそうなので、商の十の位が0になるのと割る数の百の位が1になることを使いました。(^_^;
□7□□□ ------------------ □□□)□□□□□□□□ □□□□ ------------ □□□ □□□ ---------- □□□□ □□□ -------------- □□□□ □□□□ ---------- 0
● Solitary7.py
# coding: UTF-8 # Solitary7.py import itertools from time import time def Digit(n): return len(str(n)) if n else 0 def getNum(x,n): return (x//n)%10 def printResult(li): quo,dvs,dvd,a,b,c,tmp=li print(" %d"%quo) print(" ---------") print("%d)%d"%(dvs,dvd)) print(" %d"%(dvs*a)) print(" -----") print(" %d"%tmp[1]) print(" %d"%(dvs*7)) print(" ----") print(" %d"%tmp[2]) print(" %d"%(dvs*b)) print(" ------") print(" %d"%tmp[4]) print(" %d"%(dvs*c)) print(" ----") print(" 0") print("") def main(): tm = time() # Timer Start cnt = 0 for p in itertools.product(range(0,10),repeat=3): a,b,c = p if a==0: continue for dvs in range(100,200): quo = 10000*a+7000+100*b+c dvd = quo*dvs if Digit(dvs*a)!=4: continue if Digit(dvs*7)!=3: continue if Digit(dvs*b)!=3: continue if Digit(dvs*c)!=4: continue tmp = [0]*5; k = [2,3,2,3,0] rem = dvd//100000 for i in range(5): tmp[i] = rem*10+getNum(dvd,10**(4-i)) rem = tmp[i]%dvs if Digit(rem)!=k[i]: break else: # チェックを潜り抜けたものだけを出力 printResult([quo,dvs,dvd,a,b,c,tmp]) print("Runtime : %.3f [sec]"%(time()-tm)) # Timer Stop & Disp if __name__ == '__main__': main()
●実行結果
97809 --------- 124)12128316 1116 ----- 968 868 ---- 1003 992 ------ 1116 1116 ---- 0 Runtime : 0.125 [sec]
※参考URL
●孤独の7 - rscの日記
●孤独の7 (2) - rscの日記