質問の小町算の類題をPythonで解いてみました。残念ながら、解は見つかりませんでした。(^_^;
ちなみに、1回目のtryで、括弧が有効か調べて有効なものだけ演算子のループに進むようにしました。
●KomachiSim2.py
# coding: UTF-8 # KomachiSim2.py import itertools from time import time tm=time() # Timer Start lst=[[x,y,z,4-x-y-z] for x in range(5) for y in range(5-x) for z in range(5-x-y)] cnt=0 for f in lst: for b in lst: expr="%s5.0%s+%s5.0%s+%s5.0%s+%s5.0%s" % ( "("*f[0],")"*b[0], "("*f[1],")"*b[1], "("*f[2],")"*b[2], "("*f[3],")"*b[3]) try: dummy=eval(expr) except: continue for o in itertools.product('+-*/',repeat=3): expr="%s5.0%s%s%s5.0%s%s%s5.0%s%s%s5.0%s" % ( "("*f[0],")"*b[0],o[0], "("*f[1],")"*b[1],o[1], "("*f[2],")"*b[2],o[2], "("*f[3],")"*b[3]) while expr.find('(5.0)')!=-1: expr=expr.replace('(5.0)','5.0') #print(expr.replace('.0','')) try: if eval(expr)==8: print(expr.replace('.0','')) cnt+=1 except: pass if cnt==0: print("Not Found.") tm=time()-tm # Timer Stop print("Runtime : %.3f [sec]"%tm)
●実行結果
Not Found. Runtime : 1.095 [sec]
※参考URL
●10.1. itertools ー 効率的なループ実行のためのイテレータ生成関数
- 作者: 辻真吾
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/24
- メディア: 大型本
- 購入: 19人 クリック: 199回
- この商品を含むブログ (59件) を見る
- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/08/25
- メディア: 単行本
- 購入: 1人 クリック: 13回
- この商品を含むブログ (41件) を見る
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (30件) を見る