今度は、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の日記
- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/08/25
- メディア: 単行本
- 購入: 1人 クリック: 13回
- この商品を含むブログ (41件) を見る
- 作者: 辻真吾
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/24
- メディア: 大型本
- 購入: 19人 クリック: 199回
- この商品を含むブログ (59件) を見る