새 주문 # 6 : 이스터 에그 . 이 나선형에는

소개 (무시 될 수 있음)

모든 양의 정수를 규칙적인 순서 (1, 2, 3, …)로 넣는 것은 약간 지루하지 않습니까? 그래서 여기 모든 양의 정수의 순열 (순환 제거)에 관한 일련의 도전이 있습니다. 이것이이 시리즈의 여섯 번째 도전입니다 ( 첫 번째 , 두 번째 , 세 번째 , 네 번째다섯 번째 도전에 연결됨).

이 도전은 부활절이기 때문에 온화한 부활절 테마가 있습니다. 나는 매우 장식 된 (그리고 개인적인 견해로는 오히려 못생긴) 거위 알에서 영감을 얻었습니다.

거위 계란 장식

그것은 모든 양의 정수가 시계 반대 방향으로 배치되는 Ulam 나선을 생각 나게했습니다 . 이 나선형에는 소수와 관련된 몇 가지 흥미로운 기능이 있지만이 문제와 관련이 없습니다.

Ulam 나선에서 숫자를 취하고 1부터 시작 하여 시계 방향으로 돌리는 나선 에서 모든 정수를 추적하면 양수 정수의 순열에이 도전이 적용됩니다 .

1, 6, 5, 4, 3, 2, 9, 8, 7, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, etc.

당신이 나선을 모두 끌어한다면, 당신은 무한의 일종 얻을 것 메시 (달걀 껍질) 나선의을 ( 노트 새로운 주문 참조가를 ).

a(n)

n

a(n)

직무

n

a(n)

a(n)

a(0)=1;a(1)=6

테스트 사례

Input | Output
---------------
1     |  1
5     |  3
20    |  10
50    |  72
78    |  76
123   |  155
1234  |  1324
3000  |  2996
9999  |  9903
29890 |  29796

규칙

  • 입력과 출력은 정수입니다.
  • 프로그램은 최소한 1에서 32767 사이의 입력을 지원해야합니다).
  • 유효하지 않은 입력 (0, 부동, 문자열, 음수 값 등)으로 인해 예기치 않은 출력, 오류 또는 (정의되지 않은) 동작이 발생할 수 있습니다.
  • 기본 I / O 규칙이 적용됩니다.
  • 기본 허점 은 금지되어 있습니다.
  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.


답변

젤리 ,  16 14 11 10 9  8 바이트

-1 린 덕분에 (MOD-2 논리적 NOT, 자기에 추가 : Ḃ¬+-> 비트 또는 1 : |1)

|1×r)ẎQi

정수를 받아들이는 monadic Link는 정수 n를 산출합니다 a(n).

⌈n2⌉

11 바이트 버전 ½‘|1×rƲ€ẎQi은 30 초 미만의 가장 큰 테스트 사례를 모두 완료 합니다. TIO에서 시도해보십시오. 이는 사용 된 계층을 제한합니다.

⌈⌊n⌋+12⌉

어떻게?

순열은 길이가 반대 인 슬라이스에서 자연수를 취합니다 [1,5,3,11,5,17,7,23,9,29,11,35,13,...]. 홀수 양의 정수는 5 개의 모듈로 6과 일치하는 양의 정수와 산재합니다 [1, 2*3-1, 3, 4*3-1, 5, 6*3-1, 7, 8*3-1, 9, ...].

이 역전 범위 중복 제거 후 연접과 동일하다 [1..x]어디에 x– (즉, 각각의 슬라이스의 최대 값)이 슬라이스 길이의 누적 합 인 [1,6,9,20,25,42,49,72,81,110,121,156,169,...]홀수 정수 자체가 증가함으로써, 즉, 승산 짝수 산재 제곱 어느 [1*1, 2*3, 3*3, 4*5, 5*5, 6*7, 7*7,...].

차이가 모두 1보다 크므로 범위를 [x..k]직접 작성 하여 바이트 (반전)를 절약 할 수 있습니다. 여기서 k슬라이스의 1 인덱스 인덱스는 어디 입니까?

P(n)=v⟺P(v)=n

n|1×r)ẎQị@n|1×r)ẎQi

|1×r)ẎQi - Link: integer, n       e.g. 10
    )    - for each k in [1..n]:  vs = [ 1, 2, 3, 4, 5, 6, 7, 8, 9,10]
|1       -   bitwise-OR (k) with 1     [ 1, 3, 3, 5, 5, 7, 7, 9, 9,11]
  ×      -   multiply (by k)           [ 1, 6, 9,20,25,42,49,72,81,110]
   r     -   inclusive range (to k)    [[1],[6..2],[9..3],[20..4],...,[110..10]]
     Ẏ   - tighten                     [1,6,5,4,3,2,9,8,7,6,5,4,3,20,...,4,......,110,...,10]
      Q  - de-duplicate                [1,6,5,4,3,2,9,8,7,20,...,10,......,110,...82]
       i - first index with value (n)  20

답변

자바 스크립트 (ES7),  46 45  41 바이트

인덱스가 0입니다.

n=>((x=n**.5+1&~1)*2-(n<x*x+x)*4+3)*x+1-n

온라인으로 사용해보십시오!

어떻게?

이것은 A090861 의 예제 프로그램에서 사용 된 1- 색인 공식을 기반으로합니다 .

xn

0

xn=⌊n−1+12⌋

온라인으로 사용해보십시오!

kn

6

−2

kn={−2if n≤4xn2+2xn6otherwise

온라인으로 사용해보십시오!

an

an=8xn2+knxn+2−n

온라인으로 사용해보십시오!

다음과 같이 번역 될 수 있습니다.

n=>8*(x=(n-1)**.5+1>>1)*x+(n<=4*x*x+2*x?-2:6)*x+2-n

0 인덱싱하면 5 바이트가 즉시 절약됩니다.

n=>8*(x=n**.5+1>>1)*x+(n<4*x*x+2*x?-2:6)*x+1-n

다음을 사용하여 공식을 더 단순화 할 수 있습니다.

x′n=2×⌊n+12⌋

다음과 같이 표현할 수 있습니다.

x=n**.5+1&~1

이어지는 :

n=>2*(x=n**.5+1&~1)*x+(n<x*x+x?-1:3)*x+1-n

그리고 마지막으로:

n=>((x=n**.5+1&~1)*2-(n<x*x+x)*4+3)*x+1-n

답변

Wolfram Language (Mathematica) , 60 바이트

8(s=⌊(⌊Sqrt[#-1]⌋+1)/2⌋)^2-#+2+If[#<=4s^2+2s,-2,6]s&

온라인으로 사용해보십시오!


답변

MATL , 12 11 바이트

Eq1YL!tPG=)

온라인으로 사용해보십시오!

매우 메모리 비효율적입니다. 앞에 추가 X^k하면 더 효율적 입니다.


답변

C # (Visual C # 대화식 컴파일러) , 67 바이트

n=>8*(x=(int)Math.Sqrt(--n)+1>>1)*x+(n<4*x*x+2*x?-2:6)*x+1-n;int x;

온라인으로 사용해보십시오!


답변

Python 3.8, 104 74 65 60 57 바이트

lambda n:(-2,6)[n>4*(x:=(n**.5+1)//2)*x+2*x]*x+2+~n+8*x*x

편집 : 74에서 57 바이트까지 가져 와서 Johnathan Allan에게 감사드립니다!

이 솔루션은 0 기반 인덱싱을 사용합니다.


답변

Python 3.8 (시험판) , 53 바이트

Arnauld의 JavaScript 답변의 직접 포트 , 투표J42161217의 Mathematica answer 및 / 또는 Kapocsi의 Python 답변 🙂

lambda n:((x:=int(n**.5+1)&-2)*2-(n<x*x+x)*4+3)*x+1-n

인덱스가 0입니다.

온라인으로 사용해보십시오!