def naive_transition_matrix( n ): states = [ tuple(state) for state in euler.permutations( range(1,n+1) ) ] m = len(states) mat = numpy.zeros( (m,m) ) state2id = dict(zip(states, range(len(states)))) id2state = dict(zip(range(len(states)), states)) choices = list(euler.choose(range(n), 2)) for u in states[1:]: for i, j in choices: v = list(u) v[i], v[j] = v[j], v[i] v = tuple(v) mat[ state2id[u], state2id[v] ] = 1.0/len(choices) return numpy.matrix(mat)
seq = [[x[i] for i in y] for y in lst] return seq def clockwise(seq): for i in range(1, 5): if seq[0][0] >= seq[i][0]: return False return True def flatten(seq): lst = "" for i in seq: for j in i: lst += str(j) return lst ran = range(10) ran.reverse() ran = [i + 1 for i in ran] for i, v in enumerate(euler.permutations(ran)): ss = solset(v) sums = [sum(i) for i in ss] if alleq(sums) and clockwise(ss): print v, ss, sums, clockwise(ss) gon = flatten(ss) if len(gon) == 16: print gon
seq = [[x[i] for i in y] for y in lst] return seq def clockwise(seq): for i in range(1, 5): if seq[0][0] >= seq[i][0]: return False return True def flatten(seq): lst = '' for i in seq: for j in i: lst += str(j) return lst ran = range(10) ran.reverse() ran = [i + 1 for i in ran] for i, v in enumerate(euler.permutations(ran)): ss = solset(v) sums = [sum(i) for i in ss] if alleq(sums) and clockwise(ss): print v, ss, sums, clockwise(ss) gon = flatten(ss) if len(gon) == 16: print gon
import euler for i in range(9): print '----' lst = range(1, i + 2) lst.reverse() for perm in euler.permutations(lst): v = euler.seqToInt(perm) if euler.isprime(v): print v break
import euler r = xrange(1, 1000001) s = None for i, v in zip(r, euler.permutations(range(10))): if i == 1000000: s = v break s = [str(i) for i in s] s = ''.join(s) print s
import euler r = xrange(1,1000001) s = None for i,v in zip(r,euler.permutations(range(10))): if i == 1000000: s = v break s = [ str(i) for i in s ] s = ''.join(s) print s
import euler for i in range(9): print '----' lst = range(1,i+2) lst.reverse() for perm in euler.permutations(lst): v = euler.seqToInt(perm) if euler.isprime(v): print v break
#!/usr/bin/env python # Copyright (c) 2008 by Steingrim Dovland <*****@*****.**> from itertools import count, izip from euler import permutations, findfirst # A permutation is an ordered arrangement of objects. For example, 3124 # is one possible permutation of the digits 1, 2, 3 and 4. If all of the # permutations are listed numerically or alphabetically, we call it # lexicographic order. The lexicographic permutations of 0, 1 and 2 are: # # 012 021 102 120 201 210 # # What is the millionth lexicographic permutation of the digits 0, 1, 2, # 3, 4, 5, 6, 7, 8 and 9? p = permutations('0123456789') x = findfirst(izip(count(1), p), lambda x: x[0] == 1*1000*1000) print ''.join(x[1])
for j in impl(i,digits-1): yield [i] + j for i in impl(minv,digits): yield euler.seqToInt(i) res = [] for i in set(increasingIter(0,6)): fc = factorialChain(i) fcl = len(fc)-1 if fcl == 60: res.append( i ) final = [] for r in res: s = set() for p in euler.permutations(euler.intToSeq(r)): v = euler.seqToInt(p) if factorialChainLength(v) == 60: s.add(v) for item in s: final.append(item) cnt = 0 final = list(set(final)) final.sort() for item in final: cnt += 1 print cnt,item,factorialChainLength(item) print 'soln',cnt
import euler lst = [] for a in range(1,8): for b in range(a+1,9): lst.append( (range(0,a),range(a,b),range(b,9)) ) #for i in lst: # print i def seqToInt( seq ): return int( ''.join( [ str(i) for i in seq ] ) ) res = set() for i in euler.permutations(range(1,10)): for a,b,c in lst: a = seqToInt([ i[j] for j in a ]) b = seqToInt([ i[j] for j in b ]) c = seqToInt([ i[j] for j in c ]) if a*b == c: res.add(c) print a,b,c, '-', list(res) print res
def int_permutations(x): return map(int, map(''.join, permutations(str(x))))
for i in impl(minv, digits): yield euler.seqToInt(i) res = [] for i in set(increasingIter(0, 6)): fc = factorialChain(i) fcl = len(fc) - 1 if fcl == 60: res.append(i) final = [] for r in res: s = set() for p in euler.permutations(euler.intToSeq(r)): v = euler.seqToInt(p) if factorialChainLength(v) == 60: s.add(v) for item in s: final.append(item) cnt = 0 final = list(set(final)) final.sort() for item in final: cnt += 1 print cnt, item, factorialChainLength(item) print 'soln', cnt
import euler lst = [] for a in range(1, 8): for b in range(a + 1, 9): lst.append((range(0, a), range(a, b), range(b, 9))) #for i in lst: # print i def seqToInt(seq): return int(''.join([str(i) for i in seq])) res = set() for i in euler.permutations(range(1, 10)): for a, b, c in lst: a = seqToInt([i[j] for j in a]) b = seqToInt([i[j] for j in b]) c = seqToInt([i[j] for j in c]) if a * b == c: res.add(c) print a, b, c, '-', list(res) print res