양의 정수
주어지면
객체의 모든 배열이 생성 됩니다.
세부
- 변위는 고정 점이없는 순열입니다. (이는 모든 배치 번호에서
가 번째 항목에 있을 수 없음을 의미합니다 ). - 출력은 숫자의 배열
(또는 대안 적으로 )로 구성되어야합니다. - 다른 방법으로 항상
(또는 각각 배열을 인쇄 할 수 있지만 반드시 지정해야합니다. - 출력은 결정 론적 이어야합니다. 즉, 주어진
을 입력으로 하여 프로그램을 호출 할 때마다 출력이 같아야합니다 (배열 순서가 동일하게 유지되어야 함을 포함하여). 매번 유한 한 시간 (확률 1로 충분하지 않음). - n ⩾ 2 라고 가정 할 수 있습니다
- 주어진 대해 모든 배열을 생성하거나 대안 으로 인덱스 역할을하는 다른 정수 를 가져 와서 번째 배열을 선택한 순서대로 인쇄 할 수 있습니다 .
예
배치 순서가 여기에 나열된 순서와 같을 필요는 없습니다.
n=2: (2,1)
n=3: (2,3,1),(3,1,2)
n=4: (2,1,4,3),(2,3,4,1),(2,4,1,3), (3,1,4,2),(3,4,1,2),(3,4,2,1), (4,1,2,3),(4,3,1,2),(4,3,2,1)
OEIS A000166 은 배치 수를 계산합니다.
답변
젤리 , 6 바이트
Œ!=ÐṂR
정수 목록을 생성하는 양의 정수를 허용하는 모나드 링크.
어떻게?
Œ!=ÐṂR - Link: integer, n
Œ! - all permutations of (implicit range of [1..n])
R - range of [1..n]
ÐṂ - filter keep those which are minimal by:
= - equals? (vectorises)
- ... i.e. keep only those permutations that evaluate as [0,0,0,...,0]
답변
Brachylog , 9 바이트
⟦kpiᶠ≠ᵐhᵐ
이것은 [0, …, n-1]
주어진 하나의 배열을 출력하는 생성기입니다 n
.
우리가 그것을 포장하는 경우 ᶠ - findall
metapredicate, 우리는 발전기에 의해 교란의 가능한 모든 세대를 얻을.
설명
⟦ The range [0, …, Input]
k Remove the last element
p Take a permutation of the range [0, …, Input - 1]
iᶠ Take all pair of Element-index: [[Elem0, 0],…,[ElemN-1, N-1]]
≠ᵐ Each pair must contain different values
hᵐ The output is the head of each pair
답변
자바 스크립트 (V8) , 85 바이트
0부터 시작하는 모든 범위를 인쇄하는 재귀 함수.
f=(n,p=[],i,k=n)=>k--?f(n,p,i,k,k^i&&!p.includes(k)&&f(n,[...p,k],-~i)):i^n||print(p)
댓글
f = ( // f is a recursive function taking:
n, // n = input
p = [], // p[] = current permutation
i, // i = current position in the permutation
k = n // k = next value to try
) => // (a decrementing counter initialized to n)
k-- ? // decrement k; if it was not equal to 0:
f( // do a recursive call:
n, p, i, k, // leave all parameters unchanged
k ^ i && // if k is not equal to the position
!p.includes(k) && // and k does not yet appear in p[]:
f( // do another recursive call:
n, // leave n unchanged
[...p, k], // append k to p
-~i // increment i
// implicitly restart with k = n
) // end of inner recursive call
) // end of outer recursive call
: // else:
i ^ n || // if the derangement is complete:
print(p) // print it
답변
답변
05AB1E , 9 바이트
Lœʒāø€Ë_P
설명
L # push [1 ... input]
œ # get all permutations of that list
ʒ # filter, keep only lists that satisfy
āø # elements zipped with their 1-based index
€Ë_P # are all not equal