N-я позиция в перестановке для переполнения символов ASCII - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над попыткой написать алгоритм 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...