Euler project 52(Python 0.087561)

問題から導きだされる条件
1. 1x, 2x, 3x, 4x, 5x, 6xが全て同じ桁になるとき、一番大きな桁は1である。
(二番目に大きな桁は6以下だがここでは無視できる。)
2. 一番大きな桁は、2番目に大きな桁は繰り上がりの影響で最低6種類になる。
つまり、6桁以上になる。その上で、6種類の数を含んだ6桁の最小の値は123456となる。

したがって、123456から始めて、1x, 2x, 3x, 4x, 5x, 6xが全て同じ桁である最小の数字xを
探索すればよい。

まずxの持つ値をセットで管理して、6種類以上の数を含むかどうか判定。
次に、2x, 3x, 4x, 5x, 6xをセットで管理する。
それぞれが、元のxと同じ種類の数を含むか判定する。
同じであれば、0が返ってくる。
同じでなければ、次の数字で試す。

#-*- coding:utf-8 -*-
from datetime import datetime

def Euler52():
	count = 123456
	while True:
		origin = set(list(str(count)))
		if len(origin) >= 6:
			Coef = [set(list(str(count * i))) for i in xrange(2,6)]
			total = sum([len(origin - Coef[i]) for i in xrange(4)])
			if total == 0:
				return count
		count+=1

def main():
	start = datetime.now()
	answer = Euler52()
	end = datetime.now()
	print end - start, answer

if __name__ == "__main__":
	main()
#実行結果
0:00:00.087561 142857