위아래로 위아래로


34

도전:

양의 정수 입력 n이 주어지면 이 패턴을 따르는 벡터를 만듭니다.

0  1  0 -1 -2 -1  0  1  2  3  2  1  0 -1 -2 -3 -4 -3 -2 -1 ... ±(n-1) ±n

또는 단어로 설명 : 벡터는에서 시작 하여 시퀀스의 일부가 아닌 가장 작은 홀수 양의 정수에 도달 할 때까지 0증가 1한 다음 가장 작은 음의 정수에 도달 할 때까지 감소합니다. 시퀀스의 일부가 아닙니다. n도달 할 때까지이 방법을 계속합니다 . 순서는 양극에 끝날 n경우 n홀수 및 네거티브 n경우 n에도있다.

출력 형식은 유연합니다.

테스트 사례 :

n = 1
0  1
-----------
n = 2
0  1  0 -1 -2
-----------
n = 3
0  1  0 -1 -2 -1  0  1  2  3
-----------
n = 4
0  1  0 -1 -2 -1  0  1  2  3  2  1  0 -1 -2 -3 -4
-----------
n = 5
0  1  0 -1 -2 -1  0  1  2  3  2  1  0 -1 -2 -3 -4 -3 -2 -1  0  1  2  3  4  5

당신은 n 인덱스 0 을 취할 수 있습니다 . n = 1그런 다음 줄 것이다 0 1 0 -1 -2.

이것은 이므로 각 언어에서 가장 짧은 코드가 승리합니다! 언제나처럼 설명이 권장됩니다!


2
관련 : OEIS A196199 .
Mr. Xcoder

답변:


10

R , 58 54 50 48 43 바이트

MickyT 덕분에 -2 바이트

function(n)diffinv(rep(1:n%%2*2-1,1:n*2-1))

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

function(n)
 diffinv(                           # take cumulative sum, starting at 0 of
             1:n%%2*2-1,            # a vector of alternating 1,-1
         rep(                       # repeated
                        1:n*2-1))   # 1, 3, 5, etc. times


8

펄 6 ,  60  26 바이트

{flat {((1,-*...*)ZX*(-$++...0...$++)xx$_)}(),$_*($_%2||-1)}

시도 해봐

{[...] (-1,-*...*)Z*0..$_}

시도 해봐

넓히는:

{  # bare block lambda with implicit parameter $_

  [...]  # reduce using &infix:«...» (sequence generator)

          ( -1, -* ... * ) # (-1, 1, -1, 1 ... *)

      Z*                   # zip multiplied with

          0 .. $_          # range up to and including input
}

(-1,-*...*)Z*0..$_ 시퀀스를 생성 0 1 -2 3 -4 5



7

05AB1E , 9 7 바이트

@Emigna 덕분에 2 바이트 절약

Ýā®sm*Ÿ

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

내 첫 05AB1E 답변 (제 생각에), 일부 트릭이 누락되었을 수 있습니다 ...

설명

Ý         # push range [0 ... n]   stack: [[0 ... n]]
 ā        # push range [1 ... len(prev)]  [[0 ... n], [1 ... n+1]]
  ®       # push value of register        [[0 ... n], [1 ... n+1], -1]
   s      # swap top two values           [[0 ... n], -1, [1 ... n+1]]
    m     # power                         [[0 ... n], [-1, 1, -1, 1, ...]]
     *    # multiply                      [[0, 1, -2, 3, -4, 5, ...]]
      Ÿ   # range interpolation           [[0, 1, 0, -1, -2, -1, ...]]

나는에 대한 @Dennis 감사가 의 원래 사용Ÿ , 그렇지 않으면 내가 하지 않을 수 있습니다 아마도 그것에 대해 알려져 있지 않았을 것입니다 ...


좋은 :)! 나는 ÝεDÈi®*}}Ÿ확인하지 않고 ā®sm미친 똑똑한 하하입니다.
Magic Octopus Urn

6

05AB1E , 15 14 바이트

ÝDÉ·<*Ý€û˜ÔsF¨

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

설명

Ý                # push range [0 ... n]
 D               # duplicate
  É·<            # (x % 2 == 1)*2-1 for each
     *           # multiply
      Ý          # range [0 ... a] for each
       €û        # palendromize each
         ˜       # flatten
          Ô      # connected uniqueified
           sF¨   # remove the last n elements

6

자바 스크립트 (ES6), 56 바이트

f=(n,b=d=1,k=0)=>[k,...k-d*n?f(n,k-b?b:(d=-d)-b,k+d):[]]

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

댓글

f = (               // f = recursive function taking:
  n,                //   n = input
  b =               //   b = boundary value, initialized to 1
  d = 1,            //   d = current direction, initialized to 1
  k = 0             //   k = current sequence value, initialized to 0
) =>                //
  [                 // update the sequence:
    k,              //   append the current value
    ...k - d * n ?  //   if |k| is not equal to |n|:
      f(            //     append the (spread) result of a recursive call:
        n,          //       use the original input
        k - b ?     //       if k has not reached the boundary value:
          b         //         leave b unchanged
        :           //       else:
          (d = -d)  //         reverse the direction
          - b,      //         and use a boundary of higher amplitude and opposite sign
        k + d       //       update k
      )             //     end of recursive call
    :               //   else:
      []            //     stop recursion and append nothing
  ]                 // end of sequence update


6

젤리 , 11 9 바이트

²Ḷƽ-*0;Ä

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

작동 원리

²Ḷƽ-*0;Ä  Main link. Argument: n

²          Square; yield n².
 Ḷ         Unlength; yield [0, ..., n²-1].
  ƽ       Take the integer square root of each k in the range.
    -*     Compute (-1)**r for each integer square root r.
      0;   Prepend a zero.
        Ä  Accumulate; take the sums of all prefixes.

6

하스켈 , 48 42 바이트

f n=0:[(-1)^i*x|i<-[0..n-1],x<-[1-i..i+1]]

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

-1 바이트의 Οurous 덕분에

이 가늠자에 어떤 분명한의 비록, 그것은에 도착 걸 렸어요 (-1)^i*x이는 x경우 i에도 그리고 -x경우 i홀수입니다. 이전 반복 :

(-1)^i*x
x-2*mod i 2*x
(-1)^mod i 2*x
[x,-x]!!mod i 2
(1-sum[2|odd i])*x

1
1-i대신에 -i+1를 사용하여 바이트를 저장할 수 있습니다 ...
OUurous

4

C # (.NET 코어) , 300  (167) 바이트

나는 이것들 중 어느 것도 한 번도 해 본 적이 없지만 이것은 재미있게 보였습니다. 나는 사람들이 왜 그 "골프"언어를 사용 하는가를 알고있다. 그러나, 당신은 당신이 알고있는 것과 함께 가야합니다.

static int[] f(int n){if (n==1) return new int[]{0,1};var a=f(n-1);return a.Concat(a.Skip(a.Length-(n-1)*2).Select(x=>-x)).Concat(new int[]{(n%2)!=0?n:-n}).ToArray();}

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

// Recursive Worker Function
static public int[] f( int n )
{
    // Start with the simple case
    if ( n == 1 ) return new int[]{0,1};

    // Recusively build off of that
    var a = f(n-1);

    // To be added at the end
    int[] b = { (n%2) !=0 ? n : -n };

    // Skip some based on length
    int s = a.Length - (n-1)*2;

    // With the rest, multiply by -1 and then append to the end
    // And append the part
    return a.Concat( a.Skip(s).Select( x => -x ) ).Concat( b ).ToArray();
}

1
using명령문과 함수 만 계산하면 훨씬 짧게 만들 수 있습니다 . 챌린지가 전체 프로그램이어야 함을 지정하지 않으면 기본적으로 허용됩니다 (그렇더라도 포함하는 클래스 이름을 줄일 수 있음).
OUurous

고맙습니다! 귀하의 제안에 감사드립니다. 저는 TIO 사이트의 "머리글"및 "바닥 글"섹션의 의미를 알아 냈습니다. 제출 크기를 반으로 줄였습니다!
Darrin Cullop

2
PPCG에 오신 것을 환영합니다! (이것은 첫 번째 게시물처럼 보입니다.) 다른 언어에 대해 걱정하지 말고 가능한 한 언어를 잘 구사하십시오. / 팁 : 불필요한 공간을 제거하십시오. C #에서 당신은 상징을 둘러싼 모든 공간을 (제거 할 수 있습니다 [](){};.) (n-1)*2그냥 2*n-2일부 재 배열 당신이 괄호를 제거 할 수 있습니다.
user202729

게다가, !=우선 순위가 낮으므로 %한 쌍의 괄호를 제거 할 수 있습니다. >0`! = 0 대신 사용할 수 있으며 바이트를 저장합니다.
user202729

1
나 에게서도 : PPCG에 오신 것을 환영합니다! C # 에서의 골프 팁모든 언어에서의 골프 팁은 흥미로울 것입니다. :) 몇 가지 골프 팁에 관해서는 : static int[] f(int n)될 수 있습니다 f=n=>A (재귀) 람다를 사용하여, 그리고 (n-1)*2될 수있는 ~-n*2괄호에 저장합니다. 나는 그것을 아래로 가지고 온라인을 시도해보십시오 바이트 155 (137 + 18) . 바이트 수에는 using System.Linq;필수 가져 오기가 필수이므로 18 바이트는입니다 . 체류를 즐길 수!
Kevin Cruijssen

4

J , 25 바이트

FrownyFrog 덕분에 -5 바이트!

>:@*:$i.;@(<@i:@*_1&^)@,]

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

J , 30 바이트

>:@*:{.;@([:(i:@*_1&^)&.>i.,])

설명:

i.,] 목록 0을 생성합니다 ..n

&.> 목록의 각 숫자에 대해 동사 (...)를 실행하고 결과를 상자에 넣습니다 (결과의 길이가 다르기 때문에 권투가 필요합니다)

[:( _1&^)1의 i거듭 제곱에 -1을 구합니다 (-1 또는 1)

i:@* 위의 부호에 따라 -n..n 또는 n ..- n 목록을 작성하십시오.

;@ 개봉하다

>:@*: n ^ 2 + 1 찾기

}. 목록에서 너무 많은 숫자를 가져옵니다

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


1
0 기반 n버전 과 동일한 코드를 작성 하시겠습니까? 예 : *:{.;@([:(i:@*_1&^)&.>i.).. 사양에 따라
jayprich

"n = 1은 0 1 0 -1 -2를 줄 것입니다"
FrownyFrog

@FrownyFrog-흠, 나는 그것을 확인하지 않았다. 나는 첫 번째 해결책으로 되돌아 갔다. 관찰 해 주셔서 감사합니다!
Galen Ivanov

1
25$ 컷오프에 사용 하며 순위가 0 &.>이므로 필요하지 않습니다 *.
FrownyFrog


3

자바 8, 85 83 79 바이트

n->{for(int p=0,i=0;i<=n*n;p+=1-(int)Math.sqrt(i++)%2*2)System.out.println(p);}

@ OlivierGrégoire 덕분에 -6 바이트 .

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

설명:

n->{                            // Method with integer parameter and no return-type
  for(int p=0,                  //  Set both `p` to 0
      i=0;i<=n*n;               //  Loop `i` in the range [0, `n*n`]
      p+=                       //    After every iteration, increase `p` by:
         1-                     //     1, minus:
           (int)Math.sqrt(i++)  //     The square-root of `i`, truncated to its integer
           %2*2)                //     Modulo 2, and multiplied by 2
     System.out.println(p);}    //   Print integer `p` with a trailing new-line

좋은 접근법. 나는 지금 내 대답을 향상시키기 위해 그러한 접근법을 연구하고 있었지만, 당신은 나를 만났습니다 (회의에도 불구하고), 잘했습니다! ;-)
Olivier Grégoire

1
83 바이트 (방금 제거했습니다 j).
Olivier Grégoire

1
79 바이트 : 나는 i중복을 제거하기 위해 다운 대신 올라 갔다 n*n.
Olivier Grégoire

안녕. 내가 기본적으로 당신의 대답을 찢었다는 것을 알려주기 위해 이것을 작성 하십시오. (JavaScript로 포트). 괜찮
Muhammad Salman

@MuhammadSalman Sure, np. 나는 다른 사람들의 대답도 꽤 자주 포팅합니다. :) 당신이했던 것처럼 원래의 대답이 언급되는 한, 그것은 모두 나에게 괜찮습니다.
케빈 크루이 센

3

R , 48 46 42 바이트

for(i in 1:scan())F=c(F,-(-1)^i*(2-i):i);F

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

Kirill L. 의 Ruby 응답 포트 -동일한 Kirill L. 덕분에 6 바이트를 절약했습니다! 이제 Giuseppe의 솔루션 보다 짧습니다 .)

Luis Mendo가 사용한 Octave 답변 의 포트 approx는 덜 골프합니다. n=n^2+1로 대체 될 수 있습니다 ,,n^2+1; 또는 동일한 바이트 수에 대해 0:n^2+1(위치 인수 xout) :

R , 56 바이트

f=function(n)approx((0:n)^2+1,-(-1)^(0:n)*0:n,n=n^2+1)$y

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


approxLuis Mendo의 Octave 솔루션과 비슷한 방식으로 여기에서 작동 한다고 생각 합니다.
주세페

@Giuseppe 감사합니다! 더 길지만 작동합니다. 내가 배운 diffinvapprox이 질문에서 ...
JayCe

-1의 거듭 제곱을하는 골퍼 방법을 모르지만 (R ~은 보수 연산자로 작동하지 않습니다 :() 전체 프로그램으로 전환하여 2 바이트 를 더 절약 할 수 있습니다 .
Kirill L.

... 전체 프로그램이므로 사전 정의 된 내장 : 42 바이트를 사용하여 망칠 수 있습니다. 마지막으로 주세페보다 짧습니다!
Kirill L.

3

APL (Dyalog Unicode) , 17 바이트

+\01*⍳(/⍨)1+2×⍳

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

@FrownyFrog 덕분에 기차로 변환하여 2 바이트를 기록했습니다. 아래의 이전 답변과 설명을 참조하십시오.


APL (Dyalog Unicode) , 19 바이트

+\0,∊⊢∘-\⍴1¨1+2×⍳⎕

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

(사용 ⎕IO←0)

첫 번째 방법은 여러 범위를 구성하고 함께 연결하는 것이 었습니다. 이는 30 바이트를 넘었습니다. 그런 다음 시퀀스 분석을 시작했습니다

      +\⍣¯10  1  0 ¯1 ¯2 ¯1  0  1  2  3  2  1  0 ¯1 ¯2 ¯3 ¯4
0 1 ¯1 ¯1 ¯1 1 1 1 1 1 ¯1 ¯1 ¯1 ¯1 ¯1 ¯1 ¯1

+\⍣¯1 역 누적 합계를 나타냅니다

1과 1의 반복 패턴이 있으며, 여기서 1 또는 1의 각 연속 시퀀스의 길이는 1 + 2 × n입니다. 그리고 각 하위 시퀀스는 1과 ¯1 사이에서 번갈아 나타납니다. 내가 할 수있는 일은 1과 ¯1 목록을 만든 다음 +로 스캔하는 것입니다.

      4  creates range 0..4
0 1 2 3
      2×⍳4
0 2 4 6
      1+2×⍳4
1 3 5 7
      ⍴∘1¨1+2×⍳4  for-each create that many 1s
┌─┬─────┬─────────┬─────────────┐
11 1 11 1 1 1 11 1 1 1 1 1 1
└─┴─────┴─────────┴─────────────┘
      ⊢∘-\⍴1¨1+2×⍳4  alternate signs
┌─┬────────┬─────────┬────────────────────┐
1│¯1 ¯1 ¯11 1 1 1 1│¯1 ¯1 ¯1 ¯1 ¯1 ¯1 ¯1
└─┴────────┴─────────┴────────────────────┘
      ∊⊢∘-\⍴1¨1+2×⍳4  flatten
1 ¯1 ¯1 ¯1 1 1 1 1 1 ¯1 ¯1 ¯1 ¯1 ¯1 ¯1 ¯1
      0,∊⊢∘-\⍴1¨1+2×⍳4
0 1 ¯1 ¯1 ¯1 1 1 1 1 1 ¯1 ¯1 ¯1 ¯1 ¯1 ¯1 ¯1
      +\0,∊⊢∘-\⍴1¨1+2×⍳4  cumulative sum
0 1 0 ¯1 ¯2 ¯1 0 1 2 3 2 1 0 ¯1 ¯2 ¯3 ¯4

지금 다른 답변을 확인하면 많은 사람들이 + \ 메서드를 사용하지만 적어도 3 바이트 더 짧은 ¯1 * .5 * ⍨ × with로 1과 ¯1의 시퀀스를 생성합니다.
Kritixi Lithos

+\0,¯1*⍳(/⍨)1+2×⍳17
FrownyFrog 18:57에

나는 내 솔루션이 오랫동안
느 꼈음을



2

MATL , 17 15 바이트

Luis Mendo 덕분에 -2 바이트!

0i:oEqG:EqY"Ysh

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

설명 n=3:

0		% push 0
 i:		% read input as integer, push range
		% stack: [0, [1 2 3]]
   o		% modulo 2, stack: [0, [1 0 1]]
    Eq		% double and decrement, stack: [0, [1 -1 1]]
      G:	% push input and range again
		% stack: [0, [1 -1 1], [1 2 3]]
        Eq	% double and decrement,
		% stack: [0, [1 -1 1], [1 3 5]]
	  Y"	% run-length decoding
		% stack: [0, [1 -1 -1 -1 1 1 1 1 1]]
	    Ys	% cumulative sum
		% stack: [0, [1  0 -1 -2 -1  0  1  2  3]]
	      h	% horizontally concatenate
		% end of program, automatically print the stack


2

루비 , 52 47 바이트

f=->n{n<1?[0]:f[n-1]+(2-n..n).map{|x|-~0**n*x}}

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

아래는 설명이있는 원본 52 바이트 버전입니다.

f=->n{n<1?[0]:f[n-1]+[(r=*2-n..n).map(&:-@),r][n%2]}

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

연습

f=->n{           #Recursive approach
 n<1?[0]         #Init with 0 if n=0
 :f[n-1]         #else make a recursive call
 +               #and append an array of numbers
 [(r=*2-n..n)    #Init r as splatted range from 2-n to n
 .map(&:-@)      #"-@" is unary minus, so this a fancy way to do map{|x|-x} for -1 byte
                 #For even n use this negated r, e.g. for n=4: [2, 1, 0, -1, -2, -3, -4]
 ,r]             #For odd n use r directly, e.g. for n=3: [-1, 0, 1, 2, 3]
 [n%2]           #Odd/even selector
}

나는 루비를 모른다-이것이 특히 그 map(&:-@)부분 을 설명 할 수 있습니까?
JayCe

@JayCe 설명을 추가했습니다. 기본적으로 이것은 R의 단순한 부정 일뿐 -r입니다.
Kirill L.

설명해 주셔서 감사합니다
-R로


1

파이썬 3, 83 바이트

def c(n):print([(-1)**j*(abs(j-i)-j)for j in range(n+1)for i in range(2*j)][:-n+1])


1

, 19 바이트

F⊕NI×∨﹪ι²±¹…·∧ι⁻²ιι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

  N                 Input as a number
 ⊕                  Increment
F                   Loop over implicit range
                ²   Literal 2
                 ι  Current index
               ⁻    Subtract
              ι     Current index
             ∧      Logical And
                  ι Current index
           …·       Inclusive range
       ι            Current index
        ²           Literal 2
      ﹪             Modulo
          ¹         Literal 1
         ±          Negate
     ∨              Logical Or
    ×               Multiply
   I                Cast to string and implicitly print

대체 설명 :

F⊕N

정수를 0입력 포함으로 반복 합니다.

인쇄하기 전에 결과를 문자열로 캐스트하십시오.

×∨﹪ι²±¹

대체 결과 집합을 무효화합니다.

…·∧ι⁻²ιι

이전 색인을 제외하고 이전 색인에서 현재 색인으로 목록을 구성하십시오.


1

젤리 ,  11  12 바이트

바, 나는 11 wih가 있다고 생각 _2+ỊrN)N;¥/

_2+ỊrN×-*$)Ẏ

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

어떻게?

_2+ỊrN×-*$)Ẏ - Main Link: n           e.g. 4
          )  - for x in [1...n]:           1       2          3               4
_2           -   subtract 2 from x        -1       0          1               2
   Ị         -   is x insignificant?       1       0          0               0
  +          -   add                       0       0          1               2
     N       -   negate x                 -1      -2         -3              -4
    r        -   inclusive range          [0,-1]  [0,-1,-2]  [1,0,-1,-2,-3]  [2,1,0,-1,-2,-3,-4]
         $   -   last two links as a monad:
       -     -     minus one              -1      -1         -1              -1
        *    -     raised to the power x  -1       1         -1               1
      ×      -   multiply                 [0,1]   [0,-1,-2]  [-1,0,1,2,3]    [2,1,0,-1,-2,-3,-4]
           Ẏ - tighten                    [0,1,0,-1,-2,-1,0,1,2,3,2,1,0,-1,-2,-3,-4]


1

스칼라, 119 바이트

def a(n: Int)={lazy val s:Stream[Int]=0#::Stream.from(0).map{x=>s(x)+1 -2*(Math.sqrt(x).toInt%2)}
s.take(n*n+1).toList}

언 골프 드 :

def a(n: Int)={
  lazy val s:Stream[Int]= 0#::Stream.from(0).map //Give the starting point and indexing scheme
  {
    x=>
    {
      val sign = 1-2*(Math.sqrt(x).toInt%2) //Determine whether we are adding or subtracting at the current index
      s(x)+sign
    }
  }
  s.take(n*n+1).toList //Take the desired values
}

이것은 아마도 훨씬 나아질 수 있지만 게으른 스트림을 활용하는 솔루션을 원했습니다.



1

스택 , 44 바이트

[~>0\:2%\#,2*1-tr[...rep]flatmap,$sumonpref]

온라인으로 사용해보십시오! Stacked에서 프로그래밍한지 오래되었지만 아직 가지고 있다고 생각합니다.

대안

73 바이트 : [0\|>:2%tmo*2 infixes[:...|>\rev...|>rev#,$#'sortby 1#behead]flatmap 0\,]

이것은 내 Attache 답변에 사용 된 "생성 된 인덱스의 범위"접근 방식과 관련이 있습니다. Stacked에는 역전 된 범위 나 축소를위한 내장 기능이 없기 때문에 상당히 길었습니다. (그게 :...|>\rev...|>rev#,$#'sortby 1#behead그렇습니다.)

53 바이트 : [0\|>:2%tmo _\tpo#,tr[...rep]flatmap 0\,inits$summap]

... 그래서 내가 대신 누적 합계를 (발견 접근 가기로 결정 inits$summap을 통해) 1-1같이 홀수 정수로 반복 R 대답 .

46 바이트 : [~>0\:2%\#,2*1-tr[...rep]flatmap,inits$summap]

...하지만 생성 된 배열 (범위의 mod 2 값과 범위 자체)에 뺄셈 을 곱하여 음수 홀수를 한 번에 만들 수 있음을 깨달았습니다 . 이것은 첫 번째 범위에 대한 s와 s를 제공하고 두 번째 범위에 대한 홀수 정수를 제공합니다!211-1

44 바이트 : [~>0\:2%\#,2*1-tr[...rep]flatmap,$sumonpref]

... 그리고 접두사 매핑을위한 내장 기능이 있다는 것을 기억했습니다. ^-^


1

줄리아 0.6 , 44 바이트

n->[(i%2*2-1)*[0:i;(n>i)*~-i:-1:1]for i=1:n]

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

OP는 "출력 형식이 유연하다"고 언급하므로 하위 배열의 배열을 인쇄합니다. U (3) => [[0, 1], [0, -1, -2, -1], [0, 1, 2, 3]].

i%2*2-1 현재 하위 배열의 부호를 결정합니다. 짝수이면 음수이고 홀수이면 양수입니다.

[0:i;(n>i)*~-i:-1:1]두 부분으로되어 있습니다. 0 : i는 간단하며 0에서 현재 i까지의 값 범위입니다. 다음 부분에서 ~ -i : -1 : 1은 i-1에서 1까지의 내림차순 범위입니다. 그러나 아직 최종 값이 아닌 경우에만이 값을 더하고 싶습니다. 따라서 범위의 상단에 곱하십시오 n == i 일 때 범위는 0 : -1 : 1이되어 비워집니다 (따라서 배열은 n에서 올바르게 멈춤).


그리고 여기에 랜덤 액세스를 지원할 수있는 버전이 있습니다. 여기서 내부 람다는 시퀀스의 어떤 용어도 저장하지 않고 시퀀스의 i 번째 용어를 반환합니다. 이것도 출력을 하나의 깔끔한 배열로 제공합니다.

49 47 바이트

n->map(i->((m=isqrt(i))%2*2-1)*(m-i+m^2),0:n^2)

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.