Problem 32

31についてはDPなり再帰なりなんなりで解けるけど,汚い解答だったので飛ばす.綺麗なのは見つけたけど…苦手みたいだなぁ.

def pan(a,b):
    t = str(a)+str(b)+str(a*b)
    if '0' in t:
        return 0
    if len(t) == len(set(t)) == 9:
        return a*b
    return 0

print sum(set([pan(a,b) for a in xrange(50) for b in xrange(2000)]))

さくっと求めた.

print sum(set([a*b for a in xrange(50) for b in xrange(2000) 
if not( '0' in str(a) or '0' in str(b) or '0' in str(a*b)) and 
len(str(a)+str(b)+str(a*b)) == 9 == len(set(str(a)+str(b)+str(a*b)))]))

どうせなので関数無しで.
今日から忙しいのでまたしばらく放置になると思われ.