質問の小町算の類題をPythonで解いてみた。(2)

 質問の小町算の類題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 ー 効率的なループ実行のためのイテレータ生成関数

Pythonスタートブック

Pythonスタートブック

みんなのPython 第3版

みんなのPython 第3版

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)