前回のプログラムを0000〜9999まで、すべての解を求めるように書き直してみました。約3分ぐらいかかるようです。
括弧付けで外側の括弧は初めから外してみました。(^_^;
ちなみに、IDEとして、PyScripterを使いました。
● 10PuzzleAll.py
# coding: UTF-8 # 10PuzzleAll.py import itertools from time import time def delSpace(s): return(s.replace(" ","")) def delBracket(s): r = s[:] iLen = len(r) for i in range(0,iLen): if r[i]!='(': continue c = 0 for j in range(i+1,iLen): if r[j]=='(': c+=1 elif r[j]==')': c-=1 if c>=0: continue r = r[:i]+' '+r[i+1:j]+' '+r[j+1:] # ()を外す if eval(s)!=eval(r): r = r[:i]+'('+r[i+1:j]+')'+r[j+1:] # 駄目なら戻す break return(delSpace(r)) def main(): tm=time() # Timer Start NUM = '0123456789' OPR = '+-*/' BRACKET = [ "%s.0%s(%s.0%s(%s.0%s%s.0))", # 外側の()を外してみた "%s.0%s((%s.0%s%s.0)%s%s.0)", "(%s.0%s%s.0)%s(%s.0%s%s.0)", "(%s.0%s(%s.0%s%s.0))%s%s.0", "((%s.0%s%s.0)%s%s.0)%s%s.0"] for m in itertools.product(NUM,repeat=4): # m loop if not(m[0]<=m[1]<=m[2]<=m[3]) : continue print("<<--- "+"".join(m)+" --->>") sAns = "" # 発見した解の記録用 for o in itertools.product(OPR,repeat=3): # o loop for n in itertools.permutations(m): # n loop for b in BRACKET: # b loop sExpr = b % (n[0],o[0],n[1],o[1],n[2],o[2],n[3]) try: if eval(sExpr)==10.0: sExpr = delBracket(sExpr).replace('.0', '') if sAns.find(sExpr)==-1: # 既出でなければ表示 print(sExpr+'=10') sAns += sExpr+'|' # 発見した解を記録 except: continue tm=time()-tm # Timer Stop print("Runtime : %.3f [sec]"%tm) if __name__ == '__main__': main()
●実行結果
<<--- 0000 --->> <<--- 0001 --->> <<--- 0002 --->> …(省略)… <<--- 8999 --->> 8+(9+9)/9=10 (9+9)/9+8=10 <<--- 9999 --->> (9+9*9)/9=10 (9*9+9)/9=10 Runtime : 183.574 [sec]
※参考URL
●10 Puzzleを解くプログラムをJavaで作ってみた。
●10 Puzzleを解くプログラムをPythonで作ってみた。
●10 Puzzleを解くプログラムをPythonで作ってみた。 (3)
- 作者: 辻真吾
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/24
- メディア: 大型本
- 購入: 19人 クリック: 199回
- この商品を含むブログ (59件) を見る
- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/08/25
- メディア: 単行本
- 購入: 1人 クリック: 13回
- この商品を含むブログ (41件) を見る
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (30件) を見る