def number(theDigs) : #global depth if len(theDigs) == 0 : #print depth return 1 s = 0 for digs2 in powerset(theDigs) : if digs2: count = 0 for digs in allArrangements(digs2) : num = digitsToNum(digs) if isPrime(num) : count += 1 if count > 0 : #for f in range(depth) : # print " ", #print digs, num #depth.append(num) next = [x for x in theDigs if x not in digs] #print num, next s += count * number(next) #depth = depth[:-1] return s
for a3 in range(a2+1, 47) : for a4 in range (a3+1, 47) : for a5 in range(a4+1, 47) : for a6 in range(a5+1, 47) : for a7 in range(a6+1, 47) : bad = False s = [a1,a2,a3,a4,a5,a6,a7] i = 1 while (2*i + 1 <= len(s)) : if sum(s[:i+1]) < sum(s[-i:]) : bad = True break i += 1 if bad : continue sums = set([]) for k in powerset(s)[1:-1] : p = sum(k) if p in sums : bad=True break else : sums.add(p) else : l = sum(s) print s if l < minsum : minsum = l best = s print best
# Find the number of lines in Euler105.txt that obey the special sumset property from useful import powerset total = 0 for line in open("Euler105.txt") : s = map(int, line.split(",")) print s,"", bad = False for subs in powerset(s)[1:-1] : g = set(subs) comp = list(set(s) - g) for altSet in powerset(comp)[1:] : diff = (sum(g) - sum(altSet)) if diff == 0 or float(len(g) - len(altSet)) / diff < 0 : print g, altSet, print "No!" bad = True break if bad : break else : print "Yes!", k = sum(s) total += k print k print total