숫자로 낙서하는 동안 숫자 목록에서 생성 할 수있는 흥미로운 순열을 발견했습니다. 이 같은 순열을 여러 번 반복하면 항상 원래 배열로 돌아갑니다. 다음 목록을 사용하십시오.
[1, 2, 3, 4, 5]
예로서
배열을 뒤집 습니다. 이제 우리 배열은
[5, 4, 3, 2, 1]
각 쌍을 재정렬 (스왑)하십시오. 우리의 목록에는 2 쌍이 있습니다 :
[5, 4]
,[3, 2]
. 불행히도, 우리는1
쌍으로 그룹화 할 수 없으므로 우리는 그것을 스스로 남겨 둘 것입니다. 각 쌍을 교체 한 후 새 배열은 다음과 같습니다.[4, 5, 2, 3, 1]
원래 배열로 돌아갈 때까지 1 단계와 2 단계를 반복 하십시오. 다음 4 단계는 다음과 같습니다.
Step 2: Start: [4, 5, 2, 3, 1] Reversed: [1, 3, 2, 5, 4] Pairs Swapped: [3, 1, 5, 2, 4] Step 3: Start: [3, 1, 5, 2, 4] Reversed: [4, 2, 5, 1, 3] Pairs Swapped: [2, 4, 1, 5, 3] Step 4: Start: [2, 4, 1, 5, 3] Reversed: [3, 5, 1, 4, 2] Pairs Swapped: [5, 3, 4, 1, 2] Step 5: Start: [5, 3, 4, 1, 2] Reversed: [2, 1, 4, 3, 5] Pairs Swapped: [1, 2, 3, 4, 5] # No more steps needed because we are back to the original array
목록의 길이 n 이 홀수 인 경우 원래 배열로 돌아가려면 항상 정확히 n 단계를 수행합니다. 경우 n이 짝수, 항상, 원래의 배열로 반환이 개 조치를 취할 것입니다 하지 않는 n이 2 인 (반전과 교환하는 것은 같은 일 때문에)가 1 단계를 취할되는 경우.
오늘의 과제 (수락하기로 선택해야 함)는 임의의 길이 목록에 대해이 단계 세트를 시각화하는 것입니다. 단일 양의 정수 n 을 입력으로 사용하고 list에 대해이 단계 세트를 수행 하는 프로그램 또는 함수를 작성해야 합니다 [1, n]
. 각 단계를 인쇄하거나 단계 목록으로 모두 리턴하는지 여부에 관계없이 중간 단계를 출력해야합니다. 모든 단계를 생성하고 있음이 분명하다면 출력 형식에 대해 까다 롭지 않습니다. 이것은 (예를 들어) 다음 중 하나를 의미합니다.
모든 단계를 STDOUT에 목록으로 출력
리스트리스트 리턴
각 단계의 문자열 표현 목록 반환
행렬 반환 / 출력
받아 들일 것입니다.
또한 원래 배열이 시작 부분에 있는지 또는 시작 부분에 있는지에 관계없이 원본 배열을 출력해야합니다. (기술적으로는 둘 다 맞습니다)
2 대신 1 단계를 복용하는 2의 경우를 처리 해야하므로 솔루션이 2의 입력으로 작동하는지 확인하십시오 (1은 또 다른 잠재적 인 경우입니다).
평소와 같이, 이것은 코드 골프입니다 . 따라서 표준 허점이 적용되며 원하는 언어로 솔루션을 더 짧게 만들거나 기분이 좋을 때 일반적으로 더 짧은 다른 언어를 이길 수 있습니다 도전).
IO 테스트
1:
[1]
2:
[1, 2]
3:
[2, 3, 1]
[3, 1, 2]
[1, 2, 3]
4:
[3, 4, 1, 2]
[1, 2, 3, 4]
5:
[4, 5, 2, 3, 1]
[3, 1, 5, 2, 4]
[2, 4, 1, 5, 3]
[5, 3, 4, 1, 2]
[1, 2, 3, 4, 5]
7:
[6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 6]
[4, 6, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 7, 5]
[7, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7]
9:
[8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 8]
[6, 8, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 9, 7]
[9, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
그리고 좋은 측정을 위해 여기에 하나의 거대한 테스트 사례가 있습니다.
27:
[26, 27, 24, 25, 22, 23, 20, 21, 18, 19, 16, 17, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 11, 8, 13, 10, 15, 12, 17, 14, 19, 16, 21, 18, 23, 20, 25, 22, 27, 24, 26]
[24, 26, 22, 27, 20, 25, 18, 23, 16, 21, 14, 19, 12, 17, 10, 15, 8, 13, 6, 11, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 11, 4, 13, 6, 15, 8, 17, 10, 19, 12, 21, 14, 23, 16, 25, 18, 27, 20, 26, 22, 24]
[22, 24, 20, 26, 18, 27, 16, 25, 14, 23, 12, 21, 10, 19, 8, 17, 6, 15, 4, 13, 2, 11, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 11, 1, 13, 2, 15, 4, 17, 6, 19, 8, 21, 10, 23, 12, 25, 14, 27, 16, 26, 18, 24, 20, 22]
[20, 22, 18, 24, 16, 26, 14, 27, 12, 25, 10, 23, 8, 21, 6, 19, 4, 17, 2, 15, 1, 13, 3, 11, 5, 9, 7]
[9, 7, 11, 5, 13, 3, 15, 1, 17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 26, 14, 24, 16, 22, 18, 20]
[18, 20, 16, 22, 14, 24, 12, 26, 10, 27, 8, 25, 6, 23, 4, 21, 2, 19, 1, 17, 3, 15, 5, 13, 7, 11, 9]
[11, 9, 13, 7, 15, 5, 17, 3, 19, 1, 21, 2, 23, 4, 25, 6, 27, 8, 26, 10, 24, 12, 22, 14, 20, 16, 18]
[16, 18, 14, 20, 12, 22, 10, 24, 8, 26, 6, 27, 4, 25, 2, 23, 1, 21, 3, 19, 5, 17, 7, 15, 9, 13, 11]
[13, 11, 15, 9, 17, 7, 19, 5, 21, 3, 23, 1, 25, 2, 27, 4, 26, 6, 24, 8, 22, 10, 20, 12, 18, 14, 16]
[14, 16, 12, 18, 10, 20, 8, 22, 6, 24, 4, 26, 2, 27, 1, 25, 3, 23, 5, 21, 7, 19, 9, 17, 11, 15, 13]
[15, 13, 17, 11, 19, 9, 21, 7, 23, 5, 25, 3, 27, 1, 26, 2, 24, 4, 22, 6, 20, 8, 18, 10, 16, 12, 14]
[12, 14, 10, 16, 8, 18, 6, 20, 4, 22, 2, 24, 1, 26, 3, 27, 5, 25, 7, 23, 9, 21, 11, 19, 13, 17, 15]
[17, 15, 19, 13, 21, 11, 23, 9, 25, 7, 27, 5, 26, 3, 24, 1, 22, 2, 20, 4, 18, 6, 16, 8, 14, 10, 12]
[10, 12, 8, 14, 6, 16, 4, 18, 2, 20, 1, 22, 3, 24, 5, 26, 7, 27, 9, 25, 11, 23, 13, 21, 15, 19, 17]
[19, 17, 21, 15, 23, 13, 25, 11, 27, 9, 26, 7, 24, 5, 22, 3, 20, 1, 18, 2, 16, 4, 14, 6, 12, 8, 10]
[8, 10, 6, 12, 4, 14, 2, 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11, 27, 13, 25, 15, 23, 17, 21, 19]
[21, 19, 23, 17, 25, 15, 27, 13, 26, 11, 24, 9, 22, 7, 20, 5, 18, 3, 16, 1, 14, 2, 12, 4, 10, 6, 8]
[6, 8, 4, 10, 2, 12, 1, 14, 3, 16, 5, 18, 7, 20, 9, 22, 11, 24, 13, 26, 15, 27, 17, 25, 19, 23, 21]
[23, 21, 25, 19, 27, 17, 26, 15, 24, 13, 22, 11, 20, 9, 18, 7, 16, 5, 14, 3, 12, 1, 10, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 10, 3, 12, 5, 14, 7, 16, 9, 18, 11, 20, 13, 22, 15, 24, 17, 26, 19, 27, 21, 25, 23]
[25, 23, 27, 21, 26, 19, 24, 17, 22, 15, 20, 13, 18, 11, 16, 9, 14, 7, 12, 5, 10, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 10, 7, 12, 9, 14, 11, 16, 13, 18, 15, 20, 17, 22, 19, 24, 21, 26, 23, 27, 25]
[27, 25, 26, 23, 24, 21, 22, 19, 20, 17, 18, 15, 16, 13, 14, 11, 12, 9, 10, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
즐거운 골프 되세요!
1 2 3 4 5
하지 1 2 4 3 5
.
array[0]
프로세스의 시작과 끝에서 1까지만 확인하는 python 스크립트를 가지고 있다 n = 999
. 패턴을 보면 모든 홀수 n 인 것처럼 보입니다 . 첫 번째 요소는 1, n-1, 3, n - 3, 5, n - 5, 7...
까지 올라가고 n - 2, 3, n, 1
항상 n 단계를 수행합니다. 이 패턴이 더 큰 n으로 변경되는 이유는 없습니다 .
1, n, 2, n-2, 4, n-4, 6, n-6, 8, n-8, ...