mirror of
https://github.com/correl/euler.git
synced 2024-12-26 03:00:07 +00:00
Problem 024
git-svn-id: file:///srv/svn/euler@56 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
This commit is contained in:
parent
0be427137c
commit
fb13b3ce62
1 changed files with 29 additions and 0 deletions
29
e024.py
Normal file
29
e024.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
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)
|
Loading…
Reference in a new issue