euler/e024.py
Correl Roush fb13b3ce62 Problem 024
git-svn-id: file:///srv/svn/euler@56 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
2010-04-29 03:25:47 +00:00

29 lines
887 B
Python

import math
def lexicographic_permutation(list, position):
items = len(list)
list = sorted(list)
p = []
position = position - 1
while len(p) < items:
index = 0
# Find the next index to pop
l = len(list) - 1
f = math.factorial(l) if l else 0
while position and position >= f:
position = position - f
index = index + 1
p.append(list.pop(index))
return p
if __name__ == '__main__':
print 'Testing permutations of 0..2:'
list = [str(i) for i in [0, 1, 2]]
for i in range(1, math.factorial(len(list)) + 1):
p = lexicographic_permutation(list, i)
print '\tPermutation', i, ''.join(p)
list = [str(i) for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
p = lexicographic_permutation(list, 1000000)
print '1 millionth lexicographic permutation of 0..9:', ''.join(p)