ベトナムの8歳向け算数問題をpythonで解いてみた。

 「ベトナムの8歳向け算数問題」をpythonで解いてみました。(^_^;
 8歳の算数だから割り算の結果が小数や分数になるのは除いてみましたが、それでも答えは複数あるようです。(^_^;
 ちなみに、途中に小数や分数が含まれていいなら答えはもっとたくさんあるようです。(^_^;

● mathsPuzzle4v8yo.py

# coding: UTF-8
# mathsPuzzle4v8yo.py

import itertools
for p in itertools.permutations(range(1,10)):
  s = "%d+13*%d/%d.0+%d+12*%d-%d-11+%d*%d/%d.0-10==66"%p
  a,b,c,d,e,f,g,h,i = p
  if 13*b/c!=13.0*b/c: continue    # 割り算が小数や分数になるものを除外
  if g*h/i!=1.0*g*h/i: continue    #   〃
  if eval(s):
    print s.replace('.0','')

●実行結果

3+13*2/1+5+12*4-7-11+8*9/6-10==66
3+13*2/1+5+12*4-7-11+9*8/6-10==66
5+13*2/1+3+12*4-7-11+8*9/6-10==66
5+13*2/1+3+12*4-7-11+9*8/6-10==66
5+13*3/1+7+12*2-6-11+8*9/4-10==66
5+13*3/1+7+12*2-6-11+9*8/4-10==66
5+13*4/1+9+12*2-7-11+3*8/6-10==66
5+13*4/1+9+12*2-7-11+8*3/6-10==66
5+13*9/3+6+12*2-1-11+7*8/4-10==66
5+13*9/3+6+12*2-1-11+8*7/4-10==66
6+13*3/1+9+12*2-5-11+7*8/4-10==66
6+13*3/1+9+12*2-5-11+8*7/4-10==66
6+13*9/3+5+12*2-1-11+7*8/4-10==66
6+13*9/3+5+12*2-1-11+8*7/4-10==66
7+13*3/1+5+12*2-6-11+8*9/4-10==66
7+13*3/1+5+12*2-6-11+9*8/4-10==66
9+13*3/1+6+12*2-5-11+7*8/4-10==66
9+13*3/1+6+12*2-5-11+8*7/4-10==66
9+13*4/1+5+12*2-7-11+3*8/6-10==66
9+13*4/1+5+12*2-7-11+8*3/6-10==66

P.S.
 最近はPCが速くなったのであまり気になりませんが、eval()の遅さが気になるならeval()抜きで作ると次のようになります。
● mathsPuzzle4v8yo1.py

# coding: UTF-8
# mathsPuzzle4v8yo1.py

import itertools
s = '%d+13*%d/%d+%d+12*%d-%d-11+%d*%d/%d-10==66'
for p in itertools.permutations(range(1,10)):
  a,b,c,d,e,f,g,h,i = p
  if 13*b/c!=13.0*b/c: continue
  if g*h/i!=1.0*g*h/i: continue
  if a+13.0*b/c+d+12*e-f-11+1.0*g*h/i-10==66:
    print s%p

Pythonスタートブック

Pythonスタートブック