Re:覆面算

ゼミが終わりちょっとだけ時間ができたので…

2008-04-10 - rindai87の日記
再び覆面算。
ただ順列を探すだけなので、再帰で書ける。
こういうのをぱっと思いつかないところが自分の実力なんだなぁと思った。

# -*- encoding : utf-8 -*-

import sys

numList = []

def make_numList(n=10, m=0, num=8):
    if m == num:
        arrange(numList)
    else:
        for x in range(n):
            if x in numList:
                continue
            numList.append(x)
            make_numList(n, m+1)
            numList.pop()

def arrange(numList):
    if numList[0] == 0 or numList[4] == 0:
        return False
    S = numList[0]
    E = numList[1]
    N = numList[2]
    D = numList[3]
    M = numList[4]
    O = numList[5]
    R = numList[6]
    Y = numList[7]
    cal(S,E,N,D,M,O,R,Y)

def cal(S,E,N,D,M,O,R,Y):
    if (S*1000+E*100+N*10+D)+(M*1000+O*100+R*10+E) == (M*10000+O*1000+N*100+E*10+Y):
        print " ",S,E,N,D
        print "+",M,O,R,E
        print "----------"
        print M,O,N,E,Y
        sys.exit()
    return False

def main():
    make_numList()

if __name__ == "__main__":
    main()

結果

E:\study\program\Python\4-15>python test.py
  9 5 6 7
+ 1 0 8 5
----------
1 0 6 5 2

再帰脳が欲しい!!!