Googleの入社試験の覆面算をPythonで解いてみました。(^_^;
WWWDOT - GOOGLE = DOTCOM
Googleといえば、PythonということでPythonで解いてみました。SendMoreMoneyのときは、Rubyの方がちょっと速かったのでこれもたぶんRubyの方がちょっと速いかも知れません。(^_^;
ちなみに、JavaScriptでは、0.6[sec]ぐらいでした。o(^-^)o
● WWWDOT-GOOGLE=DOTCOM.py
# coding: UTF-8 # WWWDOT-GOOGLE=DOTCOM.py import itertools from time import time def main(): tm = time() # Timer Start P = range(10) cnt = 0 for p in itertools.permutations(P,9): W,D,O,T,G,L,E,C,M = p if W*G*D==0: continue if G+D!=W and G+D+1!=W: continue if (E+M)%10!=T: continue WWWDOT = 100000*W+10000*W+1000*W+100*D+10*O+T GOOGLE = 100000*G+10000*O+1000*O+100*G+10*L+E DOTCOM = 100000*D+10000*O+1000*T+100*C+10*O+M if WWWDOT-GOOGLE!=DOTCOM: continue # チェックを潜り抜けたものだけを表示 cnt+=1 print("[%d]"%cnt) print(" WWWDOT %s"%WWWDOT) print("-GOOGLE %s"%GOOGLE) print("-------") print(" DOTCOM %s"%DOTCOM) print("Runtime : %.3f [sec]"%(time()-tm)) # Timer Stop & Disp if __name__ == '__main__': main()
●実行結果
[1] WWWDOT 777589 -GOOGLE 188103 ------- DOTCOM 589486 [2] WWWDOT 777589 -GOOGLE 188106 ------- DOTCOM 589483 Runtime : 2.106 [sec]
※参考URL
●SEND MORE MONEY in Python(2) - rscの日記
●SEND MORE MONEY in Ruby(2) - rscの日記
P.S.
ちょっと工夫したらかなり高速化しました。(^_^;
● WWWDOT-GOOGLE=DOTCOM1.py
# coding: UTF-8 # WWWDOT-GOOGLE=DOTCOM1.py import itertools from time import time def main(): tm = time() # Timer Start P = range(10) Q = range(1,10) cnt = 0 for q in itertools.permutations(Q,3): W,G,D = q if G+D!=W and G+D+1!=W: continue R = list(set(P)-set(q)) for p in itertools.permutations(R,6): O,T,L,E,C,M = p if (E+M)%10!=T: continue WWWDOT = 100000*W+10000*W+1000*W+100*D+10*O+T GOOGLE = 100000*G+10000*O+1000*O+100*G+10*L+E DOTCOM = 100000*D+10000*O+1000*T+100*C+10*O+M if WWWDOT-GOOGLE!=DOTCOM: continue # チェックを潜り抜けたものだけを表示 cnt+=1 print("[%d]"%cnt) print(" WWWDOT %s"%WWWDOT) print("-GOOGLE %s"%GOOGLE) print("-------") print(" DOTCOM %s"%DOTCOM) print("Runtime : %.3f [sec]"%(time()-tm)) # Timer Stop & Disp if __name__ == '__main__': main()
●実行結果
[1] WWWDOT 777589 -GOOGLE 188103 ------- DOTCOM 589486 [2] WWWDOT 777589 -GOOGLE 188106 ------- DOTCOM 589483 Runtime : 0.140 [sec]