10 Puzzleを解くプログラムをPythonで作ってみた。

 Googleと言えば、Pythonということで、昨日、Javaで作ったプログラムをPythonに翻訳してみました。やっぱり、楽だね。(^_^;
 ただし、プログラム名を10Puzzleに改名しました。また、同じものを含む順列の場合、実行結果が重複してしまうので、発見した解を記録しておいて既出のものは表示しないようにしました。(^_^;

● 10Puzzle.py

# coding: UTF-8
# 10Puzzle.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 = '1158'
    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)"]
    sAns = ""    # 発見した解の記録用
    for o in itertools.product(OPR,repeat=3):   # o loop
        for n in itertools.permutations(NUM):   # 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()

●実行結果

8/(1-1/5)=10
Runtime : 0.253 [sec]

※参考URL
10.1. itertools ー 効率的なループ実行のためのイテレータ生成関数
文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ - bkブログ
10 Puzzleを解くプログラムをJavaで作ってみた。
10 Puzzleを解くプログラムをPythonで作ってみた。 (2)
10 Puzzleを解くプログラムをPythonで作ってみた。 (3)

Pythonスタートブック

Pythonスタートブック

みんなのPython 第3版

みんなのPython 第3版

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

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