SEND MORE MONEY in Python

 今度は、Javaで作ったSEND MORE MONEYのプログラムPythonに翻訳してみました。
 やっぱり、遅いですが、簡単に書けるところがいいです。特に、Rubyでも出来ますが、「s,e,n,d,m,o,r,y=p」と一発で代入できるところなんか凄くお気に入りです。o(^-^)o

●SendMoreMoney.py

# coding: UTF-8
# SendMoreMoney.py

import itertools
from time import time
tm=time()  # Timer Start 

def Hn(p,q,r,s,t):  # 10000*p+1000*q+100*r+10*s+t
  return 10*(10*(10*(10*p+q)+r)+s)+t

for p in itertools.permutations([0,1,2,3,4,5,6,7,8,9],8):
  s,e,n,d,m,o,r,y=p
  if s*m==0: continue  # (s==0||m==0)ならスキップ
  send  = Hn(0,s,e,n,d)
  more  = Hn(0,m,o,r,e)
  money = Hn(m,o,n,e,y)
  if send+more!=money: continue
  # チェックを潜り抜けたものだけを表示
  print("  "+str(send))
  print(" +"+str(more))
  print("-------")
  print(" "+str(money))
  print("")

tm=time()-tm  # Timer Stop
print("Runtime : %.3f [sec]"%tm)

●実行結果

  9567
 +1085
-------
 10652

Runtime : 5.267 [sec]

※参考URL
10.1. itertools ー 効率的なループ実行のためのイテレータ生成関数

SEND MORE MONEY C言語プログラム - rscの日記
SEND MORE MONEY(2) C++ - rscの日記
SEND MORE MONEY(3) C言語プログラム - rscの日記
SEND MORE MONEY JavaScriptプログラム - rscの日記
SEND MORE MONEY in Java - rscの日記
SEND MORE MONEY in Ruby - rscの日記
SEND MORE MONEY in Python(2) - rscの日記
SEND MORE MONEY in Ruby(2) - rscの日記
SEND MORE MONEY in Python(3) - rscの日記

みんなのPython 第3版

みんなのPython 第3版

Pythonスタートブック

Pythonスタートブック