음이 아닌 정수는 항상 동일한 두 * 이웃을 갖는 것에 지루하므로 물건을 조금 섞기로 결정합니다. 그러나 그들은 또한 게으 르며 가능한 한 원래 위치에 가깝게 머물기를 원합니다.
그들은 다음 알고리즘을 생각해냅니다.
- 첫 번째 요소는 0입니다.
엔티h 요소가 아직 시퀀스에 존재하지 않는 가장 작은 개수의 인접하지 않다 (엔−1)티h 요소.
다음과 같은 무한 시퀀스가 생성됩니다.
0,2,4,1,3,5,7,9,6,8,10,12,14,11,13,15,17,19,16,18,20,22,24,21,23,25,27,29,26,28 ...
0
첫 번째 요소입니다. 1
는 시퀀스에서 아직 가장 작은 수이지만의 이웃입니다 0
. 다음으로 가장 작은 숫자는 2
이므로 시퀀스의 두 번째 요소입니다. 이제 나머지 수는 1,3,4,5,6,...
있지만, 모두 같은 1
그리고 3
의 이웃 2
, 4
시퀀스의 제 3 부재이다. 으로 1
의 이웃 아닌 4
, 마침내 네 번째 요소로 자리를 취할 수 있습니다.
작업
함수 또는 프로그램을 가능한 한 적은 바이트로 작성하여 위의 순서를 생성하십시오.
당신은 할 수있다
- 시퀀스를 무한대로 출력하고
- 입력
엔 가져 와서 시퀀스 의 엔티h 요소를 반환 하거나 - 입력
엔 취하여 시퀀스 의 처음 엔 요소를 반환합니다 .
후자의 두 옵션 중 하나를 선택하는 경우 0 또는 1 인덱싱이 좋습니다.
위에 주어진 알고리즘을 따를 필요는 없습니다. 동일한 시퀀스를 생성하는 모든 방법이 좋습니다.
영감을받은 코드 골프 최고의 순열 . 이것이 A277618 입니다.
* Zero는 말 그대로 이웃이 하나 뿐이며 실제로 신경 쓰지 않습니다.
답변
자바 스크립트 (ES6), 13 바이트
시퀀스 의
엔번째 항을 반환합니다 .
n=>n-2-~++n%5
방법?
이것은 다음을 계산합니다.
엔−2+((엔+2)모드5)
n | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
-------------+--------------------------------------------------
n - 2 | -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 ...
(n+2) mod 5 | 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 ...
-------------+--------------------------------------------------
sum | 0 2 4 1 3 5 7 9 6 8 10 12 14 11 13 ...