小町算 #2

ちょ、さいとうさんのチェック早い。ということで、とりあえず電卓版を晒しておく。あいかわらず整数演算なのでダメダメなんですが。

import sys
import operator

def join(a, b):
    return int(str(a) + str(b))

OPERATORS = {
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul,
    '/': operator.div,
    '' : join
}

def komachi2(numbers, result):
    calculated = (str(numbers[0]), numbers[0])
    return (exp[0] for exp in list_exp(calculated, numbers[1:]) if exp[1] == result)

def list_exp(calculated, numbers):
    if len(numbers) == 0:
        yield calculated
    else:
        for op, opfunc in OPERATORS.iteritems():
            new_calculated = (calculated[0] + op + str(numbers[0]), opfunc(calculated[1], numbers[0]))
            for exp in list_exp(new_calculated, numbers[1:]):
                yield exp

def main():
    for exp in komachi2(range(1, 9 + 1), 100):
        print exp

if __name__ == '__main__':
    main()

追記

整数演算以前のところで間違えているし。orz