小町算

とりあえず、通常の演算優先順位で。全部で 303 個の式ができるという結果が出ました。まぁ、eval のおかげだし、Brute Force なんだけど。
しかし、最近の計算機だとこれを10秒ぐらいで計算してしまうんだから、なかなか。

import sys
import re

OPERATORS = '+ - * / '.split(' ')

def komachi(numbers, result):
    return (exp for exp in list_exp(numbers) if eval(exp) == result)

def list_exp(numbers):
    if len(numbers) == 1:
        yield str(numbers[0])
    else:
        for op in OPERATORS:
            for exp in list_exp(numbers[1:]):
                yield str(numbers[0]) + op + exp

        
def main():
    pat = re.compile(r'([^\d])')
    n = 0
    for exp in komachi(range(1, 10), 100):
        print pat.sub(r' \1 ', exp) + ' = 100'
        n += 1
    print 'total %d expressions' % n

if __name__ == '__main__':
    main()

追記

冷静に考えると全部整数演算になってしまっていて、1/2 -> 0 になっているな。ダメすぎる。