project-euler

https://projecteuler.net/
Log | Files | Refs | README

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())