N番目のNgonal数


8

私たちのほとんどは、おそらく三角形と平方数の概念に精通しています。ただし、五角形、六角形、七角形、八角形などもあります。N番目のNagonal数は、N辺の多角形で形成されるシーケンスのN番目の数として定義されます。明らかに、N> = 3です。2面または1面の閉じた形状がないためです。最初のいくつかのN番目のNgonal番号は0、1、2、6、16、35、66、112、176、261、370、506、672、871です。...これはOEISのシーケンスA060354です。

あなたのタスク:

整数nを入力として指定すると、N番目のNagonal数を出力/返すプログラムまたは関数を記述します。

入力:

3〜10 ^ 6の整数N。

出力:

N番目の対角番号。Nは入力です。

テストケース:

25 -> 6925
35 -> 19670
40 -> 29680

得点:

これは、バイト単位の最低スコアが勝ちます!



直接正確な定義を追加しても問題ありません。
Wlod AA 2017

回答:


11

ネイム、1バイト

¯\ _(ツ)_ /¯

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


1
このための組み込みですか?本当に?明らかに、私が思っていたよりもあいまいさが少なくなっています。
グリフォン2017年

1
@Gryphonそれは古くから存在しています。
Okx

2
@グリフォンうん。5月から存在しています。
Okx 2017年

1
@Gryphonその時点で、多角形の数値には多くの課題があったため、
Neim

3
これは、ath - bgonal数を計算するための組み込み関数のようで、指定された唯一の引数で両方のパラメーターが自動入力されます。
Lynn

6

05AB1E7 6バイト

ニールのおかげで1バイト節約

<ÐP+>;

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

説明

<        # push input-1
 Ð       # triplicate
  P      # product of stack
   +     # add input
    >    # increment
     ;   # divide by 2

<Dn*+>;7バイトでも機能します。
Neil

@ニール:ありがとう!その修正バージョンは私にバイトを節約しました:)
Emigna '11 / 10/17

<3m代わりにできません<ÐPか?
Erik the Outgolfer 2017年

@EriktheOutgolfer:もちろんですが、同じバイト数です。
Emigna

@Emigna確かに尋ねました。
Erik the Outgolfer 2017年


4

Japt9 8バイト

´U+³ z Ä

それを試してみてください

  • ETHにより1バイト節約

説明

´入力(U)をデクリメント()し、それに入力の3乗(³)を追加し、フロアを2で除算(z)し、1(Ä)を追加します。


そこ9バイトでこれを書き換えるbazillionの方法についてですが、それはああ、ここで私は動作するはずだと思う一つだ... 8バイトの解決策を見つけることは難しい:´U+³ z Ä
ETHproductions

@ETHproductions、いいですね。それを壊そうとしている間に仕事に気を取られました。
Shaggy

@ETHproductions素敵なもの、それはトリッキーです...別のものはでしょう´U+³+2 z
Erik the Outgolfer 2017年

@EriktheOutgolfer:またはのÄÄ代わりに+2
Shaggy

1
7バイト:à3 *3+UまたはU+3*Uà3(クレジットは部分的にLynnに送られます)...より多くのバイトを節約するために再配置できることを確認してください。
Xcoder氏2017年




3

MATL、7バイト

t3Xn3*+

Luis Mendoの提案。これはもう少し明確です。

    (implicit input)
t                         duplicate
 3Xn                      n choose 3
    3*                    multiply by 3
      +                   add
(implicit output)

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

t:3XNn+

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

どちらのソリューションもLynnのアルゴリズムを移植しています

(implicit input)
t                         duplicate
 :                        range (1...n)
  3XN                     push 3, compute all 3-combinations of the range
     n                    number ( equal to 3*choose(n,3) )
      +                   add
(implicit output)

おそらく、少し単純:t3Xn3*+
ルイスMendo

ええと、私は探してXnそれを見なかったことを誓います。ドキュメントの読み方を知っているとは思いません...
Giuseppe

ドキュメンテーションはより明確になる可能性があります:-)これは、多かれ少なかれ同等のMatlab関数を知っていることを前提としています。あなたが検索した場合この場合、組み合わせnchoosekSueverのサーバーには、結果として両方の機能を提供します
ルイス・Mendo


2

JavaScript(ES6)、38バイト

f=(n,k=n)=>k<2|n<3?k:f(n-1,k)+f(3,k-1)

再帰FTW(またはおそらく7番目のみ...)


または、17バイトのクローズドフォームソリューションを移植できます...
Neil






1

dc、13バイト

dd2-2^*r2^+2/

OEISページにリストされている最初の式のかなり単純な実装。

# Commands           # Stack Tracker (tm)
# Begin with input   # n
d                    # n n
d                    # n n n
2-                   # n-2 n n
2^                   # (n-2)^2 n n
*                    # n*(n-2)^2 n
r                    # n n*(n-2)^2
2^                   # n^2 n*(n-2)^2
+                    # n*(n-2)^2+n^2
2/                   # (n*(n-2)^2+n^2)/2 # matches first formula
# End with output on stack






0

Java 8、18バイト

n->n*(n*n-3*n+4)/2

ここで試してください。

他のほとんどの回答で使用されているアプローチは、Javaで最短です。ファンシーのために、私は他の2つの答えも移植しました:

Xcoder氏のPython 2回答のポート(29バイト):

n->(int)Math.pow(n-1,3)-~n>>1

ここで試してください。

Port of Lynn's Jelly answer(with手動計算a choose b)(76 bytes):

n->c(n,3)*3+nint c(int t,int c){return t<c?0:c==t|c==0?1:c(--t,c-1)+c(t,c);}

ここで試してください。

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