Project Euler 32
32番
パンデジタルといって1から9までの数字を1回ずつ使って掛け算の式を成立させる問題
できたもののイマイチ…
今回は順列を求めるのにitertoolsを使った
またリストやタプルの数字列を一つの数値にするためにreduceを使った
例 reduce(lambda x,y: x*10+y, [1,2,3]) →123
#!/usr/bin/env python # -*- coding: utf-8 -*- import itertools num_list = [1,2,3,4,5,6,7,8,9] ans = 0 ans_list = [] #積は4桁しかない #掛けられる数>掛ける数としたとき、掛けられる数は4桁か3桁 for i in [4,3]: now_num_list = num_list[:] for left_list in itertools.permutations(num_list,i): now_num_list = num_list[:] for k in left_list: now_num_list.remove(k) for right_list in itertools.permutations(now_num_list,5-i): new_now_num_list = now_num_list[:] for k in right_list: new_now_num_list.remove(k) answer = reduce(lambda x,y:10*x+y,left_list) * reduce(lambda x,y:10*x+y,right_list) if sorted(map(lambda x:int(x),list(str(answer)))) == new_now_num_list and not answer in ans_list: ans_list.append(answer) ans += answer print ans