Я работаю над попыткой написать алгоритм n-й позиции и собирался задействовать стандартную таблицу символов ASCII.В настоящее время размер факториала кажется слишком большим для целого (вызывая переполнение).
Возможно, есть лучший способ узнать, что я делаю, для нахождения n-й позиции в упорядоченном порядке перестановок.
import functools
from typing import List, Any
def perm(sequence: len) -> int:
""" Compute factorial length
"""
return functools.reduce(lambda x, y: x * y, range(1, len(sequence) + 1), 1)
def nth_perm(sequence, index: object) -> list:
""" Returns the nth lex permutation
"""
sequence = list(sequence[:])
result: List[Any] = []
factorial = perm(sequence)
index %= factorial
while sequence:
factorial = factorial / len(sequence)
choice, index = index // factorial, index % factorial
result += [sequence.pop(int(choice))]
return result
def position(p: int):
return nth_perm([i for i in range(255)], p)
print(position(3))
Я признаю, что я новичок в Python и давно не кодировал.Я хотел бы иметь возможность найти перестановку n-й позиции из 1..255.
Ошибка
OverflowError: integer division result too large for a float