四角錐番号


28

A000330-OEIS

仕事

タスクは簡単です。indexを指定すると、iその位置の値がwhere 0までの平方和になるシーケンスを生成します。ii >= 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)

仕様:

  • 入力を受け取らず、シーケンスを無期限に出力できます。
  • シーケンスの要素を入力Nおよび出力できNthます。
  • シーケンスのN最初のN要素を入力および出力できます。

2
OEISから楽しい観測:このシーケンスは、正確に2完璧な正方形を含んでいますf(1) == 1 * 1 (1)、とf(24) == 70 * 70 (4900)
DJMcMayhem

シーケンスを開始できf(1) = 1ますか?
エミグナ

@Emigna申し訳ありませんが、いいえ、から開始する必要がありますf(0) = 0。私はその要件に失敗したいくつかの答えに指摘した
フェリペナルディバティスタ

f(0) = 0要件は:(私のソリューションの数台無し
ATaco

回答:



22

Python 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ます()。

Python 2、27バイト

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

オンラインでお試しください!

Rodのおかげで1バイト、GBのおかげで1バイト節約できました。


1
これは非常に賢いです!
スカイラー


14

JavaScript(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

sum(k = 0 ... n)(k²)評価されます。


(1)これは、文字列を与えるのに対しn='2';console.log(n+++n)、整数を与えることで確認できます。5n + ++n'23'




6

Brain-Flak、34バイト

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

オンラインでお試しください!

どのように機能しますか?

当初、私はライリー1と同じ考えを持っていましたが、ゼロを使用するのは間違っていると感じました。それから気づいた

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

n 2 -nを計算します。

どうして?よく知っている

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

n 2を計算し、n回ループします。つまり、2つのプッシュの順序を切り替えると、毎回合計をn +(n-1)ずつ増やすことから、毎回合計を(n-1)+(n-1)ずつ増やすことになります。これにより、ループごとに結果が1つ減少するため、結果はn 2 -nになります。最上位レベルでは、この-nは、ゼロ化の必要性を軽減し、2バイトを節約するゼロ化をプッシュによって生成されたnでキャンセルします。

Brain-Flak、36バイト

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

オンラインでお試しください!

ここに別の解決策がありますが、それはゴルフほどではありませんが、かなり奇妙なので、私はそれがどのように機能するかを理解するための挑戦としてそれを残すと思いました。

もしあなたがBrain-Flakに興味がなくても、ここでの挑戦がまだ必要なら、それは総括としてです。

画像


1:ここで答えを見る前に、解決策を思いつきました。ここでは盗作はありません。


私はこれを行う方法がなければならないことを知っていました、そして、あなたはそれのための数学を理解する人になるだろうと感じました。
ライリー




2

Brain-Flak、46バイト

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

オンラインでお試しください!



@Riley Ooh nice :)
HyperNeutrino

正方形を代替スタックにプッシュするのではなく、評価してプッシュせずに、ループ全体をプッシュすることにより、正方形を直接合計することができます。これにより、後半がに変更され({{({})({}[()])}{}}{})、10バイト節約されます。(それが意味をなさない場合は、3番目のスタックでpingしてください)
DJMcMayhem





2

R、17バイト

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

かなり簡単です。^(指数)がRでベクトル化されるという事実を利用しています。


1
(x=0:scan())%*%xは1バイト短くなりますが、cat出力を取得する必要があると思います。
ジュゼッペ

@Giuseppe試してみたところ、あなたのコードはなしで動作しcat、1x1マトリックスを出力します。
ルイバラダ

@RuiBarradas現在のメタコンセンサスは、catこれが完全なプログラムとして認められるために必要です。それを変更したい場合は、この質問に答えて、サイト上の他のRの人々の間で牽引力を得てください。
ジュゼッペ

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を計算します。次のメモリエッジを使用します。

ここに画像の説明を入力してください

メモリポイント(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バイト

Not a treeのおかげで2バイト節約

0:n:l1-:*+!

オンラインでお試しください!

シーケンスを無期限に出力します。


1
14バイト(12 + 2 -vフラグ): ::1+:}+**6,nオンラインをお試しください!
未ツリー

1
または11バイト(から始まる永久印刷N=1):オンラインで試してみてください!
ツリーではない

@Notatree:を使用した非常に良いアイデアですl。1から開始してもいいかどうかをOPで確認します
。– Emigna

@Notatree:残念ながら、1から開始することはできませんが、それでも2バイトは節約されます。ありがとう!
エミグナ

1
lマーティン・エンダーのラビリンスの答えからアイデアを得たということに言及する必要があります。)
木ではない

2

Pyth7 5バイト、Steven Hに感謝

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には正方形は組み込まれていませんか?
コイナーリンガーをケアします。

ではない私の知る限りでは...
デイブ

いいえ、正方形のビルトインPythはありません。また、6バイト
氏Xcoder


各回答に+1バイトで修正可能で、モバイルから降りたら編集します。
デイブ




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.