마름모 시퀀스 시작합니다 .

성장하는 마름모꼴의 요소를 열거한다고 상상해보십시오 [1],[1,3,1],[1,3,5,3,1],…(홀수로만 잘 정렬됩니다). 다음과 같이 보일 것입니다 1. 항상 다음과 같이 열거하기 시작합니다 .

                   01
       1        02 03 04
 1   2 3 4   05 06 07 08 09          …
       5        10 11 12
                   13
(1) (1,3,1)    (1,3,5,3,1)    (1,3,5,7,5,3,1)   …

이제 열 합산을 시작 [1],[2],[1,3,5],[4],[5],[2,6,10],…하면 마름모 시퀀스가 ​​표시 됩니다. 이들은 상기 시퀀스의 처음 100 개 요소입니다 :

1,2,9,4,5,18,35,24,9,10,33,60,91,70,45,16,17,54,95,140,189,154,115,72,25,26,81,140,203,270,341,288,231,170,105,36,37,114,195,280,369,462,559,484,405,322,235,144,49,50,153,260,371,486,605,728,855,754,649,540,427,310,189,64,65,198,335,476,621,770,923,1080,1241,1110,975,836,693,546,395,240,81,82,249,420,595,774,957,1144,1335,1530,1729,1564,1395,1222,1045,864,679,490,297,100

IO

다음 세 가지 입력 / 출력 방법 중 하나를 자유롭게 선택할 수 있습니다 (유효하지 않은 입력을 처리 할 필요는 없습니다).

  • 주어진 순서로 n 번째 요소에 정수 n 출력이 주어짐 (0 또는 1 인덱싱, 선택)
  • 해당 시퀀스의 첫 번째 n 개 요소를 정수 n으로 출력
  • 순서를 불명확하게 인쇄 / 반환

테스트 케이스

위의 처음 100 개 용어를 참조하십시오. 다음은 더 큰 예입니다 (1 색인).

101 -> 101
443 -> 1329
1000 -> 49000
1984 -> 164672
2017 -> 34289
2018 -> 30270
3000 -> 153000


답변

눈사람 , 72 바이트

((}1vn2nD#`nPnCdU!*2nM1`nR:#nSNaB#`nS2nMNdE;aM|#NdE2nP+#`nSNdE`|aA#nM*))

이것은 1 인덱스 입력을 취하고 permavar를 통해 해당 출력을 리턴하는 서브 루틴입니다 +.

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

((        // begin subroutine
 }        // we'll only need 3 variables - b, e, g
 1vn2nD   // b = 0.5
 #`       // retrieve input and swap, now b = input and e = 0.5
 nP       // power, resulting in b=sqrt(input)
 nC       // ceiling - this gives the index i of the rhombus we want
 dU!*     // keep a copy of i in the permavar ! for later use
 2nM1`nR  // generate the range [1, 2i)
 :        // map the following block over the range...
  #nS     // subtract i, resulting in e.g. [-3 -2 -1 0 1 2 3] for i=4
  NaB     // absolute value - [3 2 1 0 1 2 3]
  #`nS    // subtract from i, giving [1 2 3 4 3 2 1]
  2nMNdE  // double and decrement, [1 3 5 7 5 3 1]
 ;aM      // map
 |        // shove the rhombus columns into g
 #NdE2nP  // b = (i-2)^2
 +#`      // move b into e and replace it with the original input
 nSNdE    // subtract the two and decrement, giving input-(i-2)^2-1
 `|aA     // this is the index into the rhombus columns that we want
 #nM*     // multiply by the original input and return
))

이것은 기본적으로 Mr. Xcoder의 답변 과 동일한 알고리즘을 사용 합니다. 여기서 유일한 차이점은 필요한 마름모의 열 (ceil (sqrt (n))) 만 생성한다는 것입니다. 이것이 왜 작동하는지 설명하기 위해 각 마름모에 해당하는 입력은 다음과 같습니다.

rhombus #   inputs
1           1
2           2 3 4
3           5 6 7 8 9
4           10 11 12 13 14 15 16
...

왼쪽 열은 오른쪽 열에있는 각 요소의 제곱근의 천장과 정확히 일치합니다. 여기에서 1 기반 인덱스를 얻으려면 이전 마름모 인덱스의 제곱을 뺍니다.


답변

젤리 , 10 바이트

Ḥ€€’ŒBFị@×

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

N 번째 항을 반환하는 전체 프로그램 / 모나 딕 링크 (1- 인덱스).

각 합계는 전체 열 목록 (입력 자체)의 해당 열 색인에 해당 Rhombus의 해당 열 색인을 곱한 값이므로 실제로 행을 생성 할 필요가 없습니다.

어떻게?

Ḥ €€ 'ŒBFị @ × ~ 전체 프로그램. 입력 N을 호출합니다.

  € ~ [1, N] 범위의 각 정수 X에 대해.
integer € ~ [1, X] 범위에서 각 정수를 두 배로 늘립니다.
   '~ 감소 (1을 뺍니다).
    ŒB ~ 바운스 (요소 별). 각각을 회담하십시오.
      F ~ 평평.
       ị @ ~ 목록 N의 요소를 구합니다.
         × ~ N을 곱합니다.

답변

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

@ovs 덕분에 1 바이트 절약

인덱스가 0입니다. A004737 에서 파생 된 닫힌 양식 표현식 입니다.

n=>((k=n**.5|0)-Math.abs(n+k*~k))*2*++n+n

테스트 사례

let f =

n=>((k=n**.5|0)-Math.abs(n+k*~k))*2*++n+n

console.log(f(101-1))  // 101
console.log(f(443-1))  // 1329
console.log(f(1000-1)) // 49000    
console.log(f(1984-1)) // 164672
console.log(f(2017-1)) // 34289
console.log(f(2018-1)) // 30270
console.log(f(3000-1)) // 153000

답변

Befunge, 62 60 바이트

&:1>:00p:*`|
00:-\*:g00:<>2-\-0v!`\g
*.@v+1<g00:<^*2g00_2*1+

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

설명

stdin에서 1 기반 요소 번호 n 을 읽고 복제본을 저장하여 시작합니다.
그런 다음 까지 정수 r 을 세어 우리가 어느 마름모인지 결정 r*r >= n합니다.
마름모의 오른쪽 c 에서 열 오프셋 은 r*r - n입니다.
중심 축 주위에 오프셋이 반영되도록하려면을 확인합니다 c >= r.
그리고 만약 그렇다면, 반사 된 c 가됩니다 r*2 - 2 - c. c
가 반영되면 , 열의 합은 간단하다 .(c*2 + 1) * n


답변

APL (Dyalog) , 18 바이트

{⍵×2×⌊/|⍵-.5+×⍨⍳⍵}

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


답변

젤리 , 8 바이트

_.ạ²€ṂḤ×

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

작동 원리

_.ạ²€ṂḤ×  Main link. Argument: n

_.        Subtract 0.5; yield (n - 0.5).
   ²€     Square each; yield [1², 2², ..., n²].
  ạ       Take the absolute differences of (n - 0.5) and each of the squares.
     Ṃ    Take the minimum.
      Ḥ   Unhalve; double the minimum.
       ×  Multiply the result by n.