Hatena::ブログ(Diary)

rscの日記

2017-03-02

孤独の7のCプログラムをPythonに翻訳してみた。

| 21:23

 孤独の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の日記

トラックバック - http://d.hatena.ne.jp/rsc96074/20170302/1488457434