정사각형 피라미드 숫자


28

A000330-OEIS

태스크

당신의 작업은 간단하고, 인덱스를 지정해, 그 시퀀스를 생성 i, 그 위치의 값 제곱의 합 내지 0개까지 i어디에 i >= 0.

예:

Input: 0
Output: 0           (0^2)

Input: 4
Output: 30          (0^2 + 1^2 + 2^2 + 3^2 + 4^2)

Input: 5
Output: 55          (0^2 + 1^2 + 2^2 + 3^2 + 4^2 + 5^2)

사양:

  • 입력을받지 않고 시퀀스를 무기한으로 출력 할 수 있습니다.
  • 시퀀스 NNth요소를 입력 및 출력 할 수 있습니다 .
  • 시퀀스 N의 첫 번째 N요소를 입력 하고 출력 할 수 있습니다 .

2
OEIS에서 재미 관찰 :이 순서는 정확히 두 개의 완벽한 사각형을 포함 f(1) == 1 * 1 (1)하고 f(24) == 70 * 70 (4900).
DJMcMayhem

에서 시퀀스를 시작할 수 f(1) = 1있을까요?
Emigna

@Emigna 죄송하지만 아니요부터 시작해야합니다 f(0) = 0. 내가 몇 가지 답변을하는 그 요구 사항 실패했다고 지적했습니다
펠리페 나르디 바티스타를

f(0) = 0요구 사항은 내 솔루션 중 일부를 망쳤습니다. (
ATaco

답변:



22

파이썬 2 , 22 바이트

lambda n:n*~n*~(n*2)/6

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

닫힌 형식의 수식 n * (n + 1) * (2 * n + 1) / 6을 사용 합니다. 코드는 다음 작업을 수행합니다.

  • n 에 ( n*)를 곱합니다 .

    • n ( ~n) 의 비트 단위 보수는 본질적으로 -1-n을 의미 합니다.
    • 그리고 2n ( *~(n*2)) 의 비트 단위 보수로 -1-2n 을 의미 합니다 .
  • 6으로 나눕니다 ( /6).

파이썬 2 , 27 바이트

f=lambda n:n and f(n-1)+n*n

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

Rod 덕분에 1 바이트를 절약 하고 GB 덕분에 1 바이트를 절약했습니다 .


1
이것은 매우 영리합니다!
Skyler


14

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

n=>n*(n+++n)*n/6

데모

방법?

표현식 n+++nn++ + n(1) 로 구문 분석됩니다 . n + ++n이 경우에도 효과가 있기 때문에 실제로 중요하지는 않습니다 .

따라서:

n*(n+++n)*n/6 =
n * (n + (n + 1)) * (n + 1) / 6 =
n * (2 * n + 1) * (n + 1) / 6

어느 평가 합 (K = 0 ... N) (k²) .


(1) 이것은 n='2';console.log(n+++n)정수를 제공하는 5반면 n + ++n문자열 을 제공 함으로써 확인할 수 있습니다 '23'.




6

브레인 플락 , 34 바이트

({(({}[()])()){({}[()])({})}{}}{})

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

어떻게 작동합니까?

처음에는 Riley 1 과 같은 아이디어가 있었지만 제로를 사용하는 것은 잘못된 느낌이었습니다. 나는 그때 깨달았다

{({}[()])({})}{}

n을 계산 2 -n을 .

왜? 잘 우리는 알고

{({})({}[()])}{}

n 2를 계산 하고 n 회 반복합니다. 즉, 두 번의 푸시 순서를 전환하면 매번 합계를 n + (n-1) 씩 증가시키는 것에서 매번 합계를 (n-1) + (n-1) 씩 증가시키는 것으로 이동합니다. 이렇게하면 루프 당 하나씩 결과가 감소하므로 결과는 n 2 -n이됩니다. 최상위 레벨에서이 -n은 0에 대한 필요성을 완화하고 2 바이트를 절약한다는 푸시를 통해 생성 된 n으로 취소됩니다.

Brain-Flak , 36 바이트

({({})(({}[()])){({})({}[()])}{}}{})

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

여기 골프가 아닌 다른 해결책이 있지만 꽤 이상합니다. 그래서 어떻게 작동하는지 알아내는 것이 어려울 것이라고 생각했습니다.

당신이 Brain-Flak에 있지 않지만 여전히 도전을 원한다면 그것은 요약입니다.

Picture


1 : 여기에 대한 답변을보기 전에 솔루션을 생각해 냈습니다. 여기 표절이 없습니다.


나는 이것을 할 수있는 방법이 있어야한다는 것을 알고 있었고, 당신이 수학을 알아낼 수있는 느낌이 들었습니다.
Riley




2

Brain-Flak , 46 바이트

{(({})[()])}{}{({({})({}[()])}{}<>)<>}<>({{}})

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



@Riley Ooh nice :)
HyperNeutrino

정사각형을 대체 스택에 밀어 넣는 대신 사각형을 평가하고 밀지 않고 전체 루프를 밀어서 직접 합할 수 있습니다. 이렇게 ({{({})({}[()])}{}}{})하면 후반이로 바뀌고 10 바이트가 절약됩니다. (이것이 말이
안된다면





2

R, 17 바이트

sum((0:scan())^2)

매우 간단하게, ^(지수)가 R 로 벡터화 된다는 사실을 이용합니다 .


1
(x=0:scan())%*%x바이트가 짧지 만 cat출력을 얻으려면 믿습니다 .
Giuseppe

@Giuseppe 방금 시도했지만 코드는없이 작동 cat하며 1x1 행렬을 출력합니다.
Rui Barradas '10

@RuiBarradas 현재 메타 합의는 cat이것이 전체 프로그램으로 자격을 갖추기 위해 필요하다는 것입니다. 그 내용을 바꾸 려면 이 질문에 답 하고 사이트의 다른 R 사람들 사이에서 약간의 관심 을 받으십시오 .
Giuseppe

2

CJam , 9 바이트

ri),_.*:+

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

설명

ri        e# Read input and convert to integer N.
  ),      e# Get range [0 1 2 ... N].
    _     e# Duplicate.
     .*   e# Pairwise products, giving [0 1 4 ... N^2].
       :+ e# Sum.

또는

ri),2f#:+

2#쌍별 제품을 사용하는 대신 매핑 하여 각 요소를 제곱합니다 . 그리고 부동 소수점 산술을 사용하기 때문에 큰 입력에 대해 부정확 한 또 다른 대안은 재미 있습니다.

ri),:mh2#


2

미로 , 11 바이트

:!\
+ :
*:#

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

시퀀스를 무기한으로 인쇄합니다.

설명

명령 포인터는 계속해서 코드의 제곱 주위에서 계속 실행됩니다.

:!\    Duplicate the last result (initially zero), print it and a linefeed.
:      Duplicate the result again, which increases the stack depth.
#      Push the stack depth (used as a counter variable).
:*     Square it.
+      Add it to the running total.

2

Cubix , 15 바이트

Iu):^\+*p*6u@O,

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

내 코드는 조금 슬프다 ):

계산 n*(n+1)*(2n+1)/6

    I u
    ) :
^ \ + * p * 6 u
@ O , . . . . .
    . .
    . .

^Iu : read in input, u-turn
    : stack  n
:)\ : dup, increment, go right..oh, hey, it cheered up!
    : stack: n, n+1
+   : sum
    : stack: n, n+1, 2*n+1
*   : multiply
    : stack: n, n+1, 2*n+1, (n+1)*(2*n+1)
p   : move bottom of stack to top
    : stack: n+1, 2*n+1, (n+1)*(2*n+1), n
*   : multiply
6   : push 6
u   : right u-turn
,   : divide
O   : output
@   : terminate





2

헥사 고니 , 23 바이트

?'+)=:!@/*"*'6/{=+'+}/{

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

설명

펼쳐진 :

   ? ' + )
  = : ! @ /
 * " * ' 6 /
{ = + ' + } /
 { . . . . .
  . . . . .
   . . . .

이것은 실제로 /일부 리디렉션에 사용되는 선형 프로그램입니다 . 선형 코드는 다음과 같습니다.

?'+){=+'+}*"*'6{=:!@

어떤 계산하여 N (N + 1) (2N + 1) / 6 . 다음과 같은 메모리 에지를 사용합니다.

enter image description here

메모리 포인트 (MP)가 n으로 표시된 가장자리에서 시작하여 북쪽을 가리 킵니다.

?   Read input into edge labelled 'n'.
'   Move MP backwards onto edge labelled 'n+1'.
+   Copy 'n' into 'n+1'.
)   Increment the value (so that it actually stores the value n+1).
{=  Move MP forwards onto edge labelled 'temp' and turn around to face
    edges 'n' and 'n+1'.
+   Add 'n' and 'n+1' into edge 'temp', so that it stores the value 2n+1.
'   Move MP backwards onto edge labelled '2n+1'.
+   Copy the value 2n+1 into this edge.
}   Move MP forwards onto 'temp' again.
*   Multiply 'n' and 'n+1' into edge 'temp', so that it stores the value
    n(n+1).
"   Move MP backwards onto edge labelled 'product'.
*   Multiply 'temp' and '2n+1' into edge 'product', so that it stores the
    value n(n+1)(2n+1).
'   Move MP backwards onto edge labelled '6'.
6   Store an actual 6 there.
{=  Move MP forwards onto edge labelled 'result' and turn around, so that
    the MP faces edges 'product' and '6'.
:   Divide 'product' by '6' into 'result', so that it stores the value
    n(n+1)(2n+1)/6, i.e. the actual result.
!   Print the result.
@   Terminate the program.

이론적 으로이 프로그램을 측면 길이 3에 맞추는 것이 가능할 수 있습니다. 왜냐하면 /계산에 필요하지 않기 때문에 :프로그램을 종료하는 데 재사용 할 수 있으며 일부는 '"=+*{재사용 할 수 있기 때문에 필요한 수를 가져 오는 것입니다 19 미만의 명령 (측면 길이 3의 최대 값). 그래도 그러한 솔루션을 찾을 수 없다면 의심 할 여지가 없습니다.


2

> <> , 15 13 11 바이트

나무아니기 때문에 2 바이트 절약

0:n:l1-:*+!

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

시퀀스를 무기한 출력합니다.


1
14 바이트 ( -v플래그의 경우 12 + 2 ) : ::1+:}+**6,n( 온라인으로 시도하십시오! )
나무가 아님

1
또는 11 바이트 (에서 시작하여 영원히 인쇄 N=1) : 온라인으로 사용해보십시오!
나무가 아님

@Notatree :를 사용하는 것이 좋습니다 l. 1에서
시작해도

@Notatree : 불행히도 1에서 시작할 수는 없지만 여전히 2 바이트를 절약합니다. 감사!
Emigna

1
( lMartin Ender의 Labyrinth 답변 에서 아이디어를 얻었음을 언급해야합니다 .)
나무가 아닙니다

2

Pyth , Steven H 덕분에 7 5 바이트

s^R2h

설명:

s^R2h       Full program - inputs from stdin and outputs to stdout
s           output the sum of
    h       range(input), with
 ^R2         each element squared

나의 첫 번째 해결책

sm*ddUh

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

설명:

sm*ddUh    Full program - inputs from stdin and outputs to stdout
s          sum of
 m   Uh    each d in range(input)
  *dd      squared

Pyth에 내장 된 사각형이 없습니까?
caird coinheringaahing

내가 아는 한 ...
Dave

사각형 내장 Pyth는 없습니다. 또한 6 바이트
Mr. Xcoder


각 답변에 +1 바이트로 고정 가능하며 모바일에서 나간 후 편집합니다.
Dave




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