Euler_98.py (1199B)
1 import sys 2 import math 3 import re 4 from sets import Set 5 from datetime import datetime 6 7 def find_all_anagrams(words): 8 anagram_sets = [] 9 10 for word in words: 11 word_is_anagram = False 12 for anagram_set in anagram_sets: 13 if sorted(str(word)) == sorted(str(anagram_set[0])): 14 anagram_set.append(word) 15 word_is_anagram = True 16 break 17 18 if not word_is_anagram: 19 anagram_set = [] 20 anagram_set.append(word) 21 anagram_sets.append(anagram_set) 22 23 anagrams = [] 24 25 for anagram_set in anagram_sets: 26 if len(anagram_set) > 1: 27 anagrams.append(anagram_set) 28 29 return anagrams 30 31 def match_anagrams_with_squares(anagram_sets, square_sets): 32 33 a = datetime.now() 34 35 with open('files/p098_words.txt') as f: 36 words = re.split('","',f.read()[1:-1]) 37 38 squares = [] 39 40 for i in range(100000): 41 if len(str(i**2)) == len(Set([c for c in str(i**2)])): 42 squares.append(i**2) 43 44 match_anagrams_with_squares(find_all_anagrams(words), find_all_anagrams(squares)) 45 46 delta = datetime.now() - a 47 48 print "total time: " + str(delta.total_seconds())