小町算
とりあえず、通常の演算優先順位で。全部で 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 になっているな。ダメすぎる。