소개
n 개의 요소 를 가진리스트의 사전 식 순열은 0에서 n 까지 번호가 매겨 질 수 있습니다 ! -1. 예를 들어, 3! = 6 순열 (1,2,3)
것 (1,2,3)
, (1,3,2)
, (2,1,3)
, (2,3,1)
, (3,1,2)
, (3,2,1)
.
순열이 목록에 적용되면 해당 요소는 순열의 숫자와 동일한 순서로 정렬됩니다. 예를 들어 순열 (2,3,1)
을 l = (a,b,c)
yields에 적용합니다 (l[2],l[3],l[1]) = (b,c,a)
.
순열의 역수는이 연산을 반대로하는 순열로 정의됩니다. 즉 순열을 적용한 다음 그 반대의 경우 (또는 그 반대) 배열을 수정하지 않습니다. 예를 들면, 역 (2,3,1)
IS (3,1,2)
에 그 적용하기 때문에, (b,c,a)
수율 (a,b,c)
.
또한 순열 자체에 적용된 순열의 역수는 정수 1… n을 산출합니다 . 예를 들어 yield에 적용 (3,1,2)
합니다 .(2,3,1)
(1,2,3)
이제 함수 revind ( x )를 인덱스 x를 사용한 순열의 역 순열의 인덱스로 정의합니다 . ( 관심 이 있으시면 A056019 입니다.)
인덱스 i를 사용한 순열 은리스트 iff 0 ≤ i < k ! 의 마지막 k 항목 만 수정하므로 revind ( i )에 영향을주지 않으면 서 목록의 시작 부분에 여러 요소를 추가 할 수 있습니다 . 따라서 목록의 길이는 결과에 영향을 미치지 않습니다.
도전
당신의 임무는 재생 ( x ) 을 구현하는 것 입니다. 음이 아닌 단일 정수 x 를 입력 / 인수로 사용하고 결과를 단일의 음이 아닌 정수로 출력 / 반환 하는 전체 프로그램 또는 함수를 작성합니다 .
입력과 출력은 0- 인덱싱 또는 1- 인덱싱 될 수 있지만, 이것은 서로 일치해야합니다.
인덱스별로 순열을 생성하거나 순열 인덱스를 반환하거나 역 순열이 금지 된 것을 찾는 기본 제공 (모든 순열 또는 다음 순열을 생성하는 내장이 허용됩니다.)
표준 코드 골프 규칙이 적용됩니다.
예
아래 예제는 0 인덱스입니다.
Input Output
0 0
1 1
2 2
3 4
4 3
5 5
6 6
13 10
42 51
100 41
1000 3628
2000 3974
10000 30593
100000 303016
참조 구현 (Python 3)
def revind(n):
from math import factorial
from itertools import permutations, count
l = next(filter(lambda x: factorial(x) > n, count(1)))
pms = list(permutations(range(l)))
return [k for k in range(len(pms)) if tuple(pms[n][i] for i in pms[k]) == pms[0]][0]
(a,b,c)
매우 불분명하다고 생각합니다. 역 순열이 무엇인지에 대한 적절한 설명을 포함하십시오.
Ụ
배열의 인덱스를 해당 값으로 정렬 하는 원자 (그레이드 업)를 가지고 있습니다. 이것은 1,…, n 의 순열 을 반전시키는 것이지만 다른 순열에서는 작동하지 않습니다. 되어 A를 내장 금지 된? Ụ